(11)ffmpeg如何批量處理音視頻字幕?結(jié)合批處理相關(guān)寫法模板
ffmpeg用多了,或者平時在用一些轉(zhuǎn)碼、剪輯軟件的時候,不時看到有小伙伴問:能不能批量轉(zhuǎn)碼?批量壓制?有時一些資源想統(tǒng)一剪掉某一段,或者一個視頻想剪許多鏡頭下來,up自己剪得像個人工智能…
所以,也正是第一篇說的那樣,ffmpeg可以做到這么簡單。個人覺得在平常使用這方面上,ffmpeg最大的魅力優(yōu)點是能結(jié)合批處理也就是batch,來對音視頻字幕文件進(jìn)行各種批量的處理。(簡單你寫3w多字基本還是基礎(chǔ)…
1、上手例子:批量轉(zhuǎn)封裝flv→mp4
好吧,老是瞎扯這么多x我們先看一個最典型的例子——轉(zhuǎn)封裝。回想一下轉(zhuǎn)封裝的命令行:
ffmpeg -i .\in.flv -c copy .\out.mp4
這里我們將一個flv視頻轉(zhuǎn)成一個mp4視頻,注意俺特別寫出“一個”,這樣想來,批量就是很多很多個。換言之,可以想象很多很多個flv和mp4,在命令行的那個相應(yīng)位置拼命排隊“輪換”,其它都不用變,不影響。那ffmpeg不就可以實現(xiàn)所謂的批量轉(zhuǎn)封裝了嗎?!
確實.jpg。不過ffmpeg本身(好像?)沒這種做法的參數(shù)指令。但正因為我們是以cmd來使用的ffmpeg,而cmd本身可以運行一種腳本指令,叫做batch,就是…(又繞回上文去了…
批量轉(zhuǎn)封裝的命令行如下。直接在cmd輸入運行:
for %i in (.\*.flv) do ffmpeg -i "%i" -c copy "%~dpni.mp4"
等等這啥玩意…跟你第八篇毫無說明一樣恐怖不經(jīng)歷風(fēng)雨,怎么見彩虹嘛,咳咳…up相信小伙伴們,嗯√
這邊up不會對batch指令作詳細(xì)介紹,感興趣的話可以看我另一本文集~

簡單說說它的意思。第一個?%i?指的是(.\*.flv)這個內(nèi)容,*是指所有全部的flv。順便復(fù)習(xí)一下“.\”在第一篇還記得什么意思吧?flv所在的某個目錄。因此for?%i in (.\*.flv) do就是說,要對某個目錄(不包括其子目錄)里的所有flv進(jìn)行什么操作。-i后面的“%i”也表示?%i?的內(nèi)容,只是給它加上英文雙引號。"%~dpni.mp4"表示照抄"%i"的盤符(比如C盤)、文件夾目錄、文件名的內(nèi)容,只是后綴拓展名是和原來單獨用ffmpeg一樣手打的mp4。
啊,看圖~

當(dāng)然,我們還可以把這個命令行以某種文件形式保存起來,方便以后運行。這點也像第八篇x
新建記事本,復(fù)制粘貼以下內(nèi)容:
for %%i in (.\*.flv) do ffmpeg -i "%%i" -c copy "%%~dpni.mp4"

這樣做的話建議(*.flv)這樣就好,原因下面再說
然后直接另存為:

注意把編碼改成ANSI,默認(rèn)是UTF-8
最后,當(dāng)我們需要flv轉(zhuǎn)封裝mp4的時候,
直接把這個cmd文件粘貼到flv所在目錄,運行即可

2、觸類旁通:批量轉(zhuǎn)碼、壓制、抽取、剪輯等
回顧一下第二篇里提到的“如何理解ffmpeg的命令行”:輸入input、處理process、輸出output。學(xué)過編程的朋友也許有感覺了,就是“IPO”模式嘛,程序的一個基本編寫方法。
cmd直接輸入“ffmpeg”運行可以看到,ffmpeg命令行組成結(jié)構(gòu)是這樣的:
ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
也就是說,ffmpeg 全局設(shè)置 輸入設(shè)置 -i 輸入文件 … 輸出設(shè)置 輸出文件 …
溫故知新。我們想想,就像中學(xué)的“控制變量法”,要把批量轉(zhuǎn)封裝變成批量做其它事,ffmpeg命令行中哪些需要變,哪些保持不變。
顯然,批量轉(zhuǎn)碼,要改變-c,其它設(shè)置和轉(zhuǎn)封裝的情況一般一樣。批量壓制,除了改變-c,還可考慮相關(guān)壓制參數(shù)的設(shè)置,其它也和轉(zhuǎn)封裝基本一樣。(這里暫不討論批量二次編碼)批量抽取,用到-map,其它也是看著照抄。這三個主要考慮的都是“處理process”,或者說“輸出設(shè)置”。批量剪輯,在開頭加上-ss -to,其它還是照抄。它改變的就是“輸入設(shè)置”或“全局設(shè)置”了。
同理,還有其它的什么“姿勢”,都可以試想著看看能否這樣觸類旁通~
3、思路拓展:多樣需求,程序交互
嚯,這很有意思。如果我的是其它容器格式,那么把后綴拓展名照改,其它跟著設(shè)置就行。視頻、音頻、字幕都可以這么來。
于是up做了一個“ffmpeg批量轉(zhuǎn)封裝器.bat”:https://lusisi.lanzouv.com/b015ewkgj?密碼:3cl4
方便平時批量轉(zhuǎn)封裝各種音視頻字幕文件,可自定義輸出目錄,下載下來照著用就知道了。
那么按照這個思路,其它process也可以這么“程序交互”,還可以把它們?nèi)颊掀饋?。我還沒做(那啥從未開始x
另外,還有些需求例如:對一個音視頻文件進(jìn)行多段剪輯最后逐個輸出,同時封裝許多音視頻字幕軌最后輸出一個視頻,同時進(jìn)行幾種不同的process……
對于batch的不同寫法所能解決的不同需求,或者能不能帶來更好的使用體驗?例如,現(xiàn)在是通過雙擊運行batch文件,再做下一步操作。還能將待處理文件拖入batch文件即自動運行,或者簡單寫個txt文本再由batch所運用,或者……等等。
嘛,人生苦短,道阻且長,這些就未來再說啦~
感謝你觀看到這里。