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