FFMPEG 命令行常用方法示例(包括yuv處理相關命令)

轉載https://blog.csdn.net/soaringlee_fighting/article/details/80571673

1、引言
FFMPEG以其強大的功能而在音視頻領域著稱,更重要的是它還是開源的!音視頻格式轉換、裁剪、拼接、提取字幕或某音軌等等,它都能勝任,可謂一把瑞士軍刀,小巧但功能強大,是音視頻研究的必備利器之一。

2、常用命令示例
1、 轉換成H264碼流

ffmpeg -i input_file -vcodec h264 output_file  
1
其中 -i 表示輸入文件, -vcodec h264 表示視頻編解碼方式爲 H264。

2、 轉換成H265碼流

ffmpeg -i input_file -vcode hevc output_file  
1
其中 -i 表示輸入文件, -vcodec hevc 表示視頻編解碼方式爲 H265,注意ffmpeg 中名稱爲 hevc,不是H265!

3、 設置輸出視頻的分辨率

ffmpeg -i input_file -vcodec h264 -s 1280x720 output_file
1
其中 -s 表示分辨率。

4、設置輸出文件的音視頻比特率

ffmpeg -i input_file  -vcodec h264 -b:v 10M -b:a 128K output_file
1
其中 -b:v 10M 表示視頻碼率爲10Mbps, -b:a 128K 表示音頻碼率爲 128Kbps,注意FFMPEG對於碼率控制,有時候不太準確,跟輸入源有一定關係。

5、 剪切某段視頻

ffmpeg -ss 0:05:00 -t 0:1:30 -i input_file -vcodec copy -acodec copy output_file  
ffmpeg -ss 300 -t 90  -i input_file -vcodec copy -acodec copy output_file 
1
2
上面的兩種方式等價,時間格式支持 HH:MM:SS或者秒數。 -ss 開始時間, -t 持續時間, -vcodec copy 保持原視頻編碼方式, -acodec copy 保持原音頻編碼方式。

注意:-vcodec copy與-c:v以及-codec:v 這三種寫法的功能是一樣的,具體可參考:
https://lists.ffmpeg.org/pipermail/ffmpeg-user/2017-February/035335.html

6、 分離音視頻流保存爲不同文件

ffmpeg -i input_file -vcodec copy -an output_file_video //提取視頻流 
ffmpeg -i input_file -acodec copy -vn output_file_audio //提取音頻流
1
2
其中 -an 表示不處理音頻, -vn 表示不處理視頻。

7.合併多個音視頻文件爲一個文件

ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file 
1
8、提取視頻圖像保存爲圖片文件(將視頻分解爲單幅圖片)

ffmpeg –i input_file –r 1 –f image2 image-%3d.jpeg        //提取圖片
1
其中 -r 表示提取圖像的頻率,-f 表示輸出格式, %3d 表示文件命名方式(也即生成的圖片名爲 image-001.jpeg, image-002.jpeg, …, image-999.jpeg)。

9、 轉換成YUV原始文件

ffmpeg -i input_file -vcodec rawvideo -an output_file_yuv
1
10、YUV序列轉出AVI文件

ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi 
1
11、控制關鍵幀間隔和B幀

ffmpeg –i input_file  –vcodec h264 –bf 0 –g 25 –s 854x480 –an –f m4v output_file
1
其中-bf 控制B幀數目,-g 控制關鍵幀間隔, -f 控制文件格式(format,注意與codec的區別)。

12、 多個視頻文件拼接

首先創建一個需要拼接的文件,例如 concat.txt,內容如下:

file ‘orig_20160616113303_0.avi’
file ‘orig_20160616113303_1.avi’

然後執行如下命令

ffmpeg  -f concat -i concat.txt  -c copy orig_20160616113303_merge.avi 
1
3、YUV處理相關命令(持續更新ing)
1、查看ffmpeg支持哪些yuv格式的轉換

ffmpeg -pix_fmts  
1
2、ffmpeg轉換yuv格式命令

ffmpeg -pix_fmt yuv420p -s 176x144 -i carphone_qcif.yuv -pix_fmt nv12 carphone_qcif_nv12.yuv  
1
3、ffmpeg命令行yuv縮放命令

ffmpeg -s:v 1920x1080 -r 25 -i input.yuv -vf scale=960:540 -c:v rawvideo -pix_fmt yuv420p out.yuv  
1
4、ffmpeg解碼碼流命令

ffmpeg -i 720P.264 -s 1280x720 -pix_fmt yuv422p 720P-out.yuv  
簡化版:ffmpeg -i 720P.264 720P-out.yuv
1
2
5、ffmpeg yuv轉avi

