前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FFmpeg使用手册 - FFmpeg 的常用命令

FFmpeg使用手册 - FFmpeg 的常用命令

作者头像
用户3765803
发布2019-03-05 09:37:25
3.9K0
发布2019-03-05 09:37:25
举报
文章被收录于专栏:悟空被FFmpeg玩悟空被FFmpeg玩

ffmpeg在做音视频编解码时非常方便,所以很多场景下转码使用的是ffmpeg,铜鼓通过ffmpeg –help命令操作可以看到ffmpeg常见的命令大概分为六部分: 1. ffmpeg信息查询部分 2. 公共做操参数部分 3. 文件主要操作参数部分 4. 视频操作参数部分 5. 音频操作参数部分 6. 字幕操作参数部分 ffmpeg信息查询部分主要参数:

其中通过ffmpeg --help查看到的help信息是基础的信息,如果想获得高级参数部分,可以通过使用ffmpeg --help long参数来查看,如果希望获得全部的帮助信息,可以同过使用ffmpeg --help full参数来获得。 通过-L参数,可以看到ffmpeg目前所支持的license协议,通过-version查看ffmpeg的版本,这里所查看的版本,是详细的版本,包含libavformat、libavcodec、libavutil、libavfilter、libswscale、libswresample的版本,如图:

有时候使用ffmpeg转码,发现无法解析视频文件,或者无法生成视频文件,报一些不支持生成对应的视频文件的错误,这个时候就需要查看当前使用的ffmpeg是否支对应的视频文件格式,需要使用ffmpeg -formats来查看:

bbs.chinaffmpeg.com的孙悟空提示,这个列表比较长,还有一些信息,可以自己执行命令查看 根据上图可以看到,在输出的内容中,分为三部分: 第一列是多媒体文件格式的Demuxing支持与Muxing支持; 第二列是多媒体文件格式; 第三列是文件格式的详细说明。 下面详细介绍ffmpeg的封装转换。 4.1 ffmpeg 的封装转换 FFmpeg的封装转换部分,主要是通过libavformat这部分来完成的功能,通过libavformat库进行mux和demux操作,多媒体文件的格式有很多种,但是还是有好多demux与mux的操作参数是公用的,下面来详细介绍一下这些公用的参数: 通过查看ffmpeg的help full参数,找到AVFormatContext参数部分,在这个参数下面的所有的参数均为封装转换可使用的参数: avioflags: format的缓冲设置,默认为0,就是有缓冲: direct: 无缓冲状态; probesize: 获得文件内容的大小; formatprobesiz: 设置一个获得文件内容的大小来解析文件的format; fflags: 设置读取或者写出的格式的形式的标签,分为多种方式:flush_packets,ignidx,genpts,nofillin,noparse,igndts,discardcorrupt,sortdts,keepside,fastseek,latm,nobuffer,bitexact,下面针对这些format读写方式进行一一详解; flush_packets:  立即将packets数据刷新入文件中; genpts: 输出是产生pts; nofillin: 不填写可以精确计算缺失的值; igndts: 忽略dts; discardcorrupt: 丢弃损坏的帧; sortdts: 尝试以dts的顺序为准输出; keepside: 不合并数据; fastseek: 快速seek,但是不够精确; latm: 设置RTP MP4_LATM 生效; nobuffer: 直接读取或者写出,不存buffer; bitexact: 不写入随机或者不稳定的数据; seek2any: 支持随意seek,这个seek可以不以keyframe为参考; analyzeduration: 指定解析媒体所需要花销的时间,这里设置的值越高,解析的越准确,如果在直播中为了降低延迟,这个可以设置得低一些 codec_whitelist: 设置可以解析的codec的白名单; format_whitelist: 设置可以解析的format的白名单; 4.2 ffmpeg 的编转码 FFmpeg的编解码部分主要是通过libavcodec这个库来完成的功能,通过libavcodec库进行encode与decode操作,多媒体的编码格式种类很多,但是还是有好多基本的操作参数是共同可以设置的,下面来详细介绍一下这些公用的参数: 通过查看ffmpeg的help full参数可以看到AVCodecContext AVOptions,在这个选项下面的所有参数均为编解码可以使用的参数: b: 设置音频与视频码率,可以认为是音视频加起来的码率,默认为200k; 使用这个参数可以根据b:v设置视频码率,b:a设置音频码率; ab: 设置音频的码率,默认是128k; g: 设置视频GOP大小,关键帧间隔,默认是12帧一个gop ar: 设置音频采样率,默认为0 ac: 设置音频通道数,默认为0 bf: 设置非B帧之间的B帧个数,默认为0 maxrate:最大码率设置,与bufsize一同使用即可,默认为0 minrate: 最小码率设置,配合maxrate与bufsize可以设置为CBR模式,平时基本没用,默认为0 bufsize:设置控制码率的buffer的大小,默认为0 keyint_min: 设置最小IDR帧间隔,默认为25 sc_threshold: 设置场景切换支持,默认为0 me_threshold: 设置运动估计阀值,默认为0 mb_threshold: 设置宏块阀值,默认为0 profile: 设置音视频的profile,默认为-99 level: 设置音视频的level,默认为-99 timecode_frame_start: 设置GOP帧的开始时间,需要在non-drop-frame默认情况下使用 channel_layout: 设置音频通道的布局格式 threads: 设置编解码等工作的线程数 4.3 ffmpeg 的基本编转码原理 ffmpeg工具主要用途为编码、解码、转码,常用ffmpeg做的为转码操作,使用ffmpeg转码主要原理为:

 通过前两节介绍的参数,可以设置转码的相关参数,如果转码操作则涉及到封装的改变,从而可以通过设置AVCodec与AVFormat的操作参数进行封装与编码的改变,下面举一个例子:

从图中可以看到,上图参数中使用了前面介绍过的参数: 1. 转封装格式从rmvb格式转为mp4; 2. 视频编码从rv40转为mpeg4; 3. 视频码率从原来的377 kb/s 转为 200 kb/s; 4. 视频帧率从原来的 23.98 fps转为 15 fps 可以分析出,这个例子的流程与前面提到的流程相同,首先解封装,需要解的封装为rmvb,然后解码,其中视频编码为rv40,音频编码为cook;然后解码后的视频编码为mpeg4,然后封装为一个没有音频的mp4文件。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档