《FFmpeg Basics》中文版-21-批處理文件

寫在前面

如果您對音視頻技術(shù)感興趣,可以訂閱我的專題:音視頻專輯
也可以關(guān)注我的簡書賬戶: 張芳濤,我后期會發(fā)布更多的音視頻以及圖像處理方面的文章袒哥。

正文

批處理文件的優(yōu)點

FFmpeg工具通常用于各種任務(wù)韵丑,不容易記住不同的編解碼器的所有參數(shù),過濾器等等导帝。將各種命令組合保存到批處理文件中守谓,優(yōu)化了工作,并將開發(fā)提升到下一個級別您单。批處理文件是帶有.bat擴(kuò)展名的文本文件斋荞,在Windows操作系統(tǒng)上主要用于管理任務(wù)。它們包含命令虐秦,這些命令是按順序處理的平酿,可以打印各種消息凤优,請求輸入等等。

@echo off
ffmpeg -i %1

將該文本保存到文件測試中蜈彼。bat并由下一個命令調(diào)用筑辨,其中filename是媒體文件,我們希望看到它的屬性(幸逆。命令中的bat擴(kuò)展是可選的):

test.bat filename or test filename

批處理文件的命令

可以使用命令幫助或幫助|來顯示可用的Windows控制臺命令棍辕。其中一些是特定于批處理文件的。這些和其他命令在表中描述:
基本批處理文件命令

