写在前面
如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的简书账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。
正文
媒体文件中的元数据包含艺术家,作者,日期,流派,发布者,标题等附加信息,并且不会显示在视频帧中。 字幕是文本数据,通常包含在单独的文件中,并显示在视频帧底部附近,尽管一些容器文件格式(如VOB)支持包含字幕文件。
元数据介绍
元数据通常用于MP3文件,媒体播放器通常在其中显示诸如歌曲标题,艺术家,专辑等的项目。例如,要显示位于Windows 7的Sample Music文件夹中的文件Kalimba.mp3的元数据( 具有其他操作系统的用户可以选择具有始终存在于官方发布的音乐和视频中的元数据的其他媒体文件),我们可以使用该命令
ffplay -i "/Users/Public/Music/Sample Music/Kalimba.mp3"
控制台输出包括表单中的元数据:我的测试命令:
ffplay -i /Users/zhangfangtao/Desktop/DYZDJ.mp3
显示的结果如下图:
创建元数据
元数据被包含在带有-元数据选项的媒体文件中,后跟一个键=值对,其中的键或值必须是双引号,如果包含空格。当需要输入更多的密钥时,可以使用几个元数据选项,例如:
ffmpeg -i input -metadata artist=FFmpeg -metadata title="Test 1" output
我的测试命令:
ffmpeg -i /Users/zhangfangtao/Desktop/DYZDJ.mp3 -metadata artist=FFmpeg -metadata title="zhangfangtao" -metadata age="22" -metadata sex="man" /Users/zhangfangtao/Desktop/DYZDJ2.mp3
显示的效果如下图:
ASF、FLV、Matroska、WMA和WMV文件格式都支持任何元数据键,而其他格式只支持某些键,细节在下面的表中(源:MultimediaWiki、wiki.multimedia.cx的FFmpeg元数据文章)。
用户定义的元数据可以包含表中未列出的键,例如添加信息
我们可以使用这个命令:
ffmpeg -i video.avi -metadata location="London, United Kingdom" ^ -metadata "camera type"="SONY DSC" -metadata "camera mode"=movie ^ -metadata weather="sunny" video.wmv
我的测试命令:
ffmpeg -i /Users/zhangfangtao/Desktop/DYZDJ.mp3 -metadata location="shandongsheng" -metadata "camera type"="SONY DSC" -metadata "camera mode"=movie -metadata weather="sunny" /Users/zhangfangtao/Desktop/DYZDJ2.mp3
显示的结果如下图:
保存和加载文件的元数据
为了保存媒体文件中包含的元数据,我们可以使用-f选项指定的ffmetadata格式,在该文本文件的名称之前存储元数据。例如,从视频中保存元数据。在前面的示例中创建的wmv文件,我们可以使用该命令。
ffmpeg -i video.wmv -f ffmetadata data.txt
输出文件dats.txt包含以下几行(最后一行将包含当前的编码器版本):
;FFMETADATA1
weather=sunny
location=London, United Kingdom
camera type=SONY DSC
camera mode=movie
encoder=Lavf54.33.100
测试命令:
ffmpeg -i /Users/zhangfangtao/Desktop/DYZDJ2.mp3 -f ffmetadata /Users/zhangfangtao/Desktop/data.txt
txt文本里面显示的信息有:
从data.txt加载元数据到其他相关的媒体文件,我们可以简单地把它作为第一个输入文件,在媒体文件之前,例如:
ffmpeg -i data.txt -i video1.avi video1.wmw
我的测试命令:
ffmpeg -i /Users/zhangfangtao/Desktop/data.txt -i /Users/zhangfangtao/Desktop/test.mp4 /Users/zhangfangtao/Desktop/test2.wmv
生成的新的视频信息:
现在文件video1.wmv包含与data.txt文件传输的文件video.wmv相同的元数据。 Loaded不仅可以是由ffmpeg保存的元数据文件,还可以创建具有特殊格式的全新文件。 在这些文件中,第一行是包含文本的标题; FFMETADATA1,下一行是包含所需内容的key = value对,如上例所示。
删除元数据
要删除不是实际的元数据,我们可以使用设置为负值的-map_metadata
选项,例如从文件input.avi
中删除所有元数据,我们可以使用以下命令:
ffmpeg -i input.avi -map_metadata -1 output.mp4
我的测试命令:
ffmpeg -i /Users/zhangfangtao/Desktop/test2.wmv -map_metadata -1 /Users/zhangfangtao/Desktop/newtest2.wmv
生成的视频信息:
关于字幕的介绍
字幕是包含在视频帧底部附近的文本数据,用于提供附加信息,如将口语外语翻译为本地语言,提高识字率的相同语言字幕等。字幕可以分为两种主要类型:
- 外部媒体播放器在播放期间包含在独立文件中并且包含在视频帧中的优点是可以在没有视频的情况下进行编辑和分发
- 内部的,包含在具有视频和音频流的媒体文件容器中
其他部分包括在实况视频广播期间同时创建的准备好的字幕和实况字幕。 其他排序将字幕分为打开和关闭 - 打开或关闭字幕和字幕等关闭字幕时,不能关闭打开的字幕。
支持的字幕编解码器和文件格式列表位于表格中,支持列D表示此格式可以解码,E表示编码的可用性(dvb_teletext和eia_608尚未指定)。 例如,要将SRT格式的字幕转换为ASS格式,我们可以使用以下命令:
ffmpeg -i subtitles.srt subtitles.ass
可用解码器字幕
编解码器 | 支持 | 描述 |
---|---|---|
dvb_subtitle | DE | DVB字幕(解码器:dvbsub)(编码器:dvbsub) |
dvb_teletext | DVB电子文本 | |
dvd_subtitle | DE | DVD字幕(译码器:dvdsub)(编码器:dvdsub) |
eia_608 | eia - 608关闭字幕 | |
hdmv_pgs_subtitle | D | HDMV表示图形流字幕(解码器:pgssub) |
jacosub | D | JACOsub字幕 |
microdvd | D | MicroDVD字幕 |
mov_text | DE | MOV文本 |
realtext | D | RealText字幕 |
sami | D | SAMI 字幕 |
srt | DE | 带有嵌入式计时的SubRip字幕 |
ssa | DE | SSA (SubStation Alpha) / ASS(高级SSA)字幕(解码器:ASS)(编码器:ASS) |
subrip | DE | SubRip字幕 |
subviewer | D | 子视图字幕 |
text | D | 生utf - 8的文本 |
webvtt | D | WebVTT字幕 |
xsub | DE | XSUB |
可用文件格式(支持列:D=demuxing yes, E=muxing yes) | ||
文件格式 | 支持 | 描述 |
ass | DE | SSA (SubStation Alpha)字幕 |
jacosub | DE | JACOsub字幕格式 |
microdvd | DE | MicroDVD字幕格式 |
realtext | D | RealText字幕格式 |
sami | D | SAMI字幕格式 |
srt | DE | SubRip字幕 |
subviewer | D | 子视图字幕格式 |
vobsub | D | VobSub字幕格式 |
webvtt | D | WebVTT字幕 |
直接编码到视频的字幕
例如,如果我们想要将一个字幕视频包含到网页中,我们需要将字幕编码到视频流中,2个过滤器可以做到:ass(只编码ass格式)和在表中描述的字幕过滤器:
视频过滤器:字幕
描述 | 包括使用libass库的输入视频的字幕 |
---|---|
语法 | subtitles=filename[:original_size] |
描述的选项 | |
f, filename | 包含字幕的文件的名称 |
original_size | 原始视频的大小,当输入被调整时需要 |
为了防止Windows上的错误消息,需要指定可以从http://ffmpeg.tv/fonts.conf下载的fontconfig配置文件的位置。
请保存字体。conf文件到相同的目录,其中是文件ffmpeg。exe(或f.exe),通过点击环境变量模态对话框中系统变量部分的按钮,添加3个新的环境变量(如何显示它,在第一章,分段路径设置):
新的系统变量模态对话框
变量名 | 变量值(ffmpeg_dir是ffmpeg.exe的位置) |
---|---|
FC_CONFIG_DIR | C:\ffmpeg_dir |
FONTCONFIG_FILE | fonts.conf |
FONTCONFIG_PATH | C:\ffmpeg_dir |
请注意,并非所有的字幕格式都由所有的容器支持,大多数容器(AVI, Matroska, MP4, MPG,等等)支持ASS和SRT。例如,从文件标题将字幕编码到视频流。srt到文件视频。mp4,我们可以使用这个命令(其他例子在图片上显示):
ffmpeg -i video.avi -vf subtitles=titles.srt video.mp4