用途:当 Python 需要直接访问 FFmpeg 库时使用 PyAV,覆盖容器、流、数据包、帧、编解码器、滤镜、跳转、字幕以及 NumPy 转换。该技能是精简编排层,完整 API 示例保存在 references/pyav-recipes-and-api.md。
适用场景:帧级视频/音频解码与编码;精确跳转与关键帧提取;无需逐帧调用外部命令即可访问 NumPy/Pillow/OpenCV 帧;容器检查、数据包级重封装、字幕读取;带库级控制的 RTSP/网络流处理。简单转码、需要与生产命令一致或重度硬件加速流水线时,改用 FFmpeg CLI/subprocess。
主要能力与用法:用 av.open(path) 打开媒体,建议使用上下文管理器;用 container.decode(video=0) 解码视频,产出 VideoFrame;用 frame.to_ndarray(format='rgb24') 转 NumPy(OpenCV 需转 BGR);用 av.VideoFrame.from_ndarray(arr, format='rgb24') 从 NumPy 生成帧;用 container.seek(offset) 跳转(通常基于关键帧);编码时先 stream.encode(frame) 再 container.mux(packet),结束时刷新编码器;循环中务必 container.close()。
核心流程:优先从 wheel 安装 av,除非明确需要自定义 FFmpeg 构建;依赖新 FFmpeg 8.x 特性前先检查 PyAV 与 FFmpeg 库兼容性;显式选择流,只解码所需内容;有意识地转换帧像素/采样格式;编码时显式设置编解码器、尺寸、像素格式、帧率和选项并刷新编码器;多线程应用中关闭详细日志,优先使用文件路径而非 Python 文件对象。
限制与注意事项:PyAV 帧可能引用底层缓冲区,容器关闭后保留的 NumPy 数组需调用 .copy();thread_type='AUTO' 可显著提升解码速度但可能增加帧延迟;PyAV 硬件加速相比 CLI FFmpeg 有限;字幕转码支持有限,复杂字幕流程请用 FFmpeg CLI。相关技能:ffmpeg-python-integration-reference、ffmpeg-opencv-integration、ffmpeg-fundamentals-2025。