Программное объединение файлов mp4

У меня есть два файла MP4, скажем,

  1. mp4 (20 секунд) и
  2. mp4 (20 секунд);

оба генерируются одним и тем же приложением. Я хочу объединить их программно. Я прочитал документацию ISO / IEC 14496-12 и искал в Google несколько возможных ответов, но их всего несколько.

Из того, что я прочитал до сих пор, файлы можно объединить, если я объединю часть MDAT и объединю элементы блока STBL, такие как STTS, STSS, STSC, STSZ, STCO и т. Д.

Я пробовал использовать упомянутую выше стратегию, я редактировал часть продолжительности в MVHD и MDHD, объединил другие поля, как показано ниже, и вывел как новый файл mp4.

MDAT part of 1.mp4 -- MDAT part of 2.mp4 -- MOOV box (MOOV, MVHD, TRAK, MDIA, STBL, etc)

Внутри блока STBL я объединил элементы в два файла, использую ту же структуру для аудио и видео частей:

STTS(1.mp4) -- STTS(2.mp4) -- STSS(1.mp4) -- STSS(2.mp4) -- STSC(1.mp4) -- STSC(2.mp4) -- STSZ(1.mp4) -- STSZ(2.mp4) -- STCO(1.mp4) -- STCO(2.mp4)

Однако выходной файл нельзя воспроизвести или открыть.

Если бы я просто объединил блоки TRAK двух файлов, например:

MOOV (MVHD -- TRAK (and all other boxes of 1.mp4) -- TRAK (and all other boxes of 1.mp4))

Я могу воспроизвести выходной файл, но продолжительность остается такой же, как 1.mp4 ...

Есть предложения или конкретные примеры того, какие части мне следует отредактировать?

Спасибо.


person dazedconfused    schedule 02.04.2014    source источник


Ответы (1)


Прежде всего, чтобы программно объединить 2 файла mp4, вы должны быть уверены, что оба файла содержат одинаковые аудио и видео кодеки.

Вам необходимо проверить звуковую дорожку и видеодорожку и сравнить типы кодеков. Например, если один файловый видеокодек - H.264, а другой файловый видеокодек - H.263, то эти два файла не могут быть объединены. Аудиодорожка также может иметь разные кодеки (например, amr, aac).

Поскольку вы написали, что оба файла были созданы в одном приложении, можно предположить, что оба используют одни и те же аудио- и видеокодеки. Верно, что для их объединения данные атома mdat второго файла могут быть объединены с данными атома mdat первого файла. Затем размер mdat атома должен быть обновлен, чтобы представить сумму размеров обоих mdat атомов.

Что касается других атомов, то с ними нет простого способа справиться. Например, для атома stco, который представляет смещения фрагментов, вам нужно добавить все смещения второго файла сэмплов аудио / видео (есть атом stco на аудио / видеодорожку). Тем не менее, эти аудио / видео образцы изменили свои смещения при добавлении в первый файл, поэтому вам нужно будет рассчитать новые смещения для каждого фрагмента. Другие атомы тоже нужно будет заменить. например stsz, который содержит количество образцов и их размеры.

В атоме stss вам нужно будет обновить общее количество ключевых кадров и добавить все ключевые кадры второго файла, но каждый номер выборки второго файла необходимо будет изменить (вам нужно будет добавить к нему количество ключевых кадров). кадры первого файла).

Вам нужно просмотреть документацию ISO / IEC 14496-12 и обработать каждый атом в соответствии со спецификацией.

person Dan789    schedule 23.06.2015