5月29日 00:24

FFmpeg的核心组件包括哪些?分别有什么作用?

FFmpeg的核心组件分为库和命令行工具两大类。库层面:libavcodec负责音视频编解码(H.264/H.265/AAC等),libavformat处理容器封装与解封装(MP4/MKV/FLV),libavfilter实现滤镜链(缩放/旋转/叠加),libswscale做像素格式转换(YUV↔RGB),libswresample处理音频重采样与通道转换,libavutil提供通用数据结构(AVPacket/AVFrame)和工具函数,libavdevice抽象硬件设备交互。工具层面:ffmpeg是转码命令行入口,ffprobe探测媒体流信息,ffplay轻量播放器。转码流水线为:demux(libavformat)→ decode(libavcodec)→ filter(libavfilter)→ encode(libavcodec)→ mux(libavformat)。

追问

  • libavcodec和libavformat的职责边界在哪?为什么要把编解码和容器处理拆成两个库?
  • 转码时用-c copy跳过了流水线中哪些环节?为什么能实现无损且秒级完成?
  • libswscale和libavfilter的scale滤镜功能重叠,实际项目中该用哪个?
  • ffprobe如何快速获取视频时长和码率?底层调用了libavformat的哪个接口?
  • 硬件加速编解码(NVENC/QSV)在组件架构中如何接入?是否绕过了libavcodec?

写段代码

bash
# 查看视频流信息 ffprobe -v quiet -print_format json -show_streams input.mp4 # H.264转H.265,音频直接拷贝 ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a copy output.mp4
标签:FFmpeg