2011-12-23 5 views
33

ffmpeg -i infile.avi out.mp4 выходы без фрагментации MP4.Как вывести фрагментированную mp4 с помощью ffmpeg?

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

Обновления Фрагментированный MP4 файл внутренне разделен на несколько спины к спине кусков или MPEG-4 фрагментов фильма. Каждый кусок имеет свой собственный обманный атом - так что в файле есть несколько атомов-обманов, а не один moov в конце, как в случае безфрагментального mp4. Это облегчает поток по медленным сетям, где задействована буферизация

Существует несколько инструментов, таких как mp4box, которые преобразуют нормальный mp4 в фрагментированный. К сожалению, мы не можем использовать что-то вроде этого

ffmpeg <options to output mp4> | mp4box 

так FFmpeg не производит вывод доступной для поиска при производстве mp4 контейнеров.

+2

Возможно, вы захотите добавить некоторую информацию о том, что означает« фрагментированный mp4 », чтобы сделать эту проблему более доступной для людей, которые могли бы хорошо знать ffmpeg, но не фрагментировали mp4s. – blahdiblah

+0

Хороший вопрос! Я отредактировал мой вопрос –

+0

@SaptarshiBiswas вы решаете эту проблему без использования mp3box? можете ли вы поделиться решением? спасибо – abrahab

ответ

40

Это должно сделать трюк:

ffmpeg -re -i infile.ext -g 52 \ 
-strict experimental -acodec aac -ab 64k -vcodec libx264 -vb 448k \ 
-f mp4 -movflags frag_keyframe+empty_moov \ 
output.mp4 
  • frag_keyframe, вызывает фрагментирован выход,
  • empty_moov вызовет выход на 100% фрагментирован; без этого первый фрагмент будет мультиплексироваться в виде короткого фильма (с использованием moov), за которым следует остальная часть носителя во фрагментах,
  • -re полезен, когда потоковая передача в реальном времени (выход на битрейт носителя) не используется, если вы создаете файл,
  • -g 52 силы (по крайней мере) каждый пятьдесят второй кадр был ключевой кадр

чтобы вычислить здоровый интервал ключевых кадров, см абзацы о fragment sizes в документации моего потокового сервера. - Вы также можете использовать WebM, который является бесплатной альтернативой H.264 (и имеет лучшую поддержку на некоторых платформах, чем фрагментированный mp4).

Важное примечание: мультплексор FFmpeg будет установить Продолжительность в обоих tkhd и mdhd атомов 0xffffffff для каждого трека. Это вызывает проблемы у некоторых игроков (например, Quicktime не будет воспроизводить такие файлы). Вы должны найти инструмент и изменить его на ноль (0x00000000).

+3

выглядит как -movflags + faststart options недавно был добавлен в FFmpeg ... – rogerdpack

+1

Если у вас возникли проблемы с указанной выше командой, вам может потребоваться переустановка ffmpeg. Для установки через варево со всеми опциями: ** brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc - -with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-opcore- tools ** –

+1

Возможно ли передать поток в HTML5 вместо сохранения его в файл? С протоколом http? – astralmaster

2

ffmpeg -h (но не на страницу человека) имеет следующее:

mp4 muxer AVOptions: 
-movflags   <flags> E.... MOV muxer flags 
    rtphint     E.... Add RTP hint tracks 
-moov_size   <int> E.... maximum moov size so it can be placed at the 
           beginning 
-frag_size   <int> E.... maximum fragment size 
-frag_duration  <int> E.... maximum fragment duration 
-rtpflags   <flags> E.... RTP muxer flags 
    latm     E.... Use MP4A-LATM packetization instead of 
           MPEG4-GENERIC for AAC 
-skip_iods   <int> E.... Skip writing iods atom. 
-iods_audio_profile <int> E.... iods audio profile atom. 
-iods_video_profile <int> E.... iods video profile atom. 

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

+2

Re: «Я бы не знал, как идентифицировать фрагментированный mp4, если я видел один» :), они выглядят как alot. :) Существует атом «mvex» рядом с «moov», чтобы вы знали, что он будет фрагментирован. На разных субатомах треков будет мало информации о фактических данных. Там будут пары «moof» mdat верхнего уровня, где находятся фактические данные. В конце может быть атом «mfra». –

+0

'mp4box -info file 'будет указывать, является ли MP4 фрагментированным. – Mulvya

4

UPDATE: Рассмотрение фрагментированного MP4 как файла ISMV (Smooth Streaming). Новая версия FFMPEG 0.10, начиная с 27 января 2012 года, способна мультиплексировать в этот формат.

ismv muxer AVOptions: 
-movflags   <flags> E.... MOV muxer flags 
    rtphint     E.... Add RTP hint tracks 
    empty_moov    E.... Make the initial moov atom empty (not supported by QuickTime) 
    frag_keyframe   E.... Fragment at video keyframes 
    separate_moof   E.... Write separate moof/mdat atoms for each track 
    frag_custom    E.... Flush fragments on caller requests 
    isml     E.... Create a live smooth streaming feed (for pushing to a publishing point) 
-moov_size   <int> E.... maximum moov size so it can be placed at the begin 
-rtpflags   <flags> E.... RTP muxer flags 
    latm     E.... Use MP4A-LATM packetization instead of MPEG4-GENERIC for AAC 
    rfc2190     E.... Use RFC 2190 packetization instead of RFC 4629 for H.263 
    skip_rtcp    E.... Don't send RTCP sender reports 
-skip_iods   <int> E.... Skip writing iods atom. 
-iods_audio_profile <int> E.... iods audio profile atom. 
-iods_video_profile <int> E.... iods video profile atom. 
-frag_duration  <int> E.... Maximum fragment duration 
-min_frag_duration <int> E.... Minimum fragment duration 
-frag_size   <int> E.... Maximum fragment size 
-ism_lookahead  <int> E.... Number of lookahead entries for ISM files 
0

Возможно, это поможет. В приведенном ниже примере ffmpeg берет COPY канала RTMP, а затем использует ffmpeg, он создает HTTP-выход в fMP4, который может быть принят точками входа IIS или Azure.

Примечание: в исходном кодере установлен интервал между ключевыми кадрами 2 секунды.

"FFmpeg -i RTMP: // IP-сервера: 1935/имя/streamkey -vcodec копия -acodec копия -Nal-хрд ЦБР -movflags isml + frag_keyframe + separate_moof -f ismv http://url точки входа/точка входа .isml/Streams (feed1) "

Смежные вопросы