ffmpeg-metadata

1. 设置元数据
	1.1 设置文件标题
	1.2 删除所有流标题
	1.3 设置音频流语言
	1.4 选项说明
2. 元数据文件-章节
	2.1 提取元数据
	2.2 编辑元数据文件
	2.3 加载元数据文件
	2.4 元数据文件说明
	2.5 选项说明
3. 设置默认流
	3.1 删除第一个音频流的默认属性,设置第二个音频流为默认
	3.2 选项说明

1. 设置元数据

1.1 设置文件标题

$ ffmpeg -i Jurassic.World.mkv -map 0 -c copy -metadata title="Jurassic World" out.mkv $ ffprobe -hide_banner out.mkv  Input #0, matroska,webm, from 'out.mkv':   Metadata:     title           : Jurassic World

1.2 删除所有流标题

$ ffmpeg -i Jurassic.World-2015.mkv -map 0 -c copy -metadata:s title="" out.mkv 删除0号流标题 $ ffmpeg -i Jurassic.World-2015.mkv -map 0 -c copy -metadata:s:0 title="" out.mkv 修改前:  $ ffprobe -hide_banner Jurassic.World.mkv  Input #0, matroska,webm, from 'Jurassic.World-2015.mkv':   Metadata:     title           : www.------.com   Stream #0:0(eng): Video: h264 (High), yuv420p(tv, bt709/bt709/unknown, progressive), 1920x960, SAR 1:1 DAR 2:1, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)     Metadata:       title           : ------.com   Stream #0:1(hin): Audio: aac (LC), 48000 Hz, stereo, fltp     Metadata:       title           : ------.com   Stream #0:2(eng): Audio: aac (LC), 48000 Hz, stereo, fltp (default)     Metadata:       title           : ------.com

1.3 设置音频流语言

$ ffprobe -hide_banner Jurassic.World-2015.mkv    Stream #0:1(hin): Audio: aac (LC), 48000 Hz, stereo, fltp $ ffmpeg -i Jurassic.World-2015.mkv -map 0 -c copy -metadata:s:a:0 language=eng out.mkv $ ffprobe -hide_banner out.mkv    Stream #0:1(eng): Audio: aac (LC), 48000 Hz, stereo, fltp

1.4 选项说明

-metadata[:metadata_specifier] key=value (output,per-metadata) 设置元数据键/值对。可以给出可选的metadata_specifier来设置流、章节或节目的元数据。有关-map_metadata 详细信息,请参阅文档。 此选项会覆盖使用-map_metadata. 也可以使用空值删除元数据。 例如,在输出文件中设置标题:   ffmpeg -i in.avi -metadata title="my title" out.flv 设置第一个音频流的语言:   ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT   -map_chapters input_file_index (output) 将具有索引input_file_index 的输入文件中的章节复制到下一个输出文件。如果未指定章节映射,则从包含至少一个章节的第一个输入文件复制章节。使用负文件索引禁用任何章节复制。   -program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output) 创建具有指定的节目标题,program_num和指定添加 流(多个)给它。

2. 元数据文件-章节

2.1 提取元数据

分别提取包含及不包含章节的元数据 $ ffmpeg -i IceAge3.mp4 -f ffmetadata fmetadata.txt

2.2 编辑元数据文件

参照编辑元数据文件, 添加章节 [CHAPTER] TIMEBASE=1/1000 START=190000 # 00:03:10 - 00:06:00 | 170 END=360000 title=Chapter 02a False alarm! [CHAPTER] TIMEBASE=1/1000 START=360000 # 00:06:00 - 00:11:00 | 300 END=660000 title=Chapter 03a Playground for Junior ...

2.3 加载元数据文件

$ ffmpeg -i IceAge3.mp4 -i fmetadata.txt -map_metadata 1 -codec copy out.mp4 打开这个新的视频文件, VLC播放器下面多出了前进或后退到章节的按钮. 鼠标移动到进度栏, 就会显示出章节的节点及当前位置的标题名称.

2.4 元数据文件说明

