FFmpeg常用命令大全
精选最实用的FFmpeg命令,涵盖格式转换、剪辑、压缩、字幕、推流等常见场景。
阅读更多 →掌握FFmpeg字幕处理的各种技巧,从入门到精通
字幕文件有多种格式,每种格式有不同的特点和应用场景。在使用 FFmpeg 处理字幕之前,先了解一下常见的字幕格式。
SRT(SubRip Text)是最流行、最简单的字幕格式,几乎所有播放器都支持。它是纯文本格式,包含序号、时间轴和字幕内容。
1
00:00:01,000 --> 00:00:04,000
这是第一句字幕
2
00:00:05,000 --> 00:00:08,000
这是第二句字幕
优点:格式简单、兼容性好、易于编辑。缺点:不支持样式设置。
ASS(Advanced SubStation Alpha)是功能最强大的字幕格式,支持丰富的样式设置,包括字体、颜色、位置、动画效果等。
[Script Info]
Title: 示例字幕
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour
Style: Default, Arial, 24, &H00FFFFFF
[Events]
Format: Layer, Start, End, Style, Text
Dialogue: 0, 0:00:01.00, 0:00:04.00, Default, 这是第一句字幕
优点:样式丰富、支持特效、可定制程度高。缺点:格式复杂,部分设备不支持。
VTT(WebVTT)是专为网页设计的字幕格式,HTML5 的 video 标签原生支持。格式与 SRT 类似,但有一些扩展功能。
WEBVTT
00:00:01.000 --> 00:00:04.000
这是第一句字幕
00:00:05.000 --> 00:00:08.000
这是第二句字幕
优点:网页原生支持、轻量。缺点:浏览器支持有差异,样式功能有限。
硬字幕(Hardsub)是将字幕直接渲染到视频画面中,字幕成为视频的一部分,无法关闭。优点是兼容性好,任何播放器都能显示;缺点是无法移除,且需要重新编码。
使用 subtitles 滤镜添加 SRT 字幕:
ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4
如果字幕文件名包含特殊字符或路径,需要进行转义:
ffmpeg -i input.mp4 -vf "subtitles='sub\ title.srt'" output.mp4
ASS 字幕可以保留样式信息,使用 ass 滤镜:
ffmpeg -i input.mp4 -vf ass=subtitle.ass output.mp4
对于 SRT 字幕,可以通过 force_style 参数设置字幕样式:
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&H00FFFFFF&,OutlineColour=&H00000000&,Outline=2'" output.mp4
FontName:字体名称FontSize:字体大小PrimaryColour:主颜色(文字颜色)OutlineColour:描边颜色BackColour:背景颜色Outline:描边宽度Shadow:阴影深度Bold:粗体(-1=开启,0=关闭)Italic:斜体注意:颜色格式为 &HAABBGGRR(Alpha、Blue、Green、Red),与常见的 RGB 顺序相反。
可以通过 Alignment 参数调整字幕位置:
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='Alignment=6,MarginV=50'" output.mp4
Alignment 取值 1-9,对应数字小键盘的位置(6=右中,2=底部居中,8=顶部居中)。
软字幕(Softsub)是将字幕作为独立的轨道嵌入视频文件中,播放时可以开关和切换。优点是灵活、不影响画质;缺点是需要播放器支持。
ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text output.mp4
MKV 对软字幕的支持最好,可以直接复制:
ffmpeg -i input.mkv -i subtitle.srt -c copy output.mkv
ffmpeg -i input.mp4 -i zh.srt -i en.srt -i jp.srt \
-c copy -c:s mov_text \
-metadata:s:s:0 language=chi -metadata:s:s:0 title="中文" \
-metadata:s:s:1 language=eng -metadata:s:s:1 title="English" \
-metadata:s:s:2 language=jpn -metadata:s:s:2 title="日本語" \
output.mp4
ffmpeg -i input.mp4 -i zh.srt -i en.srt \
-c copy -c:s mov_text \
-disposition:s:0 default \
-disposition:s:1 none \
output.mp4
有时候需要从视频文件中提取字幕,以便编辑或转换格式。FFmpeg 可以轻松完成这个任务。
首先查看视频中的字幕轨道信息:
ffmpeg -i input.mkv
找到字幕轨道的编号(通常是 0:s:0、0:s:1 等),然后提取:
ffmpeg -i input.mkv -map 0:s:0 output.srt
如果字幕本身是 ASS 格式,直接提取:
ffmpeg -i input.mkv -map 0:s:0 -c copy output.ass
ffmpeg -i input.mkv -map 0:s -c copy output_%d.srt
MP4 中的字幕通常是 mov_text 格式,需要转换为 SRT:
ffmpeg -i input.mp4 -map 0:s:0 output.srt
不同的应用场景需要不同的字幕格式,FFmpeg 可以在各种字幕格式之间转换。
ffmpeg -i input.srt output.ass
ffmpeg -i input.srt output.vtt
将 ASS 字幕转换为 SRT 会丢失样式信息:
ffmpeg -i input.ass output.srt
ffmpeg -i input.vtt output.srt
使用 FFmpeg 添加硬字幕时,样式设置非常重要。下面详细介绍常用的样式参数。
FFmpeg 字幕滤镜使用的颜色格式是 &HAABBGGRR,其中:
AA:Alpha 透明度(00=完全透明,FF=完全不透明)BB:蓝色分量GG:绿色分量RR:红色分量注意顺序是蓝绿红(BGR),不是常见的红绿蓝(RGB)。
| 颜色 | 颜色值 | 说明 |
|---|---|---|
| 白色 | &H00FFFFFF& | 默认文字颜色 |
| 黑色 | &H00000000& | 描边/阴影颜色 |
| 红色 | &H000000FF& | 强调文字 |
| 黄色 | &H0000FFFF& | 经典字幕色 |
| 半透明黑底 | &H80000000& | 50%透明度黑色背景 |
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='
FontName=Microsoft YaHei,
FontSize=24,
PrimaryColour=&H00FFFFFF&,
OutlineColour=&H00000000&,
BackColour=&H80000000&,
Bold=-1,
Italic=0,
Outline=2,
Shadow=1,
Alignment=2,
MarginV=40
'" output.mp4
ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4ffmpeg -i input.mp4 -vf ass=sub.ass output.mp4ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontName=SimHei'" output.mp4ffmpeg -i input.mp4 -vf "subtitles=sub.srt:force_style='FontSize=30'" output.mp4ffmpeg -i input.mkv -i sub.srt -c copy output.mkvffmpeg -i input.mp4 -i sub.srt -c copy -c:s mov_text output.mp4ffmpeg -i input.mkv -map 0:s:0 output.srtffmpeg -i input.mkv -map 0:s -c copy sub_%d.srtffmpeg -i input.srt output.assffmpeg -i input.srt output.vttffmpeg -i input.ass output.srt通常是字幕文件编码问题。确保字幕文件是 UTF-8 编码,或者指定字符集:
ffmpeg -i input.mp4 -vf "subtitles=sub.srt:charenc=GBK" output.mp4
确保系统中安装了指定的字体。Linux 系统可以将字体文件放在 ~/.fonts 目录下,或设置字体路径:
FFLIBFREETYPE_FONTPATH=/path/to/fonts ffmpeg -i input.mp4 -vf subtitles=sub.srt output.mp4
可以使用 itsoffset 参数调整字幕的时间偏移:
ffmpeg -i input.mp4 -itsoffset 0.5 -i sub.srt -c:v copy -c:a copy -c:s mov_text output.mp4
FFmpeg 提供了强大的字幕处理功能,无论是添加硬字幕、软字幕,还是提取、转换字幕格式,都能轻松完成。掌握这些命令可以大大提高视频处理的效率。
对于不熟悉命令行的用户,也可以使用各种图形界面的字幕处理工具。但 FFmpeg 的灵活性和强大功能仍然是专业用户的首选。