FFMPEG进阶系列02-ffmpeg命令详解3

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的顺序为准输出;

    • fastseek: 快速seek,但是不够精确;

    • latm: 设置RTP MP4_LATM 生效;

    • nobuffer: 直接读取或者写出,不存buffer;

    • bitexact: 不写入随机或者不稳定的数据;

  • seek2any: 支持随意seek,这个seek可以不以keyframe为参考;

  • analyzeduration: 指定解析媒体所需要花销的时间,这里设置的值越高,解析的越准确,如果在直播中为了降低延迟,这个可以设置得低一些

  • codec_whitelist: 设置可以解析的codec的白名单;

  • format_whitelist: 设置可以解析的format的白名单;

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: 设置编解码等工作的线程数

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

ffmpeg 的基本编转码原理

    ffmpeg工具主要用途为编码、解码、转码,常用ffmpeg做的为转码操作,使用ffmpeg转码主要原理为:

转码原理

    通过前两节介绍的参数,可以设置转码的相关参数,如果转码操作则涉及到封装的改变,从而可以通过设置AVCodec与AVFormat的操作参数进行封装与编码的改变,下面举一个例子:ffmpeg.exe -i test.mp4 -vcodec mpeg4 -b:v 1000k -r 15 -acodec copy output.mp4 编码为mpeg4 视频码流为1000k,帧率为15,音频不变

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isom
    creation_time   : 2015-05-06T01:12:21.000000Z
    encoder         : FormatFactory : www.pcfreetime.com
  Duration: 00:00:11.01, start: 0.000000, bitrate: 2364 kb/s
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 968x544 [SAR 1:1 DAR 121:68], 2252 kb/
s, 25 fps, 25 tbr, 25k tbn, 25 tbc (default)
    Metadata:
      creation_time   : 2015-05-06T01:12:21.000000Z
      handler_name    : video
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      creation_time   : 2015-05-06T01:12:21.000000Z
      handler_name    : sound
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
Output #0, mp4, to 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isom
    encoder         : Lavf58.12.100
    Stream #0:0(und): Video: mpeg4 (mp4v / 0x7634706D), yuv420p, 968x544 [SAR 1:1 DAR 121:68], q=2-31, 1000 kb/s, 15 fps
, 15360 tbn, 15 tbc (default)
    Metadata:
      creation_time   : 2015-05-06T01:12:21.000000Z
      handler_name    : video
      encoder         : Lavc58.18.100 mpeg4
    Side data:
      cpb: bitrate max/min/avg: 0/0/1000000 buffer size: 0 vbv_delay: -1
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      creation_time
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值