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 World1.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 : ------.com1.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, fltp1.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.txt2.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’).
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。标签:章节,ffmpeg,title,mkv,metadata,out 来源: https://www.cnblogs.com/sztom/p/14952650.html