как извлечь дорожку метаданных из файла MP4

Мне нужно извлечь дорожку метаданных из файла MP4 и сохранить как отдельный файл. Я вижу, что с помощью ffmpeg я могу извлекать стандартные треки, такие как аудио, видео или субтитры, и сохранять их как новый файл. Например: для сохранения звуковой дорожки я использую следующую команду:

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

Но мне нужно сохранить собственный трек метаданных. Любые указатели будут полезны.

Вот вывод ffmpeg, чтобы узнать о различных трактах, которые присутствуют в файле. В частности, меня интересует извлечение трека, соответствующего 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

person ravi    schedule 03.03.2016    source источник
comment
вот вывод ffmpeg   -  person ravi    schedule 03.03.2016
comment
Вывод ffmpeg длинный. поэтому введите только соответствующую информацию из вывода. Поток № 0: 0 (eng): Видео: h264 (Main) (avc1 / 0x31637661), yuvj420p (pc, bt709), 854x480 [SAR 1: 1 DAR 427: 240], 679 кб / с, 29,97 кадра в секунду, 29,97 tbr , 90k tbn, 59,94 tbc (по умолчанию) Метаданные: handler_name: AVC Stream # 0: 1 (eng): Аудио: aac (mp4a / 0x6134706D), 48000 Гц, стерео, fltp, 12 8 кбит / с (по умолчанию) Метаданные: handler_name : AAC Stream # 0: 3 (eng): Data: none (ssmd / 0x646D7067), 5 кбит / с (по умолчанию) Метаданные: handler_name: MET   -  person ravi    schedule 03.03.2016
comment
Это не полный результат. Вы должны предоставить полный вывод и добавить его к своему вопросу, вместо того, чтобы пытаться втиснуть его в комментарий.   -  person llogan    schedule 03.03.2016
comment
Я обновил свой исходный квестин с выводом ffmpeg   -  person ravi    schedule 03.03.2016
comment
Вы хотите извлечь метаданные или просто данные по определенной дорожке? Используя ffprobe -i input, вы можете выгрузить это в файл, а затем извлечь из него метаданные, проанализировав вывод. Это был бы мой подход к извлечению метаданных с помощью ffmpeg.   -  person Mike F    schedule 03.03.2016
comment
Я действительно хочу извлечь данные из дорожки метаданных. Если возможно, пожалуйста, подробно расскажите, как использовать для этого ffprobe.   -  person ravi    schedule 03.03.2016
comment
@ravi метаданные хранятся в атоме moov в байтах MP4. Просто откройте файл в шестнадцатеричном редакторе и найдите текст moov, от его позиции вернитесь на 4 байта назад и прочтите целочисленное значение этих 4 байтов. Это 4-байтовое число указывает общий размер байтов метаданных. Теперь вы можете копировать с позиции начала moov до этого общего размера - 4. Шестнадцатеричный редактор сообщит вам, сколько байтов вы выбрали, так что продолжайте до тех пор, пока не будет достаточно, а затем скопируйте и вставьте в новый шестнадцатеричный документ. Сохраните это как файл (например, myMetadata.bin).   -  person VC.One    schedule 05.03.2016
comment
@ravi, файл состоит из байтов, так что подтвердите, что вы имеете в виду, говоря о сохранении метаданных как новый файл? Вы хотите извлечь байты метаданных (игнорировать байты аудио и видео)? Или вы хотите, чтобы записи метаданных были в виде текста? Это означает, что с потоком 0: 3 вы хотите, чтобы текст created_time: 1970-01-01 00:00:09 и т. Д. Без копирования и вставки? Подтвердите, иначе никто не сможет ответить на ваш вопрос ...   -  person VC.One    schedule 06.03.2016
comment
Я хочу извлечь байты метаданных и сохранить их в новый файл. Я хочу игнорировать байты аудио и видео. Надеюсь, теперь все ясно. Если остались вопросы / сомнения, дайте мне знать.   -  person ravi    schedule 08.03.2016


Ответы (1)


Вы можете извлечь дорожку метаданных с помощью ffmpeg:

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

Это сохранит метаданные в data.bin, который является двоичным файлом, поэтому для их вывода потребуется дополнительная обработка.

person m_____z    schedule 30.08.2019