@ 在行開始時使用还绘,然后命令沒有響應(yīng)痢毒。例子:@echo off
%n(n是自然數(shù)) 在命令行上輸入空格分隔的參數(shù)的占位符,在批處理文件的名稱之后蚕甥,例如:greeting.bat用兩行代碼:
@echo off
Good %1, %2
如果用右邊這個命令調(diào)用:greeting day friends
顯示的結(jié)果就是:Good day, friends
:label GOTO命令的起始點哪替,更改處理順序,批處理文件示例:
line 1 ... line 10 (第1 - 10行包含各種命令)
:NewItem
line 12 ... line 16 (第12 - 16行包含各種命令)
GOTO NewItem
當(dāng)處理流到達(dá)第17行時菇怀,GOTO命令將它發(fā)送回NewItem標(biāo)簽凭舶,并在第12行繼續(xù)運行
CALL 語法:調(diào)用[drive][path] filename [batch parameters]
調(diào)用另一個批處理文件,并且在它的所有命令都準(zhǔn)備好之后爱沟,繼續(xù)處理調(diào)用文件的下一行帅霜。如果被調(diào)用的文件不存在,則會顯示一條錯誤消息
CHOICE 停止處理呼伸,讓用戶選擇一個選擇身冀,通常是或否
語法:CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]
/C[:]choices 指定允許的key。默認(rèn)是YN
/N 在提示字符串的末尾 不顯示choices和?
/S 把選擇鍵當(dāng)作區(qū)分大小寫
/T[:]c,nn 在<nn>秒之后會默認(rèn)選擇到c 文本提示字符串顯示
CLS 清除屏幕括享,控制臺輸出從頂部繼續(xù)
ECHO 語法: ECHO [ON | OFF] or ECHO [message]
命令“echo off”在處理過程中停止打印命令搂根,“echo on”,即默認(rèn)情況下铃辖,再次打開它剩愧。命令“echo some_text”將在處理過程中打印some_text
FOR 在一組文件中為每個文件運行指定的命令
FOR %%變量 IN(set) DO 命令[命令行設(shè)置]
%變量 指定一個可替換的參數(shù),該參數(shù)值由該命令使用娇斩。
(set)指定一組或多個文件仁卷,可以使用通配符,e.g.(.doc)
command(命令行) 指定為每個文件執(zhí)行的命令。
command-parameters(命令行參數(shù)) 指定指定命令的參數(shù)或開關(guān)犬第。
示例命令顯示所有TXT文件(在批量中使用%%f锦积,在cmd命令行以%f形式):
FOR %%F IN (
.txt) DO type %%F
GOTO label 將處理重定向到指定的標(biāo)簽,請參見:標(biāo)簽示例:上面的命令的
IF IF [NOT] ERRORLEVEL 數(shù)字命令
IF [NOT] string1==string2命令
IF [NOT] EXIST 文件名命令
NOT 指定只有在條件為假時歉嗓,DOS才應(yīng)該執(zhí)行命令
ERRORLEVEL 如果最后一個程序運行返回的退出碼等于或大于指定的數(shù)字丰介,則number指定一個真實的條件
command 指定在滿足條件時執(zhí)行的命令
string1==string2 如果指定的文本字符串匹配,則指定一個真實的條件
EXIST 如果指定的文件名存在,則filename指定一個真實的條件
IF 命令指定條件處理
PAUSE 停止處理并顯示消息:“按任意鍵繼續(xù)…”
REM 語法:REM [命令]
用于添加描述和其他信息基矮,在處理過程中不使用
SHIFT 語法:SHIFT [n] (n是一個自然數(shù))
用于通過命令行移動已編號參數(shù)的位置,并在批處理文件中使用%1冠场、%2等家浇。批文件名稱shift.bat:
@ECHO OFF
ECHO %1
SHIFT
ECHO %1
現(xiàn)在,當(dāng)我們開始這個文件的時候碴裙,它的結(jié)果是:
First
First
START START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]<bt>[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[參數(shù)]
為指定的命令啟動一個新窗口钢悲。對于所有選項的描述,請輸入幫助啟動

批處理文件的典型用法

  • 便攜式設(shè)備的視頻轉(zhuǎn)換
  • 音頻轉(zhuǎn)換從各種格式到MP3文件的MP3播放器
  • 減少在web上使用的幀大小和比特率

    批處理文件用于音頻和視頻處理任務(wù)舔株,這些任務(wù)經(jīng)常重復(fù)莺琳。例如,我們可以將一個快捷方式放在桌面上的yt2mp3文件载慈。bat位于目錄C:\media惭等,其中保存從YouTube下載的視頻轉(zhuǎn)換成MP3格式。yt2mp3办铡。bat文件包含下一行:

    成功轉(zhuǎn)換后辞做,ffplay開始播放創(chuàng)建的MP3文件。

音頻發(fā)生器

ToneGenerator.bat 是生成指定音調(diào)和持續(xù)時間音調(diào)的批處理文件寡具。為了區(qū)分同一音高的兩個音調(diào)秤茅,每個音都加入了silence.mp3,,持續(xù)時間是0.2秒童叠,如果我們計劃加快速度框喳,它可以是0.3秒或更多秒,命令是:

ffmpeg -f lavfi -i aevalsrc=0 -t 0.2 silence.mp3

文件ToneGenerator.bat有以下內(nèi)容(添加行號以方便解釋厦坛,并沒有出現(xiàn)在ToneGenerator中)五垮。蝙蝠計算機(jī)文件):

1    @echo off
2    set /p n=Please enter the note name:
3    set /p f=Please enter the frequency:
4    set /p d=Please enter the duration in seconds:
5    ffmpeg -f lavfi -i aevalsrc=sin(%f%*2*PI*t) -t %d% tone%n%_%d%.mp3
6    copy /b tone%n%%d%.mp3+silence.mp3 tone%n%_%d%.mp3

