Как вывести фрагментированный mp4 с помощью ffmpeg? - PullRequest
42 голосов
/ 23 декабря 2011

ffmpeg -i infile.avi out.mp4 выводит не фрагментированный MP4.

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

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

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

ffmpeg <options to output mp4> | mp4box

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

Ответы [ 4 ]

52 голосов
/ 16 марта 2012

Это должно сработать:

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 заставляет (по крайней мере) каждый 52-й кадр быть ключевым кадром

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

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

8 голосов
/ 04 мая 2012

ОБНОВЛЕНИЕ: Рассматривая фрагментированный 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
2 голосов
/ 19 февраля 2016

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

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

ffmpeg -i rtmp://ip of server:1935/name/streamkey -vcodec copy -acodec copy -nal-hrd cbr -movflags isml+frag_keyframe+separate_moof -f ismv http://url of entry point/entry-point.isml/Streams(feed1)
2 голосов
/ 12 января 2012

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 действительно имеет некоторые(плохо документировано) их поддержка.

...