Respuestas:
Esta es una respuesta al último comentario de usted @abrahab.
No necesita mp4box
un archivo para poder transmitirlo de forma pseudo a través de nginx. El módulo de transmisión MP4 lo cuida independientemente del posicionamiento de los átomos de moov ( mp4box
desplaza el átomo de moov al comienzo del archivo).
Ahora para el error del servidor 500, ¿está usando la opción "-frag" con mp4box? El módulo de transmisión MP4 no puede leer archivos MP4 fragmentados. Un buen uso de mp4box
pseudo streaming es intercalar los videos para una mejor búsqueda. El desplazamiento del átomo de Moov es una ventaja adicional.
Siempre hago esto en mp4box
un archivo codificado con FFmpeg
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
Esto también intercalará el archivo MP4 en 500 milisegundos de fragmentos por defecto.
En general, desea crear video x264 dentro de un contenedor MP4. Esta opción es compatible básicamente con cualquier dispositivo y navegador.
Lo siguiente debería ser suficiente. Asegúrese de reemplazar el nombre de entrada y las opciones de CRF. Este último establece la calidad, donde los valores razonables oscilan entre 19 y 25: menor significa mejor calidad, pero también mayor tasa de bits:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
También puede usar Handbrake para codificar si le gusta la forma de GUI.
faststart
opciónAhora, lo que debe hacer es mover el átomo MOOV del contenedor MP4 al principio. Este átomo (en esencia, una unidad de datos en el contenedor MP4) contendrá metadatos importantes sobre las transmisiones de video / audio. -movflags faststart
debería hacer exactamente eso.
Si su versión de FFmpeg no tiene esta opción, considere actualizar. Si no puede actualizar, puede lograr lo mismo con cualquiera de las siguientes herramientas:
QTIndexSwapper , una aplicación de Adobe AIR
MP4Box , de código libre y abierto, ejecuta un comando similar al siguiente, donde puede cambiar el intervalo (aquí, 500):
mp4box -inter 500 input.mp4
qt-faststart en Python , que funciona en todas partes donde está instalado Python.
qtfaststart input.mp4
Eso es todo.
Ahora, por supuesto, para la transmisión, es posible que desee restringir la tasa de bits para mantenerse dentro de ciertos límites. Puede leer más sobre eso en mi publicación de blog sobre métodos de control de velocidad .
Por ejemplo, al agregar -maxrate 2M -bufsize 2M
a las opciones de codificación, limita la codificación a 2 Mbit / s, que puede ser suficiente para video de 720p. La tasa de bits requerida dependerá, por supuesto, de lo complejo que sea el contenido. Esto lleva algo de prueba y error.
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
entonces mp4box
y mp4 no puede buscar y nginx reporta el 500 internal server error
parámetro de inicio más que 0
. cuando el video está codificado sin -vcoded libx264
(codificador mp4 predeterminado) todo el archivo de trabajo (pero calidad! enfermo!) :( (lo siento, ahora, no se permite votar tu respuesta)
-movflags faststart
exactamente lo que necesitaba
Simplemente puede convertir un AVI o MP4 no transmisible, también sin volver a codificar todo, haciendo esto:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
No hay necesidad de volver a codificar nada, porque solo se debe mover el átomo de moov.
Puedes probar esto con ffmpeg:
ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"
-acodec pcm_s16le
(error:) Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
. Parece que también falta una buena razón, como un borrador de IETF, de por qué elegir exactamente estos parámetros.
MP4Box -isma -inter 500 Myvideo.mp4