https://ffmpeg.org/ffmpeg-formats.html#Metadata-1 FFmpeg 能够将媒体文件中的元数据转储到一个简单的 UTF-8 编码的类似 INI 的文本文件中,然后使用元数据复用器/解复用器将其加载回来。 文件格式如下:
  • 一个文件由一个标题和许多元数据标签组成,这些标签分为多个部分,每个部分占一行。
  • 标头是一个‘;FFMETADATA’字符串,后跟一个版本号(现在是 1)。
  • 元数据标签的形式为‘key=value’
  • 全局元数据紧跟在标头之后
  • 在全局元数据之后,可能会有包含每个流/每个章节(per-stream/per-chapter)元数据的部分。
  • 一个部分以大写的部分名称(即 STREAM 或 CHAPTER)在方括号(‘[’、‘]’)中开始,并以下一个部分或文件结尾结束。
  • 在chapter章节部分的开头,可能有一个可选的时基用于开始/结束值。它必须采用‘TIMEBASE=num/den’形式,其中 num 和 den 是整数。如果缺少时基,则假定开始/结束时间以纳秒为单位。
  • 接下来,chapter章节部分必须包含格式为‘START=num’、‘END=num’的章节开始和结束时间,其中 num 是一个正整数。
  • 空行和以“;”或“#”开头的行将被忽略。
  • 包含特殊字符(‘=’、‘;’、‘#’、‘\’和换行符)的元数据键或值必须用反斜杠‘\’转义。
  • 请注意,元数据中的空格被认为是标签的一部分(e.g. ‘foo = bar’)(这里的 key 是 ‘foo ’, value 是 ‘ bar’).
ffmetadata 文件可能如下所示: ;FFMETADATA1 title=bike\\shed ;this is a comment artist=FFmpeg troll team   [CHAPTER] TIMEBASE=1/1000 START=0 #chapter ends at 0:01:00 END=60000 title=chapter \#1 [STREAM] title=multi\ line 通过使用 ffmetadata muxer 和 demuxer,可以将元数据从输入文件提取到 ffmetadata 文件,然后将文件转码为带有编辑过的 ffmetadata 文件的输出文件。 使用 ffmpeg 提取 ffmetadata 文件如下: ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE 从 FFMETADATAFILE 文件重新插入编辑过的元数据信息可以通过以下方式完成: ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT

2.5 选项说明

-map_metadata[: metadata_spec_out ] infile [: metadata_spec_in ] ( output,per-metadata ) 从infile设置输出文件的元数据信息。请注意,这些是文件索引(从零开始),而不是文件名。可选的metadata_spec_in/out参数指定要复制的元数据。元数据说明符可以具有以下形式: g  全局元数据,即适用于整个文件的元数据 s[:stream_spec]  每个流元数据。stream_spec是流说明符,如流说明符章节中所述。在输入元数据说明符中,复制第一个匹配的流。在输出元数据说明符中,所有匹配的流都被复制到。 c:chapter_index  每章元数据。chapter_index是从零开始的章节索引。 p:program_index  每个程序的元数据。program_index是从零开始的节目索引。 如果省略元数据说明符,则默认为全局。 默认情况下,全局元数据从第一个输入文件复制,每个流和每个章节的元数据与流/章节一起复制。通过创建相关类型的任何映射来禁用这些默认映射。负文件索引可用于创建仅禁用自动复制的虚拟映射。 例如,将元数据从输入文件的第一个流复制到输出文件的全局元数据:   ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3 反过来,也就是将全局元数据复制到所有音频流:   ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv 请注意,简单的0在此示例中也能正常工作,因为默认情况下采用全局元数据。

3. 设置默认流

3.1 删除第一个音频流的默认属性,设置第二个音频流为默认

$ ffmpeg -i input.mkv -hide_banner   Stream #0:0: Video: h264 (High), yuv420p(tv, progressive), 1080x454 [SAR 908:909 DAR 240:101], SAR 1:1 DAR 540:227, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)   Stream #0:1(hin): Audio: vorbis, 48000 Hz, 5.1, fltp (default)   Stream #0:2(eng): Audio: vorbis, 48000 Hz, 5.1, fltp   Stream #0:3(eng): Subtitle: ass (default)   $ ffmpeg -i input.mkv -map 0 -c copy -disposition:a:0 0 -disposition:a:1 default out.mkv   $ ffprobe -hide_banner out.mkv    Stream #0:0: Video: h264 (High), yuv420p(tv, progressive), 1080x454 [SAR 908:909 DAR 240:101], SAR 1:1 DAR 540:227, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)   Stream #0:1(hin): Audio: vorbis, 48000 Hz, 5.1, fltp   Stream #0:2(eng): Audio: vorbis, 48000 Hz, 5.1, fltp (default)   Stream #0:3(eng): Subtitle: ass (default)

3.2 选项说明

http://www.ffmpeg.org/ffmpeg.html $ man ffmpeg |grep -A 10 disposition -disposition[:stream_specifier] value (output,per-stream) 设置流的处置。此选项会覆盖从输入流复制的处置。也可以通过将其设置为 0 来删除处置。 认可以下处置: default; dub 配音; original 原来的; comment 评论; lyrics 歌词; karaoke 卡拉OK; forced *; hearing_impaired 听力障碍; visual_impaired 视觉障碍; clean_effects 清洁效果; attached_pic 附加图片; captions 字幕; descriptions 说明; dependent 依赖; metadata 元数据. 例如,要使第二个音频流成为默认流:   ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv 要使第二个字幕流成为默认流并从第一个字幕流中删除默认配置:   ffmpeg -i in.mkv -c copy -disposition:s:0 0 -disposition:s:1 default out.mkv 要添加嵌入式封面/缩略图:   ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4 并非所有多路复用器都支持嵌入式缩略图,支持的多路复用器仅支持几种格式,例如 JPEG 或 PNG。  
上一篇:pytest文档43-元数据使用(pytest-metadata)


下一篇:利用vuex+mixin优化数据字典的存取方案