ffmpeg -s wxh -pix_fmt yuv420p -i input.yuv -vcodec mpeg4 output.avi  
ffmpeg -s wxh -pix_fmt yuv420p -i input.yuv -vcodec h264 output.avi  
1
2
6、ffmpeg 裸碼流轉avi

ffmpeg -f h264 -i source.264 -c:v libx264 -an dest.avi
Use -c:v copy instead to copy the source stream without re-encoding
1
2
參考網址:https://stackoverflow.com/questions/33108985/ffmpeg-264-to-avi
7、ffmpeg avi轉裸碼流

 7.1 提取裸碼流

ffmpeg.exe -i BQSquare_416x240_37.avi -f rawvideo -vcodec copy xx.264
1
 7.2 提取若干幀數碼流

ffmpeg.exe -i BQSquare_416x240_37.avi -f rawvideo -vcodec copy -vframes 100 xx.264
1
對於提取特定的幀,需要用特殊的方法:假設提取260幀,幀率是26, 則可用-ss 10.0 其中10.0=260/26
8、YUV裁剪功能
Extract some YUV frames from large yuv File
從第0幀開始截取30幀:

ffmpeg -s widthxheight -i input.yuv -c:v rawvideo -filter:v select="gt(n\, -1)" -vframes 30 out30.yuv
1
或者:

ffmpeg -s widthxheight -i input.yuv -c:v rawvideo -filter:v select="between(n\, 0\, 29)" out30.yuv
1
或者:

ffmpeg -r 1 -ss 0 -i input.yuv -vcodec copy -vframes 30 output.yuv
1
中間截取幀(截取從第30幀到第100幀):

ffmpeg -s widthxheight -i input.yuv -c:v rawvideo -filter:v select="between(n\, 30\, 100)" out.yuv
1
根據時間截取幀(截取從第10秒到第20秒 ):

//Select only frames contained in the 10-20 time interval:
//select=between(t\,10\,20)
ffmpeg -s widthxheight -i input.yuv -c:v rawvideo -filter:v select="between(t\, 10\, 20)" out.yuv
1
2
3
參考自: https://blog.csdn.net/listener51/article/details/82025541

4、FFMPEG常用參數說明
主要參數:
-i 設定輸入流
-f 設定輸出格式
-ss 開始時間
-formats 查看所有支持的容器格式
-codecs 查看所有編解碼器
-filters 查看所有可用的filter
-pix_fmts 查看所有支持的圖片格式
-sample_fmts 查看所有支持的像素格式
-i input_file 查看媒體文件input_file的信息(注意後面不再接其它參數,例如: ffmpeg -i test.mp4,查看 test.mp4視頻信息)

視頻參數:
-b 設定視頻流量,默認爲200Kbit/s
-r 設定幀速率,默認爲25
-s 設定畫面的寬與高
-aspect 設定畫面的比例
-vn 不處理視頻
-vcodec 設定視頻編解碼器,未設定時則使用與輸入流相同的編解碼器

音頻參數:
-ar 設定採樣率
-ac 設定聲音的Channel數
-acodec 設定聲音編解碼器,未設定時則使用與輸入流相同的編解碼器
-an 不處理音頻

5、小結
 ffmpeg功能強大,參數配置衆多,最好的方式查看它的命令行幫助文檔,各個參數都有詳細的說明,唯一的遺憾就是沒有例子,對於初入媒體領域的人來說,門檻比較高。不明白的參數,可以多試試,再接合MediaInfo工具查看具體信息,通過VLC或者FFMPEG自帶的 ffplay播放器播放,就容易理解了。

6、文檔參考
官網翻譯文檔:https://www.bookstack.cn/read/other-doc-cn-ffmpeg/ffmpeg-doc-cn-40.md
官方ffmpeg命令行參考文檔:http://ffmpeg.org/ffmpeg.html

更多ffmpeg命令使用可參考:
http://processors.wiki.ti.com/index.php/Open_Source_Video_Processing_Tools_-_MPlayer,_FFMpeg,_AviSynth,_MKVToolnix,_MP4Box#Downloads
http://ffmpeg.org/ffmpeg-filters.html#aselect_002c-select
https://lists.ffmpeg.org/pipermail/ffmpeg-user/2017-February/035335.html
https://www.bookstack.cn/read/other-doc-cn-ffmpeg/ffmpeg-doc-cn-40.md
https://blog.csdn.net/SoaringLee_fighting/article/details/56015567
https://www.suninf.net/2017/02/ffmpeg-command-usage.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章