创建一个递归ffmpeg转换器

时间:2014-11-23 19:12:58

标签: batch-file video ffmpeg

我正在尝试创建某种类型的脚本,将其在文件夹中检测到的任何视频文件(也扫描子文件夹)转换为同名的.avi文件,然后删除原始文件文件。我没有真正使用cmd进行任何编程/脚本编写,所以我对我怀疑是一些非常简单的语法问题感到磕磕绊。

如果有人熟悉编码和ffmpeg,请指出编码选项是否错误(我现在在黑暗中磕磕绊绊)。

使用this thread,我正在使用目前类似的内容:

dir/b/s *.(mkv|mp4|m4v|wmv) >listing.txt  #Make a list of all the files with certain extensions, for reading.
for /F "delims=;" %%F in (listing.txt) do ffmpeg.exe  -i "%%F" -c:v libx264 -preset slow -crf 20 -c:a libvo_aacenc -b:a 128k "%%~na.avi"
#Then to delete original files
for /F "delims=;" %%F in (listing.txt) do del %%F
del listing.txt

我遇到的第一个问题是,我希望能够使用所有常见的视频类型填充列表。我想象cmd有一些类似于perl字符串匹配的语法,例如A(B|C)会匹配我可以模仿匹配任何视频文件扩展名的AB和AC吗? (我在上面的代码中写了它来说明这一点,但我知道它不起作用。)

我希望这足以试图说明我在尝试什么。

1 个答案:

答案 0 :(得分:0)

dir * .ext1 * .ext2

然而,如果期望名称中有空格,则最好指定完整路径并使用引号。

Dir "%userprofile%\documents\*.avi" "%userprofile%\documents\*.mp4" /a /s /b

For命令比forfiles更容易。但不适合多种文件类型。

它也可以是一行

@for /f "usebackq delims=" %A in (`dir "%Userprofile%\documents\*.avi" "%Userprofile%\documents\*.mp4" /a /s /b`)  do @echo %A

在批处理文件中使用%% A,在键入命令时使用%A。