FFmpeg音视频专辑iOS音视频开发

《FFmpeg Basics》中文版-14-元数据和字幕

2018-04-12  本文已影响35人  张芳涛

写在前面

如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的简书账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。

正文

媒体文件中的元数据包含艺术家,作者,日期,流派,发布者,标题等附加信息,并且不会显示在视频帧中。 字幕是文本数据,通常包含在单独的文件中,并显示在视频帧底部附近,尽管一些容器文件格式(如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
上一篇下一篇

猜你喜欢

热点阅读