一、FFmpeg简介
FFmpeg是一个功能强大的多媒体处理工具,支持视频剪辑、视频转码、视频编辑、音频处理、添加文字、视频拼接、拉流推流直播等功能。通过不同的FFmpeg命令可以编程完成不同的视频剪辑功能。
二、FFmpeg安装
# macOS系统
brew install ffmpeg
# Ubuntu/Debian系统
sudo apt install ffmpeg
# Windows系统
# 直接去 ffmpeg.org 下载安装包,解压后配置环境变量
三、FFmpeg核心逻辑
FFmpeg的核心逻辑只有一个:输入→处理→输出
ffmpeg [输入选项] -i input.mp4 [输出选项] output.mp4
四、常见视频剪辑场景
1. 视频转码
# 将MOV视频转成MP4视频
ffmpeg -i input.mov output.mp4
# 修改帧率为24
ffmpeg -i input.mp4 -r 24 -an output.mp4
# 指定视频编码
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
2. 视频裁剪(剪辑)
# 从第10秒开始,截取20秒
ffmpeg -ss 00:00:10 -i input.mp4 -t 00:00:20 -c copy output.mp4
# 从第1分10秒开始,截取20秒
ffmpeg -ss 00:01:10 -i input.mp4 -t 00:00:20 output.mp4
# 使用更精确的裁剪(重新编码)
ffmpeg -ss 00:00:10 -i input.mp4 -t 00:00:20 -c:v libx264 -c:a aac output.mp4
3. 视频缩放
# 将视频变为480x360
ffmpeg -i input.mp4 -vf scale=480:360 output.mp4
# 保持宽高比缩放
ffmpeg -i input.mp4 -vf scale=-1:360 output.mp4
4. 视频拼接
# 方法1:使用concat demuxer
# 先创建文件列表
# file 'part1.mp4'
# file 'part2.mp4'
# file 'part3.mp4'
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
# 方法2:使用concat filter
ffmpeg -i part1.mp4 -i part2.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1:a=1" output.mp4
5. 提取音频
# 提取音频为MP3
ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3
# 提取音频为AAC
ffmpeg -i input.mp4 -vn -acodec aac output.aac
6. 添加水印
# 添加文字水印
ffmpeg -i input.mp4 -vf "drawtext=text=' watermark ':fontcolor=white:fontsize=24:x=10:y=10" output.mp4
# 添加图片水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4
7. 视频加速/减速
# 视频加速2倍
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
# 视频减速2倍
ffmpeg -i input.mp4 -vf "setpts=2*PTS" output.mp4
# 同时加速视频和音频
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2" output.mp4
8. 视频旋转
# 顺时针旋转90度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
# 旋转180度
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4
9. 视频转GIF
# 视频转GIF
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" output.gif
# 高质量GIF
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos" output.gif
10. 视频转HLS(m3u8)
# 将MP4转为m3u8
ffmpeg -i input.mp4 -codec: copy -bsf:v h264_mp4toannexb -start_number 0 -hls_time 10 -hls_list_size 0 -f hls output.m3u8
五、常用参数说明
| 参数 | 说明 |
|---|---|
| -i | 输入文件 |
| -c | 编解码器 (copy表示复制) |
| -ss | 开始时间 |
| -t | 持续时间 |
| -vf | 视频滤镜 |
| -af | 音频滤镜 |
| -r | 帧率 |
| -s | 分辨率 |
| -b | 比特率 |
六、Python中使用FFmpeg
import subprocess
def convert_video(input_file, output_file, codec='libx264'):
cmd = [
'ffmpeg', '-i', input_file,
'-c:v', codec, '-c:a', 'aac',
output_file
]
subprocess.run(cmd)
# 使用示例
convert_video('input.mov', 'output.mp4')
七、总结
FFmpeg是目前全球最通用、最稳定、支持格式最全面的视频音频处理工具。几乎所有剪辑软件、播放器、直播平台底层都在用它。掌握FFmpeg的各种命令,可以满足日常视频处理的大部分需求。