ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ffmpeg-metadata

2021-06-30 01:00:45  阅读:289  来源: 互联网

标签:章节 ffmpeg title mkv metadata out


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。  

标签:章节,ffmpeg,title,mkv,metadata,out
来源: https://www.cnblogs.com/sztom/p/14952650.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有