《ffmpeg basics》中文版 -- 14.元数据和字幕

14.元数据和字幕

​ Metadata:元数据 Subtitle:字幕

​ 媒体文件中的元数据部分,包含如艺术家,作者,日期,类型,出版商,标题等额外的信息,这些信息并不会在视频帧中显示。字幕则是文本性的数据,它通常被保存在一个单独的文件(字幕文件)中,且一般会显示在视频帧的底部。当然有一些 container 如 VOB 格式,则支持内嵌一个字幕文件。

元数据介绍

​ 在音乐播放器中,经常用到 MP3 的元数据,我们可以看到 界面上对应MP3 的项上会有名称,艺术家,唱片名等信息。想要显示位于 Windows 默认的音乐目录下 Kalimba.mp3 文件的元数据,我们可以使用命令:

ffplay -i "/Users/Public/Music/Sample Music/Kalimba.mp3"

​ 元数据输出如下所示:

在这里插入图片描述

创建元数据

​ 我们可以给媒体文件中添加元数据,通过使用 -metadata 选项,后跟 key = value 的数据对,如果 key 或者 value 中有空格,那么必须使用双引号将它们整体括起来。当我们要添加多个元数据时,应该多次使用 -metadata 选项来完成多次输入,例如:

ffmpeg -i input -metadata artist=FFmpeg -metadata title="Test 1" output

​ ASF,FLV,Matroska,WMA,WMV 格式的文件支持任意的 key 值。但其他格式仅支持特定的 key 值,其详情如下:

在这里插入图片描述

​ 表中的最后一行:user-defined 表示除了列表中列出的 key 值外,还可以使用任意自定义 key 值。例如,我们可以添加如下元数据:

location		:	London,United kingdom
camera type		:	SONY DSC
camera mode		:	movie
weather			:	sunny

​ 对应的命令如下:

ffmpeg -i video.avi -metadata location="London,United kingdom" -metadata "camera type"="SONY DSC" -metadata "camera mode"="movie" -metadata "weather"="sunny" video.wmv

从文件保存或加载元数据

​ 如果想要将媒体文件中的元数据保存下来,我们可以使用 -f 选项并指定 ffmetadata ,此时的输出就是元数据,我们需要为输出指定文件名保存下来。例如,想要将我们之前生产的 video.vmv 中的元数据保存下来,我们可以使用命令:

ffmpeg -i video.wmv -f ffmetadata data.txt

​ 输出文件 data.txt 中的内容为:

在这里插入图片描述

​ 最后一行会包含当前的编码其版本号。

​ 而想要将 data.txt 中的元数据加载到一个媒体文件中,我们仅需要将 data.txt 作为一个输入即可:

ffmpeg -i data.txt -i video1.avi video1.wmv

​ 现在 video1.wmv 和 video.wmv 两个文件中的元数据是完全相同的。我们将 video.wmv 中的元数据保存下来然后再加载到 video1.wmv 中。元数据文件除了从媒体文件中保存下来之外,也可以自动创建,只要符合相关格式即可。元数据文件的第一行是一个固定的头部,用以表明这个文件是个元数据文件,其内容固定为:”;FFMETADATA1“,后面的行就是形如 key=value 的数据对,也就是元数据。

删除元数据

​ 如果想要删除元数据,我们可以使用 -map_metadata 选项并赋值为一个负数,例如想要将输出文件中的元数据全部删除,我们可以使用命令:

ffmpeg -i input.avi -map_metadata -1 output.mp4

字幕介绍

​ 字幕,就是显示在视频底部的文本性数据,它一般用于提供画面之外的额外信息,如为电影台词提供本地翻译,或者以文字的形式来显示台词等。字幕可以分为两种主要类型:

  • 外部字幕,以单独的文件形式存在,在媒体播放器其播放视频时,将其加载到视频帧中。其优点是:在没有相关视频的情况下,可以单独编辑和发布。

  • 内嵌字幕,其信息和音频流,视频流一样,被保存在文件中

​ 字幕还可以有其他的划分方法,如预备字幕和直播字幕(在视频直播的同时创建的字幕);或者分为 开放字幕和可关闭字幕(open and closed),开发字幕不可以关闭,而可关闭字幕则可以根据需要打开和关闭,常见于 DVD 中。

​ 下表列出了FFmpeg中支持的字幕编解码器以及字幕文件格式。在 Support 一列中,D 表示该 format 可以被解码,E 表示该 format 可以编码( dvb_teletext 和 eia_608 尚未明确对字幕的支持)。例如,想要将 SRT 格式的字幕转化为 ASS 格式,我们可以使用命令:

ffmpeg -i subtitles.srt subtitles.ass

在这里插入图片描述

将字幕直接编码到视频

​ 当我们需要编码字幕到视频流中时,有 2 个 filter 可以实现这个功能:ass(仅可以编码 ass 格式字幕)和 subtitles filter。subtitles filter 的描述如下:

在这里插入图片描述

​ 为了防止在 Windows 上出现错误信息,我们需要指定字体配置文件的位置,字体配置文件可以从 http://ffmpeg.tv/fonts.conf 下载。请将下载的 fonts.conf 文件保存到 ffmpeg.exe 的目录,并在Windows系统中添加下表的三个环境变量:

在这里插入图片描述

​ 请注意:不同的 container 支持不同的字幕格式,大多数 container 都支持 ASS 和 SRT 格式的字幕。例如,想要将 titles.srt 字幕添加到 video.mp4 的视频流中,我们可以使用命令:

ffmpeg -i video.avi -vf subtitles=titles.srt video.mp4

在这里插入图片描述

H&A
发布了7 篇原创文章 · 获赞 4 · 访问量 819

猜你喜欢

转载自blog.csdn.net/qq_34305316/article/details/103937580