web-dev-qa-db-fra.com

Comment sortir un mp4 fragmenté avec ffmpeg?

ffmpeg -i infile.avi out.mp4 sort MP4 non fragmenté.

Comment obtenir un mp4 fragmenté?

Mise à jour Un fichier mp4 fragmenté est divisé en interne en plusieurs morceaux consécutifs ou MPEG-4 fragments de film). Chaque morceau a son propre moof atom - donc il y a plusieurs atomes moof entrelacés dans le fichier au lieu d'un seul moov à la fin comme dans le cas d'un mp4 non fragmenté. Cela facilite la diffusion sur des réseaux lents où la mise en mémoire tampon est impliquée

Il existe plusieurs outils comme mp4box qui convertissent un mp4 normal en fragmenté. Malheureusement, nous ne pouvons pas utiliser quelque chose comme ça

ffmpeg <options to output mp4> | mp4box

puisque ffmpeg ne produit pas de sortie recherchée lors de la production de conteneurs mp4.

43
S B

Cela devrait faire l'affaire:

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 provoque une sortie fragmentée,
  • empty_moov entraînera une sortie à 100% fragmentée; sans cela, le premier fragment sera multiplexé sous forme de court métrage (en utilisant moov) suivi du reste du support en fragments,
  • -re est utile lors de la diffusion en direct (sortie sur le débit binaire du média), ne l'utilisez pas si vous créez un fichier,
  • -g 52 force (au moins) chaque 52ème image à être une image clé

Pour calculer un intervalle d'images clés sain, veuillez consulter les paragraphes concernant tailles de fragments dans les documents de mon serveur de streaming. - Vous pouvez également envisager d'utiliser WebM qui est une alternative gratuite au H.264 (et qui prend mieux en charge sur certaines plates-formes que le mp4 fragmenté).

Remarque importante: Le multiplexeur de FFMpeg définira le Durée dans les deux tkhd et mdhd atomes à 0xffffffff pour chaque piste. Cela provoque des problèmes dans certains lecteurs (par exemple, Quicktime ne lira pas ces fichiers). Vous devriez trouver un outil et le mettre à zéro (0x00000000).

53
vbence

MISE À JOUR: Envisager un MP4 fragmenté en tant que fichier ISMV (Smooth Streaming). La nouvelle version FFMPEG 0.10, depuis le 27 janvier 2012 est capable de multiplexer dans ce format.

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
8
Wagner Patriota

Peut-être que cela vous aidera. Dans l'exemple ci-dessous, ffmpeg prend une COPIE d'un flux RTMP, puis à l'aide de ffmpeg, il crée une sortie HTTP dans fMP4 qui peut être acceptée par IIS ou points d'entrée Azure.

Remarque: l'encodeur d'origine est réglé sur un intervalle d'images clés de 2 secondes.

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
thetommy2

ffmpeg -h (mais pas la page de manuel) contient les éléments suivants:

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.

Je ne saurais pas identifier un mp4 fragmenté si j'en voyais un, mais il semble que ffmpeg ait un support (mal documenté) pour eux.

2
blahdiblah