ffmpeg开发知识点回顾

视频花屏/卡顿原因

  • 如果GOP分组中的P帧丢失会造成解码端的图像发生错误
  • 为了避免花屏问题的发生,一般如果发现P帧或者I帧丢失,就不显示本GOP内的所有帧,直到下一个I帧来后,重新刷新图像。

时间基

  • tbr: 帧率
  • tbn:time base of stream
  • tbc:time base of codec

时间戳

  • PTS: Presentation timestamp
  • DTS: Decoding timestamp
  • I(intra)/B(bidirectional)/P(predicted)帧

时间戳顺序

  • 实际帧顺序:I B B P
  • 存放帧顺序:I P B B
  • 解码时间戳:1 4 2 3
  • 展示时间戳:1 2 3 4

从哪儿获得PTS

  • AVPacket中的PTS
  • AVFrame中的PTS
  • av_frame_get_baset_effort_timstamp()

计算当前帧的PTS

  • PTS=PTS * av_q2d(video_stream->time_base)
  • av_q2d(AVRotional a){ return a.num/(double)a.den }

计算下一帧的PTS

  • video_clock: 预测的下一帧视频的PTS
  • frame_delay: 1/tbr
  • audio_clock: 音频当前播放的时间戳

多媒体格式转换

ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

  • -i:输入文件
  • vcodec copy:视频编码处理方式
  • acodec copy:音频编码处理方式

该条命令的作用是将视频文件out.mp4格式转换为out.flv,音频编码方式保持不变,视频编码方式保持不变。

录音命令

ffmpeg -f avfoundation -i :0 out.wav
:0 代表音频设备
该条命令表示使用AVfoundation框架录制一段音频数据,数据来源是麦克风,输出文件是out.wav,录制完成之后,使用ffplay out.wav命令进行播放。

录屏命令

ffmpeg -f avfoundation -i 1 r 30 out.yuv

  • -f: 指定使用AVfoundation采集数据
  • -i: 指定从哪儿采集数据,它是一个文件索引号
  • -r:指定帧率

该条命令表示使用AVfoundation框架,以30帧每秒的帧率录制屏幕,输出文件是out.yuv。使用ffplay可以进行播放,但是播放的时候需要制定屏幕尺寸和录制的数据格式,否则播放不出来。

ffmpeg滤镜命令

ffmpeg -i in.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4

crop格式: crop=out_w:out_h:x:y

该命令表示对输入的in.mov文件进行宽和高的裁剪,以原始视频为中心进行宽和高分别减去200的裁剪,同时视频的编码格式使用libx264,音频的编码格式保持不变。

文件的删除与重命名

  • avpriv_io_delete()
  • avpriv_io_move()

码流基本概念

  • SODB(String Of Data Bits),原始数据比特流,长度不一定是8的倍数,它是由VCL层产生
  • RBSP(Raw Byte Sequence Payload,SODB + trailing bits),算法是在SODB最后一位补1,不安字节对齐则补零。

SPS & PPS

  • SPS(Sequence Paramter Set),序列参数集,存放帧数,参考帧数目,解码图像尺寸,帧场编码模式选择标识等。
  • PPS(Picture Paramter Set)图像参数集,存放熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。

H264压缩技术

  • 帧内预测压缩,解决的是空域数据冗余问题
  • 帧间预测压缩,解决的是时域数据冗余问题
  • 整数离散余弦变换(DCT),将空间上的相关性变成频域上无关的数据然后进行量化。
  • CABAC压缩。

直播推流/拉流

  • 直播推流

ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName

  • 直播拉流

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

    原文作者:蓝光95
    原文地址: https://segmentfault.com/a/1190000019662684
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