深入浅出FFmpeg
一、FFmpeg是啥?
FFmpeg就像视频处理的瑞士军刀:
- 全能:能处理视频、音频、字幕等各种媒体
- 跨平台:Windows/macOS/Linux/安卓/iOS全支持
- 免费开源:不用花钱,随便折腾
二、FFmpeg能干啥?
| 功能 | 例子 | 常用命令 |
|---|---|---|
| 转码 | MP4转AVI | ffmpeg -i input.mp4 output.avi |
| 剪辑 | 截取10秒视频 | ffmpeg -i input.mp4 -ss 00:00:05 -t 10 output.mp4 |
| 合并 | 拼接多个视频 | ffmpeg -f concat -i filelist.txt -c copy output.mp4 |
| 压缩 | 减小视频体积 | ffmpeg -i input.mp4 -vcodec libx265 -crf 28 output.mp4 |
| 录屏 | 录制桌面 | ffmpeg -f gdigrab -i desktop output.mp4 |
| 直播 | 推流到平台 | ffmpeg -re -i input.mp4 -f flv rtmp://live.twitch.tv/... |
三、核心概念大白话
1. 容器 vs 编码格式
| 类型 | 作用 | 常见例子 |
|---|---|---|
| 容器 | 包装箱(决定文件扩展名) | MP4、MKV、AVI |
| 视频编码 | 视频压缩方式 | H.264、H.265、VP9 |
| 音频编码 | 音频压缩方式 | AAC、MP3、Opus |
2. 基本工作原理
graph LR
A[输入文件] --> B[解封装]
B --> C[解码]
C --> D[处理/过滤]
D --> E[编码]
E --> F[封装]
F --> G[输出文件]
四、FFmpeg常用命令
1. 基础转码
# 最简单的视频转换
ffmpeg -i input.mp4 output.avi
# 指定视频编码器(H.265更省空间)
ffmpeg -i input.mp4 -c:v libx265 output.mp4
2. 视频裁剪
# 从第30秒开始,截取10秒
ffmpeg -i input.mp4 -ss 00:00:30 -t 10 -c copy output.mp4
# 裁剪画面(保留中间400x400区域)
ffmpeg -i input.mp4 -filter:v "crop=400:400:200:100" output.mp4
3. 提取音频
# 从视频提取MP3
ffmpeg -i input.mp4 -vn -c:a libmp3lame output.mp3
# 去除视频中的音频
ffmpeg -i input.mp4 -an output.mp4
4. 调整分辨率
# 缩放为1280x720
ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4
# 保持比例缩放(高度自动计算)
ffmpeg -i input.mp4 -vf scale=640:-1 output.mp4
五、安卓集成FFmpeg
1. 引入库(以android-ffmpeg为例)
dependencies {
implementation 'com.arthenica:mobile-ffmpeg-full:4.4.LTS'
}
2. 执行FFmpeg命令
import com.arthenica.mobileffmpeg.FFmpeg;
// 异步执行
FFmpeg.executeAsync("-i input.mp4 -vf scale=640:-1 output.mp4", (executionId, returnCode) -> {
if (returnCode == RETURN_CODE_SUCCESS) {
Log.d("FFmpeg", "处理成功");
}
});
3. 常用安卓场景
- 视频压缩上传:
String cmd = "-i " + inputPath + " -vcodec libx264 -crf 28 " + outputPath; FFmpeg.execute(cmd); - 提取关键帧:
String cmd = "-i " + videoPath + " -vf select='eq(pict_type,I)' -vsync 2 -f image2 " + outputDir + "/frame_%03d.jpg";
六、避坑指南
1. 常见错误
- 找不到输入文件:检查文件路径是否含空格(需要加引号)
- 编码器不支持:先用
ffmpeg -codecs查看支持的编码 - 安卓权限问题:确保有读写存储权限
2. 性能优化
- 硬件加速:使用
h264_omx等硬件编解码器 - 多线程:添加
-threads 4参数 - 降低分辨率:先缩小再处理
七、高级玩法
1. 添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
2. 视频转GIF
# 高质量转换
ffmpeg -i input.mp4 -vf "fps=15,scale=640:-1:flags=lanczos" -c:v gif output.gif
3. 合并音视频
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4
八、学习资源
- 官方文档:ffmpeg.org/documentati…
- 命令大全:cheatography.com/thetartanki…
- 可视化生成器:evanhahn.github.io/ffmpeg-budd…
九、终极口诀
"FFmpeg真强大,音视频处理全靠它
转码剪辑加特效,命令参数要记牢
安卓集成也不难,库已打包直接拿
遇到问题查文档,各路大神有解答"
掌握FFmpeg,你就能轻松玩转音视频处理! 🎥🔊