寫在前面
如果您對音視頻技術(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)行修改账胧,例如,包括過濾先紫、更多的輸入等等找爱。