【ffmpeg命令入门】添加字幕流

文章目录


前言

在视频编辑和处理中,添加字幕是一项常见的需求,无论是为了增强观众体验还是为了满足特定的格式要求。FFmpeg作为一个强大的多媒体处理工具,提供了丰富的功能来处理和修改视频文件。本文将介绍如何使用FFmpeg添加字幕流到视频中,以及一些常见的参数和技巧。


字幕流的基础知识

字幕流是什么?

字幕流是一种特殊的数据流,用于在视频播放时显示文字内容,比如电影中的中文字幕或英文字幕。它们被嵌入到视频文件中,以便观众可以看到与视频内容相关的文字信息。

不同类型的字幕流及其区别

  1. 内嵌字幕流(Hard Subtitles):

    • 定义: 内嵌字幕是直接合并到视频图像中的字幕,不可移除或更改。
    • 特点: 常见于某些视频文件中,无法关闭或选择其他语言。
  2. 外挂字幕流(Soft Subtitles):

    • 定义: 外挂字幕作为独立的文件或流存在,可以与视频文件分开。
    • 特点: 观众可以根据需要选择显示或隐藏字幕,支持多语言切换。

区别与应用场景

  • 使用场景: 内嵌字幕适合于不需要多语言支持且希望简化播放设置的内容;外挂字幕则更灵活,适合需要多语言支持或随时关闭字幕的场合。
  • 技术实现: 内嵌字幕通常需要重新编码整个视频文件,而外挂字幕则可以通过FFmpeg等工具单独处理,不影响原始视频质量。

通过理解这些不同类型的字幕流及其应用,可以根据实际需要选择合适的方式来增强和定制你的视频内容。

常见的字幕格式及其区别

  1. SubRip Subtitle(.srt)

    • 特点: 纯文本格式,包含时间码和对应的字幕文本。
    • 应用: 广泛支持,适合简单的字幕需求。
  2. SubStation Alpha(.ssa/.ass)

    • 特点: 支持字体、颜色、位置、动画等丰富的样式设置。
    • 应用: 适合制作高度定制化的字幕效果,如动画效果和复杂的布局。
  3. WebVTT(.vtt)

    • 特点: Web标准格式,支持时间码、样式和语言设置。
    • 应用: 主要用于网络视频和HTML5播放器,支持跨平台使用。
  4. DVD Subtitle(.sub)

    • 特点: 原生用于DVD格式的字幕,通常与VOB视频格式一起使用。
    • 应用: 主要用于DVD和蓝光光盘,支持DVD播放器的硬件字幕显示。
  5. Advanced SubStation Alpha(.ass)

    • 特点: 是SSA的进阶版本,支持更多的特效和样式控制。
    • 应用: 适合制作复杂的字幕样式和特效,如动态效果和精细布局。

我们这篇文章使用ssa进行测试,这个为示例文件:

bash 复制代码
[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播放器)

添加软字幕

非常的简单,我们只需要把视频和字幕一起当作输入文件放进去即可:

bash 复制代码
ffmpeg -i maxfps.mp4 -i test.ssa -c copy outhavessa.mkv

vlc播放软字幕视频

然后我们通过vlc打开视频,然后选择字幕轨道:

选择轨道1

然后播放的视频就可以看到字幕了

ffplay播放软字幕视频

使用简单滤波来添加软字幕到视频里面

bash 复制代码
ffplay -vf "subtitles=outhavessa.mkv" outhavessa.mkv

ffplay播放硬字幕

使用简单滤波来添加硬字幕到视频里面

bash 复制代码
ffplay -vf "subtitles=outhavessa.mkv" outhavessa.mkv

总结

通过本文的介绍,你现在应该掌握了如何使用FFmpeg向视频文件中添加字幕流的基本方法。记住,FFmpeg提供了众多选项和参数,可以根据你的具体需求进行调整和优化。继续探索和实践,你将能够利用FFmpeg强大的功能来处理和定制你的视频内容,为观众带来更加丰富和多样的观看体验。

相关推荐
VB.Net20 分钟前
EmguCV学习笔记 VB.Net 9.3 移动检测类
opencv·计算机视觉·c#·.net·图像·vb.net·emgucv
爱吃蔬菜不挑食1 小时前
智绘未来:深度解析【人工智能】、【机器学习】与【计算机视觉】的时代革命
人工智能·深度学习·机器学习·计算机视觉·ai
VB.Net2 小时前
EmguCV学习笔记 VB.Net 9.2 VideoWriter类
opencv·计算机视觉·c#·.net·图像·vb.net·emgucv
方大刚2332 小时前
【Tools】计算机视觉(CV)技术的优势和挑战。
人工智能·计算机视觉
代码定制、代码分享、合作交流2 小时前
opencv车道偏离系统-代码+原理-人工智能-自动驾驶
人工智能·python·opencv·yolo·机器学习·计算机视觉·自动驾驶
思通数科x4 小时前
OCR技术视角:智能文档管理中的票据自动化识别与处理
图像处理·人工智能·计算机视觉·自动化·ocr·文本识别
mirror_zAI4 小时前
[OpenCV] 数字图像处理 C++ 学习——11自定义线性滤波 附完整代码
c++·图像处理·opencv·计算机视觉
Mac分享吧5 小时前
FxFactory 8 for Mac 视觉特效插件包安装
macos·计算机视觉·mac·软件需求·fxfactory·分享软件
GottenZZP5 小时前
Ubuntu22.04安装colmap
c++·计算机视觉·bash
湫兮之风5 小时前
Opencv:cv::applyColorMap函数详细解释
人工智能·opencv·计算机视觉