FFmpeg 基础功能样例

6 阅读5分钟

FFmpeg 基础功能样例

FFmpeg 是强大的音视频处理工具,支持视频截取、格式转换、压缩、合并等操作。

一、视频截取

1. 按时间截取视频片段

# 截取从第10秒开始,持续20秒的视频
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c copy output.mp4

# 截取从第10秒到第30秒的视频
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c copy output.mp4

参数说明:

  • -ss:开始时间点(支持格式:1000:00:10
  • -t:持续时间
  • -to:结束时间点
  • -c copy:直接复制流,不重新编码(速度快,精度可能略有偏差)

2. 精确截取(重新编码)

# 精确截取,需要重新编码
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:15 -c:v libx264 -c:a aac output.mp4

二、格式转码

1. 常见格式转换

# MP4 转 MKV
ffmpeg -i input.mp4 output.mkv

# MP4 转 AVI
ffmpeg -i input.mp4 -c:v libxvid -c:a mp3 output.avi

# MOV 转 MP4
ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4

# WebM 转 MP4
ffmpeg -i input.webm -c:v libx264 -c:a aac output.mp4

2. 指定编码器转码

# 使用 H.264 编码
ffmpeg -i input.avi -c:v libx264 -preset medium -crf 23 -c:a aac output.mp4

# 使用 H.265 (HEVC) 编码
ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 28 -c:a aac output.mp4

# 使用 VP9 编码 (WebM)
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:a 128k output.webm

编码参数说明:

  • -preset:编码速度与压缩率平衡(ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow)
  • -crf:质量系数(0-51,值越小质量越高,默认23,H.265默认28)

三、视频压缩

1. 降低码率压缩

# 限制视频码率为 1Mbps
ffmpeg -i input.mp4 -b:v 1M -c:a copy output.mp4

# 限制音频码率为 128Kbps
ffmpeg -i input.mp4 -c:v copy -b:a 128k output.mp4

2. 调整分辨率压缩

# 缩放到 1280x720
ffmpeg -i input.mp4 -vf scale=1280:720 -c:a copy output.mp4

# 缩放宽度为 1280,高度自动计算保持比例
ffmpeg -i input.mp4 -vf scale=1280:-1 -c:a copy output.mp4

# 缩放到原分辨率的 50%
ffmpeg -i input.mp4 -vf "scale=iw*0.5:ih*0.5" -c:a copy output.mp4

3. 使用 CRF 压缩

# CRF 值越大压缩率越高,质量越低
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -c:a copy output.mp4

四、视频合并

1. 使用 concat 协议(相同编码格式)

# 创建文件列表 list.txt
# file 'video1.mp4'
# file 'video2.mp4'
# file 'video3.mp4'

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

2. 使用 concat 滤镜(不同编码格式)

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4

五、提取音视频

1. 提取音频

# 提取音频为 MP3
ffmpeg -i input.mp4 -vn -c:a mp3 -b:a 192k audio.mp3

# 提取音频为 AAC
ffmpeg -i input.mp4 -vn -c:a aac -b:a 128k audio.aac

# 提取音频为 WAV(无损)
ffmpeg -i input.mp4 -vn -c:a pcm_s16le audio.wav

2. 提取视频(静音)

ffmpeg -i input.mp4 -an -c:v copy output.mp4

3. 替换视频音频

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4

六、视频截图

1. 截取单帧

# 截取第5秒的画面
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 screenshot.jpg

# 截取第10秒的 PNG 图片
ffmpeg -i input.mp4 -ss 10 -vframes 1 -q:v 2 screenshot.png

2. 定时截图

# 每秒截取一张图片
ffmpeg -i input.mp4 -vf fps=1 output_%04d.jpg

# 每5秒截取一张图片
ffmpeg -i input.mp4 -vf fps=1/5 output_%04d.jpg

# 每分钟截取一张图片
ffmpeg -i input.mp4 -vf fps=1/60 output_%04d.jpg

七、GIF 制作

1. 视频转 GIF

# 基础转换
ffmpeg -i input.mp4 output.gif

# 指定时间段和帧率
ffmpeg -ss 00:00:10 -t 5 -i input.mp4 -vf "fps=10,scale=480:-1" output.gif

# 高质量 GIF(使用调色板)
ffmpeg -i input.mp4 -vf "fps=15,scale=480:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" output.gif

2. 图片序列转 GIF

ffmpeg -framerate 10 -i image_%04d.jpg -vf "scale=640:-1" output.gif

八、添加水印

1. 图片水印

# 左上角
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4

# 右下角
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4

# 居中
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=(W-w)/2:(H-h)/2" output.mp4

2. 文字水印

ffmpeg -i input.mp4 -vf "drawtext=text='My Watermark':fontsize=24:fontcolor=white:x=10:y=10" output.mp4

# 带阴影的文字水印
ffmpeg -i input.mp4 -vf "drawtext=text='My Watermark':fontsize=24:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=2:x=W-tw-10:y=H-th-10" output.mp4

九、调整视频速度

1. 视频加速/减速

# 2倍速播放
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4

# 0.5倍速播放(慢放)
ffmpeg -i input.mp4 -filter:v "setpts=2*PTS" output.mp4

2. 音视频同步调速

# 2倍速(音视频同步)
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -filter:a "atempo=2.0" output.mp4

# 0.5倍速(音视频同步)
ffmpeg -i input.mp4 -filter:v "setpts=2*PTS" -filter:a "atempo=0.5" output.mp4

十、常用参数速查

参数说明
-i输入文件
-c:v视频编码器
-c:a音频编码器
-c copy直接复制流
-b:v视频码率
-b:a音频码率
-r帧率
-s分辨率
-vf视频滤镜
-af音频滤镜
-ss开始时间
-t持续时间
-to结束时间
-y覆盖输出文件
-vn禁用视频
-an禁用音频
-preset编码预设
-crf恒定质量因子

十一、实用组合示例

# 压缩视频并转换格式(适合网页播放)
ffmpeg -i input.avi -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k -vf scale=1280:-1 output.mp4

# 截取片段并添加水印
ffmpeg -i input.mp4 -ss 00:01:00 -t 30 -i logo.png -filter_complex "overlay=W-w-10:H-h-10" -c:v libx264 -c:a copy output.mp4

# 批量转换当前目录下所有 MKV 为 MP4
for %f in (*.mkv) do ffmpeg -i "%f" -c:v libx264 -c:a aac "%~nf.mp4"

参考资源: