如何从 MP4 文件中提取元数据轨道

Posted

技术标签:

【中文标题】如何从 MP4 文件中提取元数据轨道【英文标题】:how to extract a metadata track from MP4 file 【发布时间】:2016-03-03 02:39:10 【问题描述】:

我需要从 MP4 文件中提取元数据轨道并另存为单独的文件。我看到,使用 ffmpeg 我可以提取标准轨道,如音频或视频或字幕轨道,并将其保存为新文件。例如:要保存音轨,我使用以下命令:

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac

但我需要保存一个专有的元数据轨道。任何指针都会有所帮助。

这是ffmpeg 的输出,以了解文件中存在的不同trak。特别是,我有兴趣提取对应于 Stream #0:3(eng)...

的轨道
C:\Users\rkumar\Documents\work\tools\ffmpeg\bin>ffmpeg.exe -i input.MP4
ffmpeg version N-57176-g64b3aaf Copyright (c) 2000-2013 the FFmpeg developers
built on Oct 15 2013 21:32:52 with gcc 4.8.1 (GCC)

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.MP4':
Metadata:
major_brand     : mp41
minor_version   : 538120216
compatible_brands: mp41
creation_time   : 1970-01-01 00:00:09
Duration: 00:00:10.52, start: 0.000000, bitrate: 834 kb/s

Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt709), 
854x480 [SAR 1:1 DAR 427:240], 679 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc (default)
Metadata:
creation_time   : 1970-01-01 00:00:09
handler_name    : AVC
timecode        : 00:00:13:22

Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time   : 1970-01-01 00:00:09
handler_name    : AAC
timecode        : 00:00:13:22

Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
Metadata:
creation_time   : 1970-01-01 00:00:09
handler_name    : TCD
timecode        : 00:00:13:22

Stream #0:3(eng): Data: none (ssmd / 0x646D7067), 5 kb/s (default)
Metadata:
creation_time   : 1970-01-01 00:00:09
handler_name    : MET

Stream #0:4(eng): Data: none (fdsc / 0x63736466), 10 kb/s (default)
Metadata:
creation_time   : 1970-01-01 00:00:09
handler_name    : SOS

【问题讨论】:

这里是 ffmpeg 的输出 ffmpeg 输出很长。所以只输入输出中的相关信息。流 #0:0(eng):视频:h264(主)(avc1 / 0x31637661),yuvj420p(pc,bt709),854x480 [SAR 1:1 DAR 427:240],679 kb/s,29.97 fps,29.97 tbr , 90k tbn, 59.94 tbc (默认) 元数据: handler_name : AVC Stream #0:1(eng): 音频: aac (mp4a / 0x6134706D), 48000 Hz, 立体声, fltp, 12 8 kb/s (默认) 元数据: handler_name : AAC Stream #0:3(eng): 数据: none (ssmd / 0x646D7067), 5 kb/s (default) Metadata: handler_name : MET 这不是完整的输出。您应该提供完整的输出并将其添加到您的问题中,而不是试图将其塞进评论中。 我用 ffmpeg 输出更新了我的原始任务 您想提取元数据还是只提取给定轨道上的数据?使用ffprobe -i input,您可以将其转储到一个文件中,然后通过解析输出从中提取元数据。这就是我使用 ffmpeg 提取元数据的方法。 【参考方案1】:

您可以使用ffmpeg提取元数据轨道:

ffmpeg -i input-video.avi -map 0:1 -c copy -copy_unknown -f data data.bin

这会将元数据保存在data.bin 中,这是一个二进制文件,因此需要进行一些额外的处理才能将数据取出。

【讨论】:

以上是关于如何从 MP4 文件中提取元数据轨道的主要内容,如果未能解决你的问题,请参考以下文章

如何从 BIM 360 模型中提取元数据

如何使用设计自动化 API 从上传的 AutoCAD 文件中提取元数据?

iOS:如何从磁盘上的照片文件中提取缩略图和元数据

C#MP4文件.mp4元数据标签编辑

从不完整的视频文件中提取元数据

如何从 Windowsphone 的广播电台频道获取元数据?