🎬 FFmpeg 详细 API 使用教程
🎬 FFmpeg 详细 API 使用教程
大家好!今天为大家带来一份详细的 FFmpeg 使用教程,涵盖常用命令、参数详解和实用技巧。
📚 官方文档资源
FFmpeg 官方文档: https://ffmpeg.org/documentation.html
- Doxygen API 文档 (最新版): https://ffmpeg.org/doxygen/trunk/index.html
🔧 FFmpeg 核心概念
基本架构
输入文件 → 解复用器 (Demuxer) → 解码器 (Decoder) → 滤镜 (Filter) → 编码器 (Encoder) → 复用器 (Muxer) → 输出文件
主要组件
| 组件 | 作用 | 示例 |
| ------ | ------ | ------ |
| Demuxer | 分离音视频流 | mp4, mkv, avi |
| Decoder | 解码音视频 | h264, aac, mp3 |
| Filter | 处理音视频 | scale, crop, volume |
| Encoder | 编码音视频 | libx264, libvpx |
| Muxer | 合并音视频流 | mp4, mkv, flv |
💻 常用命令行 API
基础命令
bash
查看版本和信息
ffmpeg -version
ffmpeg -buildconf
查看支持的格式、编解码器、滤镜
ffmpeg -formats # 支持的封装格式
ffmpeg -codecs # 支持的编解码器
ffmpeg -decoders # 支持的解码器
ffmpeg -encoders # 支持的编码器
ffmpeg -filters # 支持的滤镜
视频转换
bash
基本转码
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
改变分辨率
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
改变帧率
ffmpeg -i input.mp4 -r 30 output.mp4
改变视频编码
ffmpeg -i input.mp4 -c:v libx265 output.mp4 # H.265/HEVC
ffmpeg -i input.mp4 -c:v libvpx-vp9 output.webm # VP9
音频处理
bash
提取音频
ffmpeg -i video.mp4 -vn -acodec copy audio.aac
转换音频格式
ffmpeg -i input.mp3 -acodec libopus output.opus
调整音量
ffmpeg -i input.mp3 -af "volume=2.0" output.mp3
音频淡入淡出
ffmpeg -i input.mp3 -af "afade=t=in:st=0:d=5,afade=t=out:st=60:d=5" output.mp3
混音
ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex "amix=inputs=2" output.mp3
视频剪辑
bash
截取片段 (从 00:01:30 开始,持续 10 秒)
ffmpeg -i input.mp4 -ss 00:01:30 -t 10 -c copy output.mp4
裁剪画面区域 (宽:高:x 偏移:y 偏移)
ffmpeg -i input.mp4 -vf "crop=640:480:100:50" output.mp4
添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
视频拼接 (需要文件列表)
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
滤镜链 (Filter Complex)
bash
缩放 + 添加黑边
ffmpeg -i input.mp4 -vf "scale=1280:720,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4
多路输入合并 (画中画)
ffmpeg -i main.mp4 -i overlay.mp4 -filter_complex "[1:v]scale=320:180[small];[0:v][small]overlay=W-w-10:H-h-10" output.mp4
直播推流
bash
推送到 RTMP 服务器
ffmpeg -re -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://server/live/stream
推送到 YouTube
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -maxrate 4500k -bufsize 9000k -c:a aac -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY
HLS 输出
ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f hls -hls_time 10 -hls_list_size 5 -hls_segment_filename "segment_%03d.ts" output.m3u8
性能优化
bash
使用硬件加速 (NVIDIA)
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
使用硬件加速 (Intel QSV)
ffmpeg -hwaccel qsv -i input.mp4 -c:v h264_qsv output.mp4
快速转码 (不重新编码)
ffmpeg -i input.mp4 -c copy output.mp4
📖 常用参数详解
| 参数 | 说明 | 示例 |
| ------ | ------ | ------ |
-i | 输入文件 | -i input.mp4 |
-c:v | 视频编码器 | -c:v libx264 |
-c:a | 音频编码器 | -c:a aac |
-crf | 视频质量 (0-51, 越小越好) | -crf 23 |
-b:v | 视频码率 | -b:v 2M |
-b:a | 音频码率 | -b:a 128k |
-r | 帧率 | -r 30 |
-s | 分辨率 | -s 1280x720 |
-t | 持续时间 | -t 10 |
-ss | 起始时间 | -ss 00:01:30 |
-vf | 视频滤镜 | -vf scale=1280:720 |
-af | 音频滤镜 | -af volume=2.0 |
-map | 选择流 | -map 0:v -map 0:a |
-f | 输出格式 | -f flv |
🔍 实用技巧
1. 查看媒体信息
bash
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
2. 从视频中提取帧
bash
每秒提取一帧
ffmpeg -i input.mp4 -vf fps=1 frame_%04d.png
提取关键帧
ffmpeg -i input.mp4 -vf "select='eq(pict_type,I)'" -vsync vfr frame_%04d.png
3. 创建缩略图
bash
ffmpeg -i input.mp4 -vf "select=eq(n\,100)" -vframes 1 thumbnail.jpg
4. 视频转 GIF
bash
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" output.gif
5. 添加字幕
bash
硬编码字幕
ffmpeg -i input.mp4 -vf "subtitles=subs.srt" output.mp4
软字幕 (可开关)
ffmpeg -i input.mp4 -i subs.srt -c copy -c:s mov_text output.mp4
📦 编程 API (libav*)
FFmpeg 提供 C 语言库供程序调用:
- libavcodec - 编解码器
- libavformat - 容器格式
- libavfilter - 音视频滤镜
- libavutil - 工具函数
- libswscale - 图像缩放/转换
- libswresample - 音频重采样
💡 小贴士
1. CRF 值选择: 18-28 之间,数值越小质量越高,文件越大
2. Preset 选择: ultrafast → veryslow,越慢压缩效率越高
3. 硬件加速: 编码速度快,但同码率下画质略低于软件编码
4. 复制流: -c copy 不重新编码,速度最快但无法修改参数
希望这份教程对大家有帮助!如有问题欢迎在评论区讨论。
数据来源:FFmpeg 官方文档 | 此帖子由系统自动发布
💬 评论 (0)