quality high h264 convert ffmpeg mp4

high - ¿Cómo dar salida a mp4 fragmentado con ffmpeg?



ffmpeg quality parameters (4)

ffmpeg -i infile.avi out.mp4 genera MP4 no fragmentado.

¿Cómo obtengo el mp4 fragmentado?

Actualización Un archivo fragmentado mp4 se divide internamente en varios fragmentos consecutivos o fragmentos de película MPEG-4. Cada fragmento tiene su propio átomo moof, por lo que hay varios moof átomos intercalados en el archivo en lugar de un único moov al final como en el caso de un mp4 no fragmentado. Esto hace que sea más fácil de transmitir en redes lentas donde está involucrado el almacenamiento en búfer

Hay varias herramientas como mp4box que convierten un mp4 normal en uno fragmentado. Desafortunadamente no podemos usar algo como esto

ffmpeg <options to output mp4> | mp4box

ya que ffmpeg no produce salida buscable mientras produce contenedores mp4.


ACTUALIZACIÓN: considerando un archivo MP4 fragmentado como ISMV (Smooth Streaming). La nueva versión FFMPEG 0.10, desde el 27 de enero de 2012, es capaz de cambiar a este formato.

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


Esto debería funcionar:

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 causa salida fragmentada
  • empty_moov hará que la salida esté 100% fragmentada; sin esto, el primer fragmento se muxará como una película corta (usando moov ) seguido por el resto de los medios, en fragmentos,
  • -re es útil cuando la transmisión en vivo (salida en velocidad de bits del medio), no lo use si está creando un archivo,
  • -g 52 obliga (al menos) cada fotograma 52 a ser un fotograma clave

Para calcular un intervalo de fotograma clave saludable, consulte los párrafos sobre tamaños de fragmentos en los documentos de mi servidor de transmisión. - También puede considerar usar WebM, que es una alternativa gratuita a H.264 (y tiene mejor soporte en algunas plataformas que en mp4 fragmentado).

Nota importante: el muxer de FFMpeg establecerá la Duración en átomos de tkhd y mdhd en 0xffffffff para cada pista. Esto causa problemas en algunos jugadores (por ejemplo, Quicktime no reproducirá dichos archivos). Debería encontrar una herramienta y cambiarla a cero (0x00000000).


Tal vez esto ayude. En el siguiente ejemplo, ffmpeg toma una COPIA de un feed RTMP y luego usa ffmpeg, crea una salida HTTP en fMP4 que puede ser aceptada por los puntos de entrada de IIS o Azure.

Nota: el codificador original está configurado en un intervalo de fotograma clave de 2 segundos.

"ffmpeg -i rtmp: // ip del servidor: 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 (pero no la página man) tiene lo siguiente:

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.

No sabría cómo identificar un mp4 fragmentado si lo viera, pero parece que ffmpeg sí tiene algún soporte (poco documentado) para ellos.