Я пытаюсь преобразовать файлы mpg (mpeg2), записанные в мифтв, в потоковые файлы mp4. Конвертация в mp4 проста, однако весь файл должен быть конвертирован в первую очередь, прежде чем его можно будет использовать. Даже используя инструменты преобразования, которые помещают «mov atom» в начало файла для быстрой потоковой передачи, требуют, чтобы весь mp4 был закодирован до того, как это произойдет.
Я прочитал в avconv docs, что «muxer mov / mp4 / ismv поддерживает фрагментацию». который может поместить «поддельный» атом mov в начало файла, а затем поместить новый элемент в каждый ключевой кадр по всему файлу, чтобы видео могло быть передано в потоковом режиме во время его перекодирования или если преобразование было прервано.
Я полагаю, что следовал инструкциям avconv ( http://libav.org/avconv.html#MOV_002fMP4_002fISMV ) о том, как преобразовать файл, но продолжаю получать ошибки, которые указывают, что кодировщик не выполняет преобразование. понять параметры. Ниже моя команда, и вывод ошибки она генерирует. Я исчерпал Google и сам искал ответы и оказался пустым, поэтому любая помощь будет принята с благодарностью.
Система работает под управлением Ubuntu 12.04x64 с версией avconv 0.8.1-4: 0.8.1-0ubuntu1.
Команда:
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 даже не поддерживался (логическое).
Мне не хватает пакета, зависимости или просто суть? Заранее спасибо.
Существует ошибка зарегистрированы с libav об этой точной проблеме. Уныло, кажется, не обращен. Я думаю, лучше считать avconv хорошим инструментом кодирования, но не хорошим инструментом инкапсуляции.
лучший способ пойти об этом состоит в том, чтобы использовать MP4Box от GPAC. Это - утилита, которая, кажется, прежде всего, касается инкапсуляции мультимедийных потоков в mp4 файлы. Это не делает en/de/transcoding, например. При установке GPAC на Ubuntu можно сказать:
MP4Box -add non-streamable.mp4 new-shiny-streamable.mp4
MP4Box по умолчанию делает mp4 файлы streamable:
С версии 0.2.4, MP4Box всегда хранит файл с 0,5 вторыми чередованиями и метаданными в начале, делая это подходящим для потоковой передачи HTTP. ( источник )
См. здесь : это - руководство ffmpeg, но это применяется одинаково хорошо к avconv.
я не знаю о создании файлов для потоковой передачи, но ошибка могла состоять в том, потому что Вы пропускаете предварительную установку и также возможно качественную установку (хотя я полагаю, что avconv использует-crf 23 в качестве значения по умолчанию, если никакая другая качественная установка не обеспечивается). Попробуйте:
avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -preset medium -c:a copy output.mp4
предварительные установки: сверхбыстрый, сверхбыстрый, veryfast, быстрее, быстро, носитель, медленный, медленнее и veryslow. Более быстрые предварительные установки дадут, Вы быстрее кодируете, но большие файлы, в то время как более медленные имеют меньшие файлы, но занимают больше времени для создания. Нет никакого качественного различия между различными предварительными установками. Существует также предварительная установка 'плацебо', но это - шутка x264 разработчиками и должно быть проигнорировано.
, Если , который не работает, Вы могли попытаться использовать:
avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -crf 20 -preset medium -c:a copy output.mp4
20 абсолютно произвольно, выберите любой crf устанавливающие работы лучше всего для Вас. Качество изображения Lower=better, но больший размер файла. Согласно тому руководству, необходимо, вероятно, использовать между 18-28.