2014-11-23 56 views
0

我想创建一个脚本,它会将它在一个文件夹(也扫描子文件夹)内检测到的任何视频文件转换为相同名称的.avi文件, ,然后删除原始文件。我并没有真正使用cmd来编写任何程序/脚本,所以我踌躇着我所怀疑的是一些非常简单的语法问题。创建一个递归ffmpeg转换器

如果有人熟悉编码和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,我可以模仿匹配任何视频文件扩展名? (我已经在上面的代码中写了它来说明这一点,但我知道它不起作用)。

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

+0

为什么AVI而不是像H.264这样常用的更现代的容器格式如MP4?另外,原生FFmpeg AAC编码器('-c:aac-strict experimental')在128k时可能比'libvo_aacenc'好。 – LordNeckbeard 2014-11-23 21:05:27

+0

纯粹是因为我想要将这些文件可靠地传输到其他设备(即X360),并且它不播放mp4的所有编码变体,但不包含avi - 至少在我过去的经验中。 – 2014-11-23 21:18:19

回答

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。如果键入的命令。

+0

比你大,这很大程度上实现了我以后的事情。你会碰巧知道为什么我错误说'%% F在这个时候是意外的吗? – 2014-11-23 21:12:24

+0

因为我使用%% A并且使用%% F。确保所有的%% F都是%% A,反之亦然。 – 2014-11-23 21:29:56

+0

是的,你的最后一点得到了它,我正在测试,直接输入到提示符,它抱怨双%。 – 2014-11-23 22:16:32