Подтвердить что ты не робот

Как вывести фрагментированную mp4 с помощью ffmpeg?

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

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

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

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

ffmpeg <options to output mp4> | mp4box

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

4b9b3361

Ответ 1

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

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).

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

Ответ 2

ОБНОВЛЕНИЕ: Рассмотрение фрагментированного 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

Ответ 3

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

Ответ 4

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

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

"ffmpeg -i rtmp://ip сервера: 1935/name/streamkey -vcodec copy -acodec copy -nal-hrd cbr -movflags isml + frag_keyframe + separate_moof -f ismv http://url точки входа /entry -point.isml/Streams (feed1)"