2013-04-22 372 views
4

我想设置一个Windows批处理文件来使用FFMPEG转换一些MP4文件。在多个子文件夹中有许多文件,因此我需要在每个子文件夹中的每个文件上执行该脚本。FFMPEG - 批量转换子文件夹

我怕我没有使用批处理文件但是从我的研究,我已经得到了下面的命令文本的很多经验:

FOR %%i in (*.mp4) /R DO (ffmpeg32 -i "%%~ni.mp4" -map 0:0 -map 0:1 -map 0:1 -c:v copy -c:a:0 aac -b:a 128k -ac 2 -strict -2 -cutoff 15000 -c:a:1 copy "%~ni&(2).mp4") 

脚本基本上需要一个AAC音频流增加现有的MP4文件,因此我需要通过在文件名末尾添加(2)来更改输出名称。

我已经单独测试了ffmpeg命令,所以很高兴它工作 - 我只需要得到正确的批处理命令。

在此先感谢您的指点!

干杯

回答

5

试试这个:

@echo off & setlocal 
FOR /r %%i in (*.mp4) DO ffmpeg32 -i "%%~fi" -map 0:0 -map 0:1 -map 0:1 -c:v copy -c:a:0 aac -b:a 128k -ac 2 -strict -2 -cutoff 15000 -c:a:1 copy "%%~dpni(2)%%~xi" 
+0

谢谢你,作品一种享受。 为了我自己的理解,“%%〜fi”和“%%〜dpni”/“%%〜xi”实际上在批处理文件中做了什么? – user2306403 2013-04-22 08:52:59

+1

'%%〜f' - >全名(驱动器+路径+文件+扩展名),'〜dpn' - >驱动器+路径+文件,'〜x' - >扩展名(.MP4)帮助在命令行上查看'help for'。 – Endoro 2013-04-22 10:12:57

+0

干杯,非常感谢 – user2306403 2013-04-22 14:43:11

0

此窗口批处理(.bat)脚本将从MP4文件的子文件夹(或嵌套目录)中删除的音频,然后删除旧文件。它被SLEEP命令放慢,因为在windows和linux中复制之前,文件删除显然存在问题。

FOR /r %%i in (*.mp4) DO ffmpeg.exe -i "%%~fi" -vcodec copy -an "%%~dpni(2)%%~xi" && sleep 1 && del "%%~fi"