深入浅出FFmpeg

166 阅读3分钟

深入浅出FFmpeg

一、FFmpeg是啥?

FFmpeg就像视频处理的瑞士军刀

  • 全能:能处理视频、音频、字幕等各种媒体
  • 跨平台:Windows/macOS/Linux/安卓/iOS全支持
  • 免费开源:不用花钱,随便折腾

二、FFmpeg能干啥?

功能例子常用命令
转码MP4转AVIffmpeg -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真强大,音视频处理全靠它
转码剪辑加特效,命令参数要记牢
安卓集成也不难,库已打包直接拿
遇到问题查文档,各路大神有解答"

掌握FFmpeg,你就能轻松玩转音视频处理! 🎥🔊