數(shù)值求和如何屏蔽掉時(shí)間
2521
2022-05-30
您好,我是碼農(nóng)飛哥,感謝您閱讀本文,歡迎一鍵三連哦。
本文從實(shí)戰(zhàn)的角度出發(fā)詳細(xì)講解FFmpeg命令的使用。
干貨滿滿,建議,需要用到時(shí)??纯?。 小伙伴們?nèi)缬袉栴}及需要,歡迎踴躍留言哦~ ~ ~。
ffmpeg的介紹以及安裝
基本概念說明
ffmpeg命令使用的通用格式
ffmpeg一些常用命令參數(shù)
通用選項(xiàng)
視頻選項(xiàng)
音頻選項(xiàng)
ffmpeg的實(shí)戰(zhàn)
1.webm轉(zhuǎn)mp4的命令
2. 視頻合并命令
3. 視頻剪切
4. 提取音頻
5. 音量調(diào)整
6. 音頻同軌
7. 配音音頻補(bǔ)空白音頻
8. 給視頻添加聲音(視頻和音頻結(jié)合)
9. avi轉(zhuǎn)mp4
總結(jié)
參考
ffmpeg的介紹以及安裝
ffmpeg是一個(gè)非??焖俚囊曨l和音頻轉(zhuǎn)換器,也可以從實(shí)時(shí)音頻/視頻源中抓取。它還可以在任意采樣率之間進(jìn)行轉(zhuǎn)換,并使用高質(zhì)量的多相濾波器動(dòng)態(tài)調(diào)整視頻大小。他能夠兼容Windows,Linux以及mac三種操作系統(tǒng)(說白了就是這三種操作系統(tǒng)都能用)。
ffmpeg的-是:ffmpeg的-
安裝過程沒啥好說的,按照提示一直點(diǎn)下一步就行了。這里需要說明的一點(diǎn)是ffmpeg安裝好之后最好在PATH中配置ffmpeg的環(huán)境變量。配置好之后在命令行中輸入ffmpeg會(huì)出現(xiàn)如下結(jié)果:
基本概念說明
比特率:指的是每秒傳送的比特(bit)數(shù),單位是bps。
幀速率:指的是每秒刷新的圖片的幀數(shù),也可以理解為圖形處理器每秒鐘能夠刷新幾次。單位是fps(Frames per Second)或者"赫茲(Hz)"。
ffmpeg命令使用的通用格式
ffmpeg命令使用的通用格式如下所示:
ffmpeg [ global_options ] {[ input_file_options ] -i 輸入文件地址} ... {[ output_file_options ] 輸出文件地址} ...
ffmpeg :表示調(diào)用ffmpeg程序的命令,如果沒有配置環(huán)境變量的話則需要指定ffmpeg.exe的絕對(duì)路徑,就像下面這樣D:\develop\ffmpeg-4.3.2-2021-02-20-full_build\bin\ffmpeg.exe
global_options:用于指定全局操作參數(shù),比如 -y 參數(shù),可選的參數(shù)。
input_file_options:用于指定輸入文件的操作參數(shù),比如:-f concat 參數(shù)等
-i: 指定輸入文件的地址,必要參數(shù)。
output_file_options: 用于指定輸出文件的操作參數(shù),可選參數(shù)。
ffmpeg一些常用命令參數(shù)
要想熟練的使用ffmpeg命令,就需要掌握ffmpeg的一些常用命令參數(shù)。
通用選項(xiàng)
通用選項(xiàng)就是指對(duì)音頻視頻都使用的命令參數(shù)。
視頻選項(xiàng)
視頻選項(xiàng),指的是只作用于視頻的命令參數(shù)。
音頻選項(xiàng)
音頻選項(xiàng),指的是只作用于音頻的命令參數(shù)。
ffmpeg的實(shí)戰(zhàn)
說完了ffmpeg的命令參數(shù),接著就讓我們來實(shí)戰(zhàn)一下。示例中的所有視頻和音頻都放在了D:\ffmpeg_test目錄下。
1.webm轉(zhuǎn)mp4的命令
webm格式的視頻是所有瀏覽器支持的視頻格式,前端在錄制好視頻之后傳入給后端一個(gè)webm格式的視頻,通常我們需要將webm格式的視頻轉(zhuǎn)成mp4格式的視頻。
ffmpeg -y -i D:\ffmpeg_test\1.webm -r 30 D:\ffmpeg_test\1.mp4
這里就是將1.webm的視頻轉(zhuǎn)成每秒30幀的視頻1.mp4。這里指定1.mp4的絕對(duì)路徑,如果不指定的話則生成的視頻文件會(huì)落到當(dāng)前ffmpeg命令的執(zhí)行目錄下。 運(yùn)行結(jié)果是:
2. 視頻合并命令
當(dāng)上傳的視頻比較大時(shí)或者用戶分段錄制視頻時(shí),前端會(huì)傳入多段視頻給后端,這時(shí)候就需要進(jìn)行視頻的合并操作。使用ffmpeg命令進(jìn)行視頻合并操作分為兩步。
首先新建一個(gè)名為filelist.txt 的文件,在該文件中將需要合并的視頻地址寫入該文件。比如D:\ ffmpeg_test目錄下有 1.mp4和2.mp4需要合并。則寫入的格式如下:
執(zhí)行視頻合并的ffmpeg的命令:
ffmpeg -f concat -safe 0 -y -i D:\ffmpeg_test\filelist.txt -c copy -strict -2 D:\ffmpeg_test\concated.mp4
命令的解釋:這里就是將前面的filelist.txt記錄的1.mp4和2.mp4兩個(gè)視頻合并成一個(gè)名為concated.mp4的視頻。
-f concat:指定該操作是合并操作
-safe 0:用于避免操作輸入流的權(quán)限問題
-c copy:用于指定輸出視頻流和輸入視頻流的編碼格式保持一致
-strict -2: 用于避免opus in MP4 support is experimental這個(gè)問題。
詳細(xì)可以參考使用ffmpeg進(jìn)行視頻合并時(shí)幾個(gè)問題記錄 Operation not permitted
運(yùn)行結(jié)果是:
3. 視頻剪切
原始視頻弄好之后,用戶可能對(duì)視頻不太滿意,需要將不好的視頻片段剪切掉。其操作命令也很簡(jiǎn)單。
這就就是將原始視頻concated.mp4從第15秒開始剪切,剪切成一個(gè)25秒的新視頻clip.mp4。
ffmpeg -ss 15 -t 25 -i D:\ffmpeg_test\concated.mp4 -c:v libx264 -c:a aac -strict experimental D:\ffmpeg_test\clip.mp4
參數(shù)介紹:
-ss 15 :從第15秒開始剪切視頻。
-t 25 :指定剪切后的視頻時(shí)長(zhǎng)為25秒。
-c:v libx264: 指定視頻的編碼格式為libx264格式。
-c:a aac :指定音頻的編碼格式為aac格式。
-strict experimental :安全處理。
運(yùn)行結(jié)果是:
4. 提取音頻
現(xiàn)在用戶滿意的視頻剪切好了,用戶可以進(jìn)入配音環(huán)節(jié)了。在進(jìn)行配音之前我們首先需要將原視頻的音頻從原視頻中分離出來。提取音頻的操作比較簡(jiǎn)單。其命令是:
ffmpeg -y -i D:\ffmpeg_test\concated.mp4 -vn D:\ffmpeg_test\output.wav
這里就是從concated.mp4視頻中提測(cè)其原音頻,原音頻的名字是output.wav。這里 -vn 指定了輸出音頻的編碼格式跟視頻的音頻格式保持一致。運(yùn)行結(jié)果是:
5. 音量調(diào)整
原視頻的音頻分離出來之后,用戶可以一邊播放原音頻,一邊錄制配音了。這時(shí)候用戶可能需要想調(diào)整音頻的音量。調(diào)整音量的操作也很簡(jiǎn)單。
下面就是將音頻的音量調(diào)整為原來的80%。
ffmpeg -y -i D:\\ffmpeg_test\\output.wav -af "volume=0.8" D:\\ffmpeg_test\\output_80.wav 或者 ffmpeg -y -i D:\\ffmpeg_test\\output.wav -vol 80 D:\\ffmpeg_test\\output_80.wav
這里需要注意的是如果是第一種方式的話-af "volume=數(shù)值" volume的數(shù)值必須是除以100之后的值。而-vol 數(shù)值 數(shù)值直接傳入百分比。
運(yùn)行結(jié)果是:
6. 音頻同軌
配音配好之后,我們想著將原音頻和配音音頻合并成一條音頻,這里就需要進(jìn)行音頻同軌了。其命令是:
ffmpeg -y -i D:\\ffmpeg_test\\org_video_sound_input.wav -i D:\\ffmpeg_test\\org_voice_input.wav -filter_complex amix=inputs=2:duration=longest D:\\ffmpeg_test\\org_voice_output.wav
這里就是將音頻org_video_sound_input.wav和org_voice_input.wav音頻合并成一條音頻org_voice_output.wav。其核心的命令參數(shù)是:
-filter_complex amix=inputs=2:duration=longest: 這里使用-filter_complex指定復(fù)雜的過濾器圖,amix=inputs=2:duration=longest采用amix過濾器指定輸入音頻的數(shù)量是2個(gè),時(shí)長(zhǎng)取最長(zhǎng)的那個(gè)音頻的時(shí)長(zhǎng)。運(yùn)行結(jié)果是:
7. 配音音頻補(bǔ)空白音頻
配音配好之后,但是一般情況下配音音頻的時(shí)長(zhǎng)不等于原音頻的時(shí)長(zhǎng)。這時(shí)候就需要將沒有配音的時(shí)長(zhǎng)補(bǔ)空白音頻。補(bǔ)空白音頻的操作稍微有點(diǎn)復(fù)雜。其操作思路分為三步。
生成一個(gè)跟原音頻時(shí)長(zhǎng)一樣的空白音頻,其命令是:
這里假設(shè)原音頻的時(shí)長(zhǎng)是20秒,所以就生成一個(gè)時(shí)長(zhǎng)為20秒的空白音頻。
ffmpeg -y -f lavfi -i anullsrc -t 20 D:\\ffmpeg_test\\silence.wav
將配音音頻開頭部分補(bǔ)空白音頻(比如用戶是從原音頻的第2秒處還是配音,那么配音音頻的前2秒就需要補(bǔ)空白音頻),其命令是:
ffmpeg -y -i D:\\ffmpeg_test\\silence.wav -i D:\\ffmpeg_test\\org_voice_input.wav -filter_complex "aevalsrc=0:d=2 [s1];[s1][1:a]concat=n=2:v=0:a=1[aout]" -c:v copy -map [aout] D:\\ffmpeg_test\\org_voice_output_silence.wav
其中:D:\ffmpeg_test\silence.wav 是第一步生成的空白音頻,D:\ffmpeg_test\org_voice_input.wav 是用戶配音的音頻。
d=2 :用于指定是補(bǔ)空白的點(diǎn),就將0秒到2秒這段時(shí)長(zhǎng)補(bǔ)空白。
-c:v copy:音頻的編碼格式不變。
4. 將補(bǔ)完空白音頻的配音音頻跟第一步生成的空白音頻同軌就得到了一個(gè)和原音頻時(shí)長(zhǎng)一樣的配音音頻。其命令是同第前面的第6節(jié),在此就不在贅述了。
ffmpeg -y -i D:\\ffmpeg_test\\org_voice_output_silence.wav -i D:\\ffmpeg_test\\silence.wav -filter_complex amix=inputs=2:duration=longest D:\\ffmpeg_test\\org_voice_output_result.wav
運(yùn)行結(jié)果是:
8. 給視頻添加聲音(視頻和音頻結(jié)合)
視頻和音頻的結(jié)合,就是將前面生成的帶配音的音頻和原視頻結(jié)合。其命令是:
ffmpeg -y -i D:\\ffmpeg_test\\user_video.avi -i D:\\ffmpeg_test\\org_voice_output_result.wav -c:v copy -c:a aac -strict experimental D:\\ffmpeg_test\\user_video_target.avi
輸入視頻是:user_video.mp4,輸入音頻是:org_voice_output_result.wav。輸出視頻是:org_voice_output_result.avi
-c:v copy: 指定輸出視頻的格式和輸入視頻的格式保持一致。
-c:a aac : 指定輸出視頻的音頻編碼格式是aac格式。
運(yùn)行結(jié)果是:
9. avi轉(zhuǎn)mp4
有點(diǎn)遺憾的是生成的avi格式的視頻不能在瀏覽器上直接播放。所以,我們需要將avi格式的視頻轉(zhuǎn)成mp4格式的視頻。其轉(zhuǎn)換命令是:
ffmpeg -y -i D:\\ffmpeg_test\\user_video_target.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2 D:\\ffmpeg_test\\user_video_target.mp4
這里輸入視頻是:user_video_target.avi,輸出視頻是:user_video_target.mp4。
-c:v libx264 :指定視頻的編碼格式是libx264格式。
-c:a aac :指定音頻的編碼格式是aac格式。
-b:a 192k :指定輸出視頻的比特率是192kbits。
運(yùn)行結(jié)果是:
總結(jié)
本文從實(shí)戰(zhàn)的角度出發(fā)詳細(xì)介紹了ffmpeg的使用。相信對(duì)讀者朋友們一定大有幫助。
參考
ffmpeg 常用命令總結(jié):(avi轉(zhuǎn)MP4、MP4轉(zhuǎn)ts、視頻壓縮、去除視頻聲音、合并音頻和視頻)
ffmpeg的官方文檔
我是碼農(nóng)飛哥,再次感謝您讀完本文。
視頻
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。