文章目录
- 前言
- 字幕流的基础知识
- 字幕流是什么?
- 不同类型的字幕流及其区别
- 区别与应用场景
- 常见的字幕格式及其区别
- 区别与应用场景
- 使用ffmpeg添加字幕
- 前提须知
- 添加软字幕
- vlc播放软字幕视频
- ffplay播放软字幕视频
- ffplay播放硬字幕
- 总结
前言
在视频编辑和处理中,添加字幕是一项常见的需求,无论是为了增强观众体验还是为了满足特定的格式要求。FFmpeg作为一个强大的多媒体处理工具,提供了丰富的功能来处理和修改视频文件。本文将介绍如何使用FFmpeg添加字幕流到视频中,以及一些常见的参数和技巧。
字幕流的基础知识
字幕流是什么?
字幕流是一种特殊的数据流,用于在视频播放时显示文字内容,比如电影中的中文字幕或英文字幕。它们被嵌入到视频文件中,以便观众可以看到与视频内容相关的文字信息。
不同类型的字幕流及其区别
-
内嵌字幕流(Hard Subtitles):
- 定义: 内嵌字幕是直接合并到视频图像中的字幕,不可移除或更改。
- 特点: 常见于某些视频文件中,无法关闭或选择其他语言。
-
外挂字幕流(Soft Subtitles):
- 定义: 外挂字幕作为独立的文件或流存在,可以与视频文件分开。
- 特点: 观众可以根据需要选择显示或隐藏字幕,支持多语言切换。
区别与应用场景
- 使用场景: 内嵌字幕适合于不需要多语言支持且希望简化播放设置的内容;外挂字幕则更灵活,适合需要多语言支持或随时关闭字幕的场合。
- 技术实现: 内嵌字幕通常需要重新编码整个视频文件,而外挂字幕则可以通过FFmpeg等工具单独处理,不影响原始视频质量。
通过理解这些不同类型的字幕流及其应用,可以根据实际需要选择合适的方式来增强和定制你的视频内容。
常见的字幕格式及其区别
-
SubRip Subtitle(.srt)
- 特点: 纯文本格式,包含时间码和对应的字幕文本。
- 应用: 广泛支持,适合简单的字幕需求。
-
SubStation Alpha(.ssa/.ass)
- 特点: 支持字体、颜色、位置、动画等丰富的样式设置。
- 应用: 适合制作高度定制化的字幕效果,如动画效果和复杂的布局。
-
WebVTT(.vtt)
- 特点: Web标准格式,支持时间码、样式和语言设置。
- 应用: 主要用于网络视频和HTML5播放器,支持跨平台使用。
-
DVD Subtitle(.sub)
- 特点: 原生用于DVD格式的字幕,通常与VOB视频格式一起使用。
- 应用: 主要用于DVD和蓝光光盘,支持DVD播放器的硬件字幕显示。
-
Advanced SubStation Alpha(.ass)
- 特点: 是SSA的进阶版本,支持更多的特效和样式控制。
- 应用: 适合制作复杂的字幕样式和特效,如动态效果和精细布局。
我们这篇文章使用ssa进行测试,这个为示例文件:
[Script Info]
Title: Simple SSA Subtitle
ScriptType: v4.00
Collisions: Normal
PlayDepth: 0[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&HFFFFFF,&H0000FF,&H000000,&H80000000,-1,0,1,1,2,2,10,10,10,0,0[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: Marked=0,0:00:01.00,0:00:50.00,Default,,0000,0000,0000,,Hello, World!
区别与应用场景
-
文本格式 vs 样式控制: .srt 和 .vtt 等主要关注文本和时间码,适合简单的字幕需求;而 .ssa/.ass 和 .sub 支持更复杂的样式和特效,适合制作专业和高度定制的字幕效果。
-
平台兼容性: .srt 和 .vtt 格式广泛支持于各种播放器和平台,而 .ssa/.ass 和 .sub 格式可能需要特定的播放器支持才能完整显示特效和样式。
选择合适的字幕格式取决于你的视频内容和播放平台需求,理解这些区别可以帮助你更好地制作和应用字幕,提升观众的观看体验。
使用ffmpeg添加字幕
前提须知
如果ffmpeg要实现添加字幕的功能需要在编译时开启--enable-filter=subtitles --enable-libass
--enable-filter=subtitles
代表开启字幕滤镜
--enable-libass
则是字幕滤镜需要依赖的外部库,所以编译时还需要指定该外部库的路径(如x264的编译一样)
软字幕只有部分容器格式比如(mkv)才支持,MP4/MOV等不支持,而且也只有部分播放器支持软字幕或者外挂字幕(如VLC播放器)
添加软字幕
非常的简单,我们只需要把视频和字幕一起当作输入文件放进去即可:
ffmpeg -i maxfps.mp4 -i test.ssa -c copy outhavessa.mkv
vlc播放软字幕视频
然后我们通过vlc打开视频,然后选择字幕轨道:
选择轨道1
然后播放的视频就可以看到字幕了
ffplay播放软字幕视频
使用简单滤波来添加软字幕到视频里面
ffplay -vf "subtitles=outhavessa.mkv" outhavessa.mkv
ffplay播放硬字幕
使用简单滤波来添加硬字幕到视频里面
ffplay -vf "subtitles=outhavessa.mkv" outhavessa.mkv
总结
通过本文的介绍,你现在应该掌握了如何使用FFmpeg向视频文件中添加字幕流的基本方法。记住,FFmpeg提供了众多选项和参数,可以根据你的具体需求进行调整和优化。继续探索和实践,你将能够利用FFmpeg强大的功能来处理和定制你的视频内容,为观众带来更加丰富和多样的观看体验。