對特定命令行的解釋(如果音調(diào)單獨使用,可以跳過加入slience這個步驟):

  • 1:在批處理文件處理過程中杜秸,命令echo off停止顯示命令的內(nèi)容拼余,@符號也不包含此命令的顯示。
  • 2: 命令: set /p variable_name=text創(chuàng)建一個變量亩歹,在作業(yè)處理期間匙监,顯示一行文本并等待輸入鍵的輸入結(jié)束。這個字符串"Please enter the note name: "顯示并在按下Enter之后小作,將創(chuàng)建一個新的變量n并包含所輸入的值亭姥。
  • 3: 與第2行類似,創(chuàng)建的是帶有輸入頻率的變量f顾稀。
  • 4:類似于第2行达罗,創(chuàng)建的變量d包含在秒內(nèi)的音調(diào)的持續(xù)時間。
  • 5: ffmpeg使用lavfi (libavfilter虛擬輸入設(shè)備)和aevalsrc音頻輸入設(shè)備,通過變量d設(shè)定的持續(xù)時間來生成由變量f指定的頻率的聲音粮揉。MP3格式的輸出文件的名稱與注釋名稱和持續(xù)時間相結(jié)合巡李。
  • 6: 在生成的文件中添加了一個帶有0.2秒長度的短MP3文件,用于通過/b選項的復(fù)制命令來區(qū)分音調(diào)扶认,它指定了二進(jìn)制模式侨拦。最終文件的名稱為“tone+ notename +_duration+”.mp3“,以A4音為例辐宾,有1秒的時間狱从,它是noteA4_1.mp3。

創(chuàng)建Jingle Bells(歌曲名)

Jingle Bells 是一款非常流行的冬季戀歌叠纹,它的副歌只有5個音符季研,雖然有些持續(xù)的時間很長,這張圖片顯示了這段文字的順序:

現(xiàn)在我們生成9種不同的音調(diào)與前一節(jié)中的ToneGenerator.bat不同:

  • E4誉察,頻率329.63 Hz与涡,持續(xù)時間1秒-文件E_1.mp3。

  • E4持偏,頻率329.63 Hz递沪,持續(xù)時間2秒-文件E_2.mp3。

  • E4综液,頻率329.63 Hz款慨,持續(xù)時間4秒-文件E_4.mp3。

  • G4谬莹,頻率392.00 Hz檩奠,持續(xù)時間1秒-文件G_1.mp3。

  • G4附帽,頻率392.00 Hz埠戳,持續(xù)時間2秒-文件G_2.mp3。

  • C4蕉扮,頻率261.63 Hz整胃,持續(xù)時間1秒-文件C_1.mp3。

  • D4喳钟,頻率293.66 Hz屁使,持續(xù)時間1秒-文件D_1.mp3。

  • D4奔则,頻率293.66 Hz蛮寂,持續(xù)時間2秒-文件D_2.mp3。

  • F4易茬,頻率349.23 Hz酬蹋,持續(xù)時間1秒-文件F_1.mp3。
    從文件名中跳過了octave 4。第一行和第二行的音調(diào)可以與接下來的兩個命令連接在一起范抓,第三個命令連接這兩行:

    copy /b E_1.mp3+E_1.mp3+E_2.mp3+E_1.mp3+E_1.mp3+E_2.mp3+E_1.mp3+^ G_1.mp3D+C_1.mp3+D_1.mp3+E_4.mp3 line1.mp3
    
    copy /b F_1.mp3+F_1.mp3+F_1.mp3+F_1.mp3+F_1.mp3+E_1.mp3+E_2.mp3+^ E_1.mp3D+D_1.mp3+D_1.mp3+E_1.mp3+D_2.mp3+G_2.mp3 line2.mp3
    
    copy /b line1.mp3+line2.mp3 refrain.mp3
    

另一種方法是修改ToneGenerator.bat文件用來生成編號的文件名骄恶,然后立即加入一個批處理文件。下面是修正版的ToneGenerator.bat文件匕垫,我們可以用它來生成24個MP3文件僧鲁,文件名是tone01。mp3,tone02年缎。mp3,…tone24.mp3:

@echo off
echo If the number of notes is over 9, start numbering with 0.
set /p n=Please enter the note number:
set /p f=Please enter the frequency:
set /p d=Please enter the duration in seconds:
ffmpeg -f lavfi -i aevalsrc=sin(%f%*2*PI*t) -t %d% %n%.mp3
copy /b %n%.mp3+silence.mp3 tone%n%.mp3

