
FFmpeg
开源多媒体处理框架
通过 FFmpeg API 编码、解码、转码、流媒体和转换音视频文件。
FFmpeg 是什么?
FFmpeg 是领先的开源多媒体框架,使开发者能够录制、转换和流式传输音视频内容。它包含一套完整的库——如 libavcodec、libavformat、libavutil、libavfilter、libswscale 和 libswresample——提供强大的工具来处理各种多媒体任务。凭借对数百种编解码器和格式的支持,FFmpeg 为无数应用提供动力,从视频编辑软件到流媒体服务器和媒体播放器。
FFmpeg 因其灵活性、性能和活跃的社区支持而被广泛应用于各行业。它能够处理从简单的格式转换到复杂的视频滤镜和实时流媒体的所有任务。无论您是在构建媒体服务器、桌面播放器,还是基于云的转码流水线,FFmpeg 都能提供可靠、高质量的处理能力。其命令行工具如 ffmpeg、ffplay 和 ffprobe 使其易于集成到脚本和自动化工作流中,而其 C API 和绑定(例如 Python)则允许进行深度的编程控制。
开始使用 FFmpeg
要开始使用 FFmpeg,请通过系统的包管理器进行安装(例如,在 Ubuntu 上使用 `apt install ffmpeg`,在 macOS 上使用 `brew install ffmpeg`),或从官方网站下载预编译二进制文件。若要在程序中使用,可通过 `pip install ffmpeg-python` 安装 Python 包装器,或使用官方的 C 库头文件。FFmpeg 也可在 GitHub 上的 [FFmpeg GitHub](https://github.com/FFmpeg/FFmpeg) 获取,您可以从源码构建以实现自定义配置。其轻量级体积和跨平台支持使其非常适合桌面、服务器和嵌入式部署。
通过包管理器安装 FFmpeg
# Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg
# macOS (Homebrew)
brew install ffmpeg
# Python wrapper
pip install ffmpeg-python
在不同格式之间转换媒体
FFmpeg 在在数百种格式和编解码器之间转换媒体文件方面表现出色。您可以将视频从 MP4 转码为 WebM,从视频文件中提取音频,或在不重新编码的情况下更改容器格式(流复制)。其智能默认设置确保高质量,而高级选项让您能够微调比特率、分辨率、帧率和编解码器参数。无论您是为网络流媒体、归档还是在特定设备上播放准备内容,FFmpeg 都提供对输出质量和兼容性的精确控制。命令行界面支持复杂的过滤链,可在转换过程中进行缩放、裁剪和应用效果。
如何使用 FFmpeg 将 MP4 转换为 WebM?
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus output.webm
实时流媒体与直播广播
FFmpeg 支持通过 RTMP、HLS 和 SRT 等协议摄取、转码和流式传输实时媒体。它可以从网络摄像头、麦克风或网络源捕获,并将流推送到 YouTube、Twitch 或自定义 RTMP 服务器等平台。凭借低延迟选项和自适应码率流,FFmpeg 为活动、游戏和监控提供实时广播管道。其处理多输入、叠加图形和实时滤镜的能力,使其成为专业级流媒体设置的理想选择。您还可以对输出进行分段,以实现 DASH/HLS 的自适应播放,适用于移动端和网页客户端。
如何将视频文件流式传输到 YouTube Live?
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -maxrate 3000k -bufsize 6000k -g 50 -c:a aac -b:a 160k -f flv "rtmp://a.rtmp.youtube.com/live2/your_stream_key"
视频过滤与后期处理
FFmpeg 的 libavfilter 框架通过有向无环图(DAG)实现强大的实时视频过滤。您可以裁剪、缩放、旋转、去交错、降噪、叠加水印、添加文字、调整颜色,并应用诸如慢动作或延时摄影等复杂效果——全部无需重新编码整个流。过滤器可以串联以进行多阶段处理,硬件加速(例如 NVENC、VAAPI、VideoToolbox)确保在现代 GPU 上的性能。这使得 FFmpeg 成为视频编辑者、内容创作者以及构建需要视觉增强或格式规范化的媒体处理流水线的开发者的不可或缺的工具。
如何裁剪、缩放并为视频添加水印?
ffmpeg -i input.mp4 -i watermark.png -filter_complex "[0:v]crop=1280:720:0:0[scaled];[scaled][1:v]overlay=10:10" -c:a copy output.mp4
提取和操作元数据与字幕
FFmpeg 提供对媒体文件中嵌入的元数据(标签)和字幕的完整控制。您可以使用简单的命令提取、编辑或删除元数据(例如标题、艺术家、专辑、GPS 数据),或在 SRT、ASS、VTT 等格式之间转换字幕。它支持将字幕烧录到视频中或作为独立轨道嵌入。对于可访问性和本地化工作流,FFmpeg 允许批量处理字幕文件、时间调整以及语言轨道管理。这使其非常适合字幕本地化、媒体资产管理以及符合需要嵌入元数据的广播标准。
如何从视频文件中提取字幕?
ffmpeg -i input.mkv -map 0:s:0 -c:s srt output.srt
