【发布时间】:2023-04-04 03:15:01
【问题描述】:
Windows 10, ffmpeg
我对 ffmpeg 很陌生,所以我无法弄清楚。我正在尝试使用命令复制然后将目录中的所有 .MOD 视频文件转换为 .mp4 文件并保留 .MOD 文件的原始创建日期。我不明白如何将循环中的当前文件映射到 map_metadata 选项。此命令有效,但不维护元数据 (taken from this post)
FOR /F "tokens=*" %G IN ('dir /b *.MOD') DO ffmpeg -i "%G" -acodec copy "%~nG.mp4"
我尝试在上述命令中包含地图,但出现各种错误,主要是“输入文件索引无效:1”。下面的命令将复制和转换,但新的 .mp4 文件没有原始文件日期,所以我必须错误地使用 map_metadata:
FOR /F "tokens=*" %G IN ('dir /b *.MOD') DO ffmpeg -i "%G" -acodec copy -map_metadata 0 "%~nG.mp4"
FOR /F "tokens=*" %G IN ('dir /b *.MOD') DO ffmpeg -i "%G" -map_metadata 0 -acodec copy "%~nG.mp4"
有什么建议吗?谢谢
更新
我用 Powershell 得到了这个! (感谢this post)
$oldvids = Get-ChildItem *.MOD -Recurse
foreach ($oldvid in $oldvids) {
$newvid = [io.path]::ChangeExtension($oldvid.LastWriteTime.toString("MMMddyyyy_HHmmss"), '.mp4')
ffmpeg.exe -i $oldvid.FullName -c:v libx264 -crf 18 -c:a aac -q:a 100 $newvid
}
输入:MOV01E.MOD(创建日期 2012 年 4 月 1 日上午 10:10)
输出:Apr012012_101005.mp4
另一个更新
上面的命令是可行的,但我刚刚意识到所有的文件都输出到了根目录。我稍微更改了命令,但我不确定发生了什么:
Get-ChildItem *.MOD -recurse | % {
$newvid = [io.path]::ChangeExtension($_.LastWriteTime.toString("MMMddyyyy_HHmmss"), '.mp4')
ffmpeg.exe -i $_.FullName -c:v libx264 -crf 50 -c:a aac -q:a 100 $newvid
}
【问题讨论】:
标签: windows powershell video ffmpeg windows-10