学习原因

最近在做 2D 视频转 3D 项目,发现自己需要视频拆解图像和把图像组装视频的工具,遂接触了 FFMPEG

学习资料

视频相关概念

  • 容器:就是视频文件
  • 数据帧(Frame): 压缩前的数据(画面)
  • 数据包(Packet): 压缩后的数据(流),可以理解成 01 串
  • Codec: encode + decode 编解码器,是 Frame 和 Packet 互转的工具
  • 复用(Mux): 将流合成视频文件
  • 解复用(Demux): 视频文件分解为流
  • 帧率: 视频文件中一秒的帧数
  • 码率: 又名比特率(Bitrate),指一秒钟处理的数据量大小(为多少比特)

个人的理解,视频文件就像一个文件夹,文件夹里面有三个压缩包,分别对应视频流,音频流和字幕流
三个压缩包各自有各自的压缩协议,比如有 zip,rar,7z 等,这些协议对应 Codec,每种格式的压缩包,只能用对应的解压算法,才能解压成功
视频流解压出来就是帧图像,我们才能在播放器看到
反过来讲,视频的压制,就是一帧帧图像选择一个压缩器比如 h264 压缩成压缩包,再把同样的音频压缩包一起放到一个容器里

视频处理流程

视频A -> 解复用 -> 视频流A
视频流A -> Codec解码 -> 图像帧A

图像帧A -> 图像处理(Filter) -> 图像帧B

视频流B <- 图像帧B
视频B <- 复用 <- 视频流B

查询命令(重要)

这是一个 mannual 手册功能,最有用

  • ffmpeg -h

    • ffmpeg -h -long
    • ffmpeg -h -full
  • ffplay -h
  • ffprobe -h