目目 录录
1. 文档介绍 ......................................................................................................................... 3
1.1 文档目的 .................................................................................................................... 3
1.2 文档范围 .................................................................................................................... 3
1.3 读者对象 .................................................................................................................... 3
1.4 参考文献 .................................................................................................................... 3
1.5 术语与缩写解释 ......................................................................................................... 3
2. FFMPEG 支持能力说明 ................................................................................................. 4
2.1 FFMPEG 介绍及安装 .................................................................................................... 4
2.1.1 FFmpeg 简介 ........................................................................................................ 4
2.1.2 FFmpeg 安装 ........................................................................................................ 4
2.2 FFMPEG 参数说明 ........................................................................................................ 4
2.2.1 通用选项 .............................................................................................................. 4
2.2.2 视频选项 .............................................................................................................. 5
2.2.3 高级视频选项 ...................................................................................................... 5
2.2.4 音频选项 .............................................................................................................. 6
2.2.5 音频/视频捕获选项 ............................................................................................. 7
2.2.6 高级选项 .............................................................................................................. 7
2.2.7 FFmpeg 参数实例 ................................................................................................. 7
2.3 FFMPEG 支持能力说明 ................................................................................................ 8
2.3.1 FFmpeg 对编码解码器的支持 .............................................................................. 8
2.3.2 FFmpeg 对容器格式的支持 ................................................................................. 8
2.3.3 FFmpeg 对过滤器的支持 ..................................................................................... 8
2.3.4 FFmpeg 对图像颜色空间的支持 .......................................................................... 9
2.4 FFMPEG 功能及使用说明 .......................................................................................... 10
2.4.1 ffplay 对多媒体的支持能力验证 ........................................................................ 10
2.4.2 FFmpeg 格式转换 ............................................................................................... 11
2.4.3 FFmpeg 视频截图 ............................................................................................... 13
2.4.4 FFmpeg 屏幕录制 ............................................................................................... 14
2.4.5 FFmpeg 音视频采集 ........................................................................................... 14
2.5 FFMPEG 应用实例 ...................................................................................................... 14
2.5.1 用FFserver 从文件生成流媒体 ........................................................................ 14
2.5.2 用FFserver 从设备生成实时流 ........................................................................ 15
3.FFMPEG 架构 ................................................................................................................ 16
3.1 FFMPEG 文件结构 ...................................................................................................... 16
3.2 I\O 模块分析 ............................................................................................................. 17
3.2.1 概述 .................................................................................................................... 17
3.2.2 相关数据结构介绍 ............................................................................................. 18
3.3 DEMUXER 和 MUXER 模块分析 .................................................................................. 23
3.3.1 概述 .................................................................................................................... 23
3.3.2 相关数据结构介绍 ............................................................................................. 23
3.4 DECODER/ENCODER 模块 ........................................................................................... 26
3.4.1 概述 .................................................................................................................... 26
3.4.2 相关数据结构的初始化 ..................................................................................... 26
3.5 其他重要数据结构的初始化 .................................................................................... 27
3.5.1 AVStream ............................................................................................................. 27
3.5.2 AVInputStream/ AVOutputStream ......................................................................... 28
3.5.3 AVPacket ............................................................................................................. 28
4.FFMPEG 裁剪说明 ......................................................................................................... 28
4.1 CONFIGURE 参数 ........................................................................................................ 28
4.1.1 通用选项 ............................................................................................................ 28
4.1.2 基本选项介绍 .................................................................................................... 32
4.2 FFMPEG 裁剪优化实例 .............................................................................................. 34
4.3 裁剪优化前后文件比较 ............................................................................................ 35
1. 文档介绍
1.1 文档目的
整理出开源代码 ffmpeg 的资料,方便公司同事后续使用。
1.2 文档范围
较为详细的介绍 ffmpeg 的功能、使用以及二次开发。
1.3 读者对象
希望了解 ffmpeg 知识,从事 USM 及 IPTV 的同事。
1.4 参考文献
1.5 术语与缩写解释
缩略语/术语
ffmpeg
全 称
Fast forword mpeg
音视频转换器
说 明
ffplay
Fast forword play
用 ffmpeg 实现的播放器
ffserver
Fast forword server 用 ffmpeg 实现的 rstp 服务器
ffprobe
Fast forword probe 用来输入分析输入流。
2. FFmpeg 支持能力说明
2.1 FFmpeg 介绍及安装
2.1.1 FFmpeg 简介
FFmpeg 是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用 LGPL 或
GPL 许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方
案。它包含了非常先进的音频/ 视频编解码库 libavcodec,为了保证高可移植性和编解
码质量,libavcodec 里很多 codec 都是从头开发的。
ffmpeg 项目由以下几部分组成:
1.ffmpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文
件.
2.ffserver 基于 HTTP、RTSP 用于实时广播的多媒体服务器.也支持时间平移
3.ffplay 用 SDL 和 FFmpeg 库开发的一个简单的媒体播放器
4.libavcodec 一个包含了所有 FFmpeg 音视频编解码器的库.为了保证最优性能和
高可复用性,大多数编解码器从头开发的.
5.libavformat 一个包含了所有的普通音视格式的解析器和产生器的库
2.1.2 FFmpeg 安装
1.将所有源代码压缩在一个文件夹中,例如/绝对路径/ffmpeg。
2.在终端输入以下指令:
至此,ffmpeg 安装编译通过,可以进行对音视频的操作。
ffplay 的编译需要依赖于 SDL 库,所以要想编译成功 ffplay,必须先安装 SDL 库,
Cd /绝对路径/ffmpeg
./configure (此时,会出现问题。然后重新输入./configure –disable-yasm-)
Make
安装方法:下载最新版本的 SDL 相应版本的 SDL 源码,编译,即可生成 SDL 库。
2.2 FFmpeg 参数说明
2.2.1 通用选项
-L license
-h 帮助
-fromats 显示可用的格式,编解码的,协议的。
-f fmt 强迫采用格式fmt
-i filename 输入文件
-y 覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
-title string 设置标题
-author string 设置作者
-copyright string 设置版权
-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码
以及缓冲区大小)自动设置 ,只需要输入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-comment string 设置评论
-hq 激活高质量设置
-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该
偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset 秒。
[-]hh:mm:ss[.xxx]的格式也支持
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频 缺省25
-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-croptop size 设置顶部切除带大小 像素单位
-cropbottom size –cropleft size –cropright size 底部,左边,右边切除带大小。
-padtop size 设置顶部补齐的大小 像素单位
-padbottom size –padleft size –padright size –padcolor color 设置补齐条大小和颜
色(hex,6 个16 进制的数,红:绿:兰排列,比如 000000 代表黑色)
-vn 不做视频记录
-bt tolerance 设置视频码率容忍度kbit/s
-maxrate bitrate 设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-sameq 使用同样视频质量作为源(VBR)
-pass n 选择处理遍数(1 或者2)。两遍编码非常有用。第一遍生成统计信息,第
二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file
-vcodec codec 强制使用 codec 编解码方式。 如果用 copy 表示原始编解码数据必须
被拷贝。
2.2.2 视频选项
2.2.3 高级视频选项
-g gop_size 设置图像组大小
-intra 仅适用帧内编码
-qscale q 使用固定的视频量化标度(VBR)
-qmin q 最小视频量化标度(VBR)
-qmax q 最大视频量化标度(VBR)
-qdiff q 量化标度间最大偏差 (VBR)
-qblur blur 视频量化标度柔化(VBR)
-qcomp compression 视频量化标度压缩(VBR)
-rc_init_cplx complexity 一遍编码的初始复杂度
2
FF_IDCT_SIMPLE
3
FF_IDCT_SIMPLEMMX
-b_qfactor factor 在 p 和 b 帧间的 qp 因子
-i_qfactor factor 在 p 和 i 帧间的 qp 因子
-b_qoffset offset 在 p 和 b 帧间的 qp 偏差
-i_qoffset offset 在 p 和 i 帧间的 qp 偏差
-rc_eq equation 设置码率控制方程 默认 tex^qComp
-rc_override override 特定间隔下的速率控制重载
-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full
-dct_algo algo 设 置 dct 的 算 法 可 用 的 有 0 FF_DCT_AUTO 缺 省 的 DCT 1
FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5
FF_DCT_ALTIVEC
-idct_algo algo 设 置 idct 算 法 。 可 用 的 有 0 FF_IDCT_AUTO 缺 省 的 IDCT 1
FF_IDCT_INT
4
FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8
FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM
-er n 设 置 错 误 残 留 为 n 1 FF_ER_CAREFULL 缺 省 2 FF_ER_COMPLIANT 3
FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 设 置 错 误 掩 蔽 为 bit_mask , 该 值 为 如 下 值 的 位 掩 码
FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)
-bf frames 使用 frames B 帧,支持 mpeg1,mpeg2,mpeg4
-mbd mode 宏 块 决 策 0 FF_MB_DECISION_SIMPLE 使 用 mb_cmp 1
FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-4mv 使用 4 个运动矢量 仅用于 mpeg4
-part 使用数据划分 仅用于 mpeg4
-bug param 绕过没有被自动监测到编码器的问题
-strict strictness 跟标准的严格性
-aic 使能高级帧内编码 h263+
-umv 使能无限运动矢量 h263+
-deinterlace 不采用交织方法
-interlace 强迫交织法编码 仅对 mpeg2 和 mpeg4 有效。当你的输入是交织的并且你
想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失
更大
-psnr 计算压缩帧的 psnr
-vstats 输出视频编码统计到 vstats_hhmmss.log
-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开
1
2.2.4 音频选项
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道 缺省为 1
-an 不使能音频纪录
-acodec codec 使用 codec 编解码
2.2.5 音频/视频捕获选项
-vd device 设置视频捕获设备。比如/dev/video0
-vc channel 设置视频捕获通道 DV1394 专用
-tvstd standard 设置电视标准 NTSC PAL(SECAM)
-dv1394 设置 DV1394 捕获
-av device 设置音频设备 比如/dev/dsp
2.2.6 高级选项
-map file:stream 设置输入流映射
-debug 打印特定调试信息
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包
-bitexact 仅使用位精确算法 用于编解码测试
-ps size 设置包大小,以 bits 为单位
-re 以本地帧频读数据,主要用于模拟捕获设备
-loop 循环输入流。只工作于图像流,用于 ffserver 测试
2.2.7 FFmpeg 参数实例
./ffmpeg -y -i /rootVideoConverter/123.avi -ab 56 -ar 22050 -b 1500 -r 15 -qscale 10
–s 480x350 /root/VideoConverter/234.flv
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
-y (覆盖输出文件,即如果 1.***文件已经存在的话,不经提示就覆盖掉了)
-i "1.avi"(输入文件是和 ffmpeg 在同一目录下的 1.avi 文件,可以自己加路径,改
名字)
-s (输出的分辨率,注意片源一定要是 16:9 的不然会变形)
-r (帧数,一般就用这个吧)
-b 1500(视频数据流量,用-b xxxx 的指令则使用固定码率,数字随便改,1500 以
上没效果;还可以用动态码率如:-qscale 4 和-qscale 6,4 的质量比 6 高)
-acodec aac(音频编码用 AAC)
-ac 2 (声道数 1 或 2)
-ar 24000(声音的采样频率,好像 PSP 只能支持 24000Hz)
-ab 128 ( 音频数据流量,一般选择 32、64、96、128)
-vol 200(200%的音量,自己改)
-f psp (输出 psp 专用格式)
-muxvb 768(给 PSP 机器识别的码率,一般选择 384、512 和 768)
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ss 指定时间点开始转换任务,(time_off set the start time offset),-ss 后跟的时间单
位为秒 .
-s 320x240 指定分辨率
-r 29.97 桢速率
-bitexact 使用标准比特率
-vcodec xvid 使用 xvid 压缩
2.3 FFmpeg 支持能力说明
2.3.1 FFmpeg 对编码解码器的支持
ffmpeg 支持的编解码器种类共有 280 多种,涵盖了几乎所有常见音视频编码格式,
能解码几乎所有的音视频,每种音视频编解码器的实现都在 libavcodec 目录下有具体的
C 语言实现,具体的支持情况参见附件:
ffmpeg支持的编解
码器
附件:
注:编码器和解码器的名称不是完全匹配的,因此有些编码器没有对应相同名称的解码器,反之,
解码器也一样。即使编码和解码都支持也不一定是完全对应的,例如 h263 解码器对应有 h263p 和 h263
编码器。
2.3.2 FFmpeg 对容器格式的支持
ffmpeg 支持对绝大多数的容器格式的读写操作,共计 190 多种,涵盖了互联网上各
种常见媒体格式及日常生活中及专业应用中的各种媒体格式。详细的支持情况参见附件。
FFmpeg支持的媒体
文件格式
附件:
2.3.3 FFmpeg 对过滤器的支持
Filters
说明
aformat
Convert the input audio to one of the specified formats.
anull
aresample
ashowinfo
Pass the source unchanged to the output.
Resample audio data.
Show textual information for each audio frame.
abuffer
Buffer audio frames, and make them accessible to the filterchain.
anullsrc
Null audio source, never return audio frames.
abuffersink
Buffer audio frames, and make them available to the end of the filter graph.
anullsink
copy
crop
drawbox
fade
fieldorder
Do absolutely nothing with the input audio.
Copy the input video unchanged to the output.
Crop the input video to width:height:x:y.
Draw a colored box on the input video.
Fade in/out input video
Set the field order.
fifo
Buffer input images and send them when they are requested.
format
Convert the input video to one of the specified pixel formats.
gradfun
hflip
Debands video quickly using gradients.
Horizontally flip the input video.