将.MOD视频文件转换为.mp4,但保留原始文件日期

时间:2016-02-26 18:15:06

标签: windows powershell video ffmpeg windows-10

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(创建日期4/1/2012 10:10 AM)

输出: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
}

1 个答案:

答案 0 :(得分:1)

我只需要更改输出文件以包含目录路径

Get-ChildItem *.MOD -recurse | % {
    $newvid =  [io.path]::ChangeExtension($_.LastWriteTime.toString("MMMddyyyy_HHmmss"), '.mp4')
    ffmpeg.exe -i $_.FullName -c:v libx264 -crf 20 -c:a aac -q:a 100 ($_.DirectoryName + "\" + $newvid)
}