2014-11-23 55 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