現(xiàn)在我們可以通過FileJoiner連接所有的24個MP3文件悔捶。bat批文件與內(nèi)容:

@echo off
copy /y nul output >nul
set /p t=Please enter the file type:
for %%f in (*.%t%) do copy /b output+%%f output
ren output output.%t%
  • 第2行創(chuàng)建一個空文件铃慷,作為初始文件单芜,從目錄復(fù)制第一個文件。
  • 第3行請求文件擴(kuò)展名并將其存儲在t變量中犁柜,將加入這個擴(kuò)展的文件洲鸠。
  • 第4行使用for循環(huán)將文件按順序復(fù)制到文件輸出。
  • 第5行增加了文件輸出的擴(kuò)展名馋缅。

兩種方法產(chǎn)生的折射率都比原曲慢扒腕,atempo濾波器可以用來調(diào)節(jié)速度:

ffmpeg -i output.mp3 -af atempo=2 refrain.mp3

atempo過濾器可以應(yīng)用更多的時間,細(xì)節(jié)在章節(jié)的時間操作中萤悴。

簡化轉(zhuǎn)換

為Codecs編寫的章節(jié)介紹了如何使用預(yù)設(shè)置文件簡化轉(zhuǎn)換瘾腰。如果您經(jīng)常使用各種預(yù)置轉(zhuǎn)換媒體,那么要求特定預(yù)置的批處理文件可能有用覆履,一個名為Conversion.bat的簡單批處理文件示例如下



請參閱前面的章節(jié)來描述第1 - 7行

  • 第8行使用IF構(gòu)造來選擇帶有或沒有預(yù)設(shè)置文件的轉(zhuǎn)換蹋盆,如果變量p為0,則在標(biāo)簽NOPRESET由于GOTO命令指示后繼續(xù)處理硝全。
  • 如果指定了預(yù)置文件栖雾,第9行將轉(zhuǎn)換輸入。
  • 第10行終止處理伟众,因此跳過第12行中的轉(zhuǎn)換析藕。
  • 第12行使用可選的附加參數(shù)將輸入轉(zhuǎn)換為沒有預(yù)設(shè)置的文件。

文件轉(zhuǎn)換凳厢。bat可以在許多方面進(jìn)行修改账胧,例如,包括過濾先紫、更多的輸入等等找爱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泡孩,隨后出現(xiàn)的幾起案子车摄,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吮播,死亡現(xiàn)場離奇詭異变屁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)意狠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進(jìn)店門粟关,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人环戈,你說我怎么就攤上這事闷板。” “怎么了院塞?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵遮晚,是天一觀的道長。 經(jīng)常有香客問我拦止,道長县遣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任汹族,我火速辦了婚禮萧求,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顶瞒。我一直安慰自己夸政,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布榴徐。 她就那樣靜靜地躺著守问,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箕速。 梳的紋絲不亂的頭發(fā)上酪碘,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機(jī)與錄音盐茎,去河邊找鬼兴垦。 笑死,一個胖子當(dāng)著我的面吹牛字柠,可吹牛的內(nèi)容都是我干的探越。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼窑业,長吁一口氣:“原來是場噩夢啊……” “哼钦幔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起常柄,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤鲤氢,失蹤者是張志新(化名)和其女友劉穎搀擂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卷玉,經(jīng)...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡哨颂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了相种。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片威恼。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寝并,靈堂內(nèi)的尸體忽然破棺而出箫措,到底是詐尸還是另有隱情,我是刑警寧澤衬潦,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布斤蔓,位于F島的核電站,受9級特大地震影響别渔,放射性物質(zhì)發(fā)生泄漏附迷。R本人自食惡果不足惜惧互,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一哎媚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喊儡,春花似錦拨与、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匆赃,卻和暖如春淤毛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背算柳。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工低淡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留论熙,地道東北人蒂教。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓蛮拔,卻偏偏與公主長得像萧诫,于是被迫代替她去往敵國和親次泽。 傳聞我的和親對象是個殘疾皇子嗜闻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內(nèi)容