跳转至

02-命令行速查:转码、抽帧、拼接、音视频同步

目录页:见 FFmpeg 文档目录

这章只追求“能直接抄走用”。建议先用 ffprobe 看清楚容器/编码/时长/帧率/音轨/字幕,再决定要不要转码。

如果你发现自己“会抄但不懂”,先把这两章看一遍:


1. 先看信息:ffprobe

看流信息(视频/音频分别是什么编码):

ffprobe -hide_banner -i input.mp4

只看时长与关键元信息(输出更干净):

ffprobe -v error -show_entries format=duration:format_tags=title -of default=nk=1:nw=1 input.mp4

2. 转封装(不转码,最快)

只换容器(不重新编码):

ffmpeg -i input.mp4 -c copy output.mkv

只要视频,不要音频/字幕:

ffmpeg -i input.mkv -map 0:v:0 -c copy out.mp4

只要视频 + 第一条音频(多音轨文件建议显式 map):

ffmpeg -i input.mkv -map 0:v:0 -map 0:a:0 -c copy out.mkv

3. 常见转码(通用模板)

转 H.264 + AAC(最通用的组合之一):

ffmpeg -i input.mov -c:v libx264 -pix_fmt yuv420p -c:a aac -b:a 192k output.mp4

缩放到 720p(保持宽高比):

ffmpeg -i input.mp4 -vf "scale=-2:720" -c:v libx264 -c:a copy output_720p.mp4

4. 截取/裁剪(尽量不踩同步坑)

从 10s 开始取 5s(最稳的方式:重编码一遍):

ffmpeg -ss 10 -t 5 -i input.mp4 -c:v libx264 -c:a aac out.mp4

如果你只想“无损裁剪”(-c copy),需要接受:不一定从精确帧切、也可能音画有偏差:

ffmpeg -ss 10 -t 5 -i input.mp4 -c copy out_copy.mp4

5. 抽帧/导出图片序列

按帧率抽(每秒 2 帧):

ffmpeg -i input.mp4 -vf "fps=2" frames/%06d.png

按时间戳抽一张(第 3.5 秒):

ffmpeg -ss 3.5 -i input.mp4 -frames:v 1 out.png

6. 图片序列 ↔ 视频

图片序列转视频(30fps):

ffmpeg -framerate 30 -i frames/%06d.png -c:v libx264 -pix_fmt yuv420p out.mp4

视频转图片序列:

ffmpeg -i input.mp4 frames/%06d.png

7. 导出音频 / 改格式

导出 mp3:

ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k out.mp3

导出 wav(PCM,便于做分析/波形处理):

ffmpeg -i input.mp4 -vn -c:a pcm_s16le -ar 48000 -ac 2 out.wav

8. 字幕:封装与烧录

把 srt 作为软字幕封装进 mkv:

ffmpeg -i input.mp4 -i sub.srt -c:v copy -c:a copy -c:s srt out.mkv

把字幕烧进画面(硬字幕):

ffmpeg -i input.mp4 -vf "subtitles=sub.srt" -c:v libx264 -crf 20 -c:a copy out_hardsub.mp4

9. 旋转/翻转

旋转 90°:

ffmpeg -i input.mp4 -vf "transpose=1" -c:v libx264 -crf 20 -c:a copy out_rot.mp4

水平翻转:

ffmpeg -i input.mp4 -vf "hflip" -c:v libx264 -crf 20 -c:a copy out_hflip.mp4

10. 水印/叠加

叠加 logo 到右上角:

ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=W-w-20:20" -c:v libx264 -crf 20 -c:a copy out_logo.mp4

11. 常见质量/体积控制

CRF + preset(离线压缩常用):

ffmpeg -i input.mp4 -c:v libx264 -crf 20 -preset slow -pix_fmt yuv420p -c:a aac -b:a 160k out.mp4

强行卡码率(带宽受限/推流常用):

ffmpeg -i input.mp4 -c:v libx264 -b:v 2500k -maxrate 2500k -bufsize 5000k -g 60 -pix_fmt yuv420p -c:a aac -b:a 160k out.mp4

12. 拼接(concat)

同编码参数的 mp4 拼接(推荐先转封装到 TS 再 concat,兼容性更好):

ffmpeg -i a.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts a.ts
ffmpeg -i b.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts b.ts
ffmpeg -i "concat:a.ts|b.ts" -c copy -bsf:a aac_adtstoasc out.mp4

如果你能保证输入文件编码参数完全一致,也可以用 concat demuxer(更标准):

准备一个 list.txt

file 'a.mp4'
file 'b.mp4'

然后:

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

13. 常见同步问题的第一反应

  • 先用 ffprobe 看:是否 VFR(可变帧率)、音频采样率是否一致、是否有多音轨
  • 只要你不是强制无损(-c copy),多数同步问题都能通过“重编码 + 统一参数”解决

如果你经常遇到“选错音轨/字幕/莫名其妙不同步/报错看不懂”,直接看: