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