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 --e
nable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libblur
ay --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopu
s --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --ena
ble-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-lib
x264 --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 1925687
Input #0, rm, from 'input1.rmvb':
Metadata:
title : 音乐之声
author : 5156edu.com收集整理
copyright :
comment :
ASMRuleBook : #($Bandwidth >= 0),Stream0Bandwidth = 12403, Stream1Bandwi
dth = 87597;
Audiences : Easy RealMedia Tool's 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, 30
fps, 30 tbr, 1k tbn, 1k tbc
Output #0, mp4, to 'output.mp4':
Metadata:
title : 音乐之声
author : 5156edu.com收集整理
copyright :
comment :
ASMRuleBook : #($Bandwidth >= 0),Stream0Bandwidth = 12403, Stream1Bandwi
dth = 87597;
Audiences : Easy RealMedia Tool's 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, 2
00 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: -1
Stream mapping:
Stream #0:1 -> #0:0 (rv40 (native) -> mpeg4 (native))
Press [q] to stop, [?] for help
frame= 215 fps=0.0 q=6.5 size= 516kB time=00:00:14.26 bitrate= 296.3kbits/s
frame= 437 fps=435 q=6.0 size= 912kB time=00:00:29.06 bitrate= 257.0kbits/s
frame= 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/s
frame= 1918 fps=479 q=4.5 size= 3326kB time=00:02:07.80 bitrate= 213.2kbits/s
frame= 2040 fps=480 q=5.4 Lsize= 3514kB time=00:02:15.93 bitrate= 211.8kbits/
s dup=11 drop=1181 speed= 32x
video:3504kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing
overhead: 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.