Как преобразовать mpeg2 в потоковый или фрагментированный mp4?

Я пытаюсь преобразовать файлы mpg (mpeg2), записанные в mtg2, в файлы streamable mp4. Преобразование в mp4 просто, однако, весь файл должен быть преобразован первым, прежде чем он будет использоваться. Даже при использовании инструментов преобразования, которые помещают «mov atom» в начале файла для быстрой потоковой передачи, требуется, чтобы весь mp4 был закодирован до того, как это произойдет.

Я прочитал в avconv docs, что «The mov / mp4 / ismv muxer поддерживает фрагментацию ». который может помещать «поддельный» mov atom в начале файла, а затем помещает новый в каждый ключевой кадр по всему файлу, чтобы видео можно было транслировать во время его перекодировки или прервать преобразование.

Полагаю, что я выполнил инструкции avconv ( http://libav.org/avconv.html#MOV_002fMP4_002fISMV ) о том, как преобразовать файл, но продолжайте получать ошибки, указывающие, что кодер не понять параметры. Ниже приведена моя команда, и генерируется ошибка.

Система работает ubuntu 12.04x64 с avconv версии 0.8.1-4: 0.8.1-0ubuntu1.

/ g5]

Команда:

avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -c:a copy output.mp4

Ошибка:

[mp4 muxer @ 0x36772e0] [Eval @ 0x7fffeddb69b0] Undefined constant or missing '(' in 'frag_keyframe'
[mp4 muxer @ 0x36772e0] Unable to parse option value "frag_keyframe+empty_moov"
[mp4 muxer @ 0x36772e0] Error setting option movflags to value frag_keyframe+empty_moov.
Output #0, mp4, to 'output.mp4':
    Stream #0.0: Video: libx264, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=-1--1, 90k tbn, 29.97 tbc
    Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, 384 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg2video -> libx264)
  Stream #0:1 -> #0:1 (copy)
Could not write header for output file #0 (incorrect codec parameters ?)

Я пробовал разные мультиплексоры (-f такие параметры, как h264 и т. д.) и имел другие ошибки, такие как movflag даже не поддерживается (логично).

Не хватает ли пакета, зависимости или просто точки? Спасибо заранее.

5
задан 9 May 2012 в 23:02

2 ответа

Существует ошибка , поданная с libav об этой точной проблеме. Удручающе, похоже, не рассматривается. Я думаю, что лучше всего использовать avconv в хорошем инструменте кодирования, но не в хорошем инкапсулирующем инструменте.

Лучший способ сделать это - использовать MP4Box из GPAC . Это утилита, которая, по-видимому, в первую очередь касается инкапсуляции медиапотоков в файлы mp4. Например, он не делает en / de / transcoding. Если вы устанавливаете GPAC на Ubuntu, вы можете сказать:

MP4Box -add non-streamable.mp4 new-shiny-streamable.mp4

MP4Box по умолчанию делает файлы mp4 доступными:

Начиная с версии 0.2.4, MP4Box всегда сохраняет файл с 0,5-секундным чередованием и метаданные в начале, что делает его подходящим для потоковой передачи HTTP. ( источник )

2
ответ дан 6 August 2018 в 01:21

Существует ошибка , поданная с libav об этой точной проблеме. Удручающе, похоже, не рассматривается. Я думаю, что лучше всего использовать avconv в хорошем инструменте кодирования, но не в хорошем инкапсулирующем инструменте.

Лучший способ сделать это - использовать MP4Box из GPAC . Это утилита, которая, по-видимому, в первую очередь касается инкапсуляции медиапотоков в файлы mp4. Например, он не делает en / de / transcoding. Если вы устанавливаете GPAC на Ubuntu, вы можете сказать:

MP4Box -add non-streamable.mp4 new-shiny-streamable.mp4

MP4Box по умолчанию делает файлы mp4 доступными:

Начиная с версии 0.2.4, MP4Box всегда сохраняет файл с 0,5-секундным чередованием и метаданные в начале, что делает его подходящим для потоковой передачи HTTP. ( источник )

2
ответ дан 15 August 2018 в 19:25

Другие вопросы по тегам:

Похожие вопросы: