FFmpeg工具使用及參數說明
來自專欄 DaveBobo的多媒體編程
FFmpeg中常用的工具主要是ffmpeg、ffprobe、ffplay,它們分別用作多媒體的編解碼工具、內容分析工具和播放器。
1 ffmpeg常用命令
在很多場景下轉碼使用的是ffmpeg,通過ffmpeg --help可以看到ffmpeg常見命令大概分為6個部分,具體包括:
- ffmpeg信息查詢部分
- 公共操作參數部分
- 文件主要操作參數部分
- 視頻操作參數部分
- 音頻操作參數部分
- 字幕操作參數部分
(1)ffmpeg的封裝轉換
ffmpeg的封裝轉換功能包含在AVFormat模塊中,通過libavformat庫進行Mux和Demux操作。通過查看ffmpeg --help full信息,找到AVFormatContext參數部分,該參數下的所有參數均為封裝轉換可使用的參數。ffmpeg AVFormatContext的主要參數及說明。
這些都是通用的封裝、解封裝操作時使用的參數,上述參數可以與對應的命令行參數搭配使用。
(2)ffmpeg的轉碼參數
ffmpeg編解碼部分的功能主要是通過模塊AVCodec來完成的,通過libavcodec庫進行Encode與Decode操作。AVcodecContext參數列表信息。
通過命令ffmpeg --help full可以看到AVCodecContext參數列表信息。
舉例:使用ffmpeg命令進行轉碼操作
ffmpeg -i input1.rmvb -vcodec mpeg4 -b:v 200k -r 15 -an output.mp4
輸出信息:
ffmpeg version 3.2 Copyright (c) 2000-2016 the FFmpeg developers built with gcc 7.2.0 (GCC) configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp--enable-libvidstab --enable-libvorbis --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx libavutil 55. 34.100 / 55. 34.100 libavcodec 57. 64.100 / 57. 64.100 libavformat 57. 56.100 / 57. 56.100 libavdevice 57. 1.100 / 57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 / 54. 1.100[rm @ 00000000005e6c40] Invalid stream index 2 for index at pos 1925687Input #0, rm, from input1.rmvb: Metadata: title : 音樂之聲 author : 5156edu.com收集整理 copyright : comment : ASMRuleBook : #($Bandwidth >= 0),Stream0Bandwidth = 12403, Stream1Bandwidth = 87597; Audiences : Easy RealMedia Tools Audience; audioMode : music Creation Date : 9/4/2007 1:00:35 Description : This File is Created by Easy RealMedia Tools@! Email : rick@redcheek.net Generated By : Easy RealMedia Tools V1.8x HomeWeb : http://redcheek.net Keywords : Modification Date: 9/4/2007 1:00:35 videoMode : normal Duration: 00:02:18.95, start: 0.000000, bitrate: 110 kb/s Stream #0:0: Audio: cook (cook / 0x6B6F6F63), 11025 Hz, stereo, fltp, 12 kb/s Stream #0:1: Video: rv40 (RV40 / 0x30345652), yuv420p, 576x324, 87 kb/s, 30fps, 30 tbr, 1k tbn, 1k tbcOutput #0, mp4, to output.mp4: Metadata: title : 音樂之聲 author : 5156edu.com收集整理 copyright : comment : ASMRuleBook : #($Bandwidth >= 0),Stream0Bandwidth = 12403, Stream1Bandwidth = 87597; Audiences : Easy RealMedia Tools Audience; audioMode : music Creation Date : 9/4/2007 1:00:35 Description : This File is Created by Easy RealMedia Tools@! Email : rick@redcheek.net Generated By : Easy RealMedia Tools V1.8x HomeWeb : http://redcheek.net Keywords : Modification Date: 9/4/2007 1:00:35 videoMode : normal encoder : Lavf57.56.100 Stream #0:0: Video: mpeg4 ( [0][0][0] / 0x0020), yuv420p, 576x324, q=2-31, 200 kb/s, 15 fps, 15360 tbn, 15 tbc Metadata: encoder : Lavc57.64.100 mpeg4 Side data: cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1Stream mapping: Stream #0:1 -> #0:0 (rv40 (native) -> mpeg4 (native))Press [q] to stop, [?] for helpframe= 215 fps=0.0 q=6.5 size= 516kB time=00:00:14.26 bitrate= 296.3kbits/sframe= 437 fps=435 q=6.0 size= 912kB time=00:00:29.06 bitrate= 257.0kbits/sframe= 656 fps=436 q=10.4 size= 1310kB time=00:00:43.66 bitrate= 245.8kbits/frame= 898 fps=448 q=12.8 size= 1769kB time=00:00:59.80 bitrate= 242.3kbits/frame= 1151 fps=459 q=15.5 size= 2185kB time=00:01:16.66 bitrate= 233.5kbits/frame= 1410 fps=469 q=10.1 size= 2554kB time=00:01:33.93 bitrate= 222.7kbits/frame= 1659 fps=473 q=4.6 size= 2923kB time=00:01:50.53 bitrate= 216.7kbits/sframe= 1918 fps=479 q=4.5 size= 3326kB time=00:02:07.80 bitrate= 213.2kbits/sframe= 2040 fps=480 q=5.4 Lsize= 3514kB time=00:02:15.93 bitrate= 211.8kbits/s dup=11 drop=1181 speed= 32xvideo:3504kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxingoverhead: 0.274420%
從輸出信息中可以看到,參數發生了參數發生了改變,具體如下:
- 轉封裝格式從RMVB格式轉換為MP4格式
- 視頻編碼從rv40 轉換為mpeg4 格式
- 視頻碼率從原來的87 kb/s轉換為200 kb/s
- 視頻幀率從原來的30fps轉換為15fps
- 轉碼後的文件中不包括音頻(-an參數)
2 ffprobe常用命令
ffprobe多媒體信息查看工具主要用來查看多媒體文件的信息。ffprobe常用的參數比較多,可以通過ffprobe --help來查看詳細的幫助信息。
列舉幾個例子。
(1)查看多媒體數據包信息,多媒體數據包信息使用PACKET標籤括起來。
ffprobe -show_packets input.flv
(2)查看包中的具體數據
ffprobe -show_data -show_packets input.flv
(3)查看多媒體封裝格式,使用FORMAT標籤括起來
ffprobe -show_format output.mp4
(4)查看視頻文件中的幀信息,使用FRAME標籤括起來
ffprobe -show_frames input.flv
(5)查看多媒體文件中的流信息,使用STREAM標籤括起來
ffprobe -show_streams input.flv
如果要進行格式化的顯示,需要用到ffprobe -print_format或者ffprobe -of參數來進行相應的格式輸出,支持多種格式輸出,包括XML、INI、JSON、CSV、FLAT等。
3 ffplay常用命令
FFmpeg中通常使用ffplay作為播放器,其可以通過ffplay --help進行查看幫助信息。
舉例:
從視頻的第30秒開始播放,播放10秒鐘的文件
ffplay -ss 30 -t 10 input.mp4
如果希望視頻播放時播放器的窗口顯示標題為自定義標題
ffplay -window_title "Hello World.This is a sample" output.mp4
使用ffmpeg打開網路直播流
ffplay -window_title "播放測試" rtmp://up.v.test.com/live/stream
另外,ffplay還有一些高級參數以及數據可視化分析應用。
參考文獻:
[1] 劉歧,趙文傑.FFmpeg從入門到精通[M].北京:機械工業出版社,2018:30-60.
推薦閱讀:
※FFmpeg精確時間截取視頻文件
※macOS 下使用 FFmpeg 推流在 B 站直播
※nodejs 生成視頻縮略圖
※FFmpeg截取視頻幀
※使用FFmpeg在B站直播的姿勢