Reanudar la transcodificación de un video con ffmpeg


2

Tengo un servidor de nodo que utiliza el proceso hijo para usar ffmpeg para convertir un video a mp4. Sin embargo, si el servidor falla mientras transcodifica, me gustaría reanudar la transcodificación del archivo (similar a -C con curl)

Pensé que podría comenzar a transcodificar el archivo desde donde terminó a un archivo separado y luego concentrarme en los dos. Y mientras transcodifica el archivo desde donde terminó, funciona y el archivo que se inicia a mitad de camino se reproduce bien, cuando concatino los dos archivos con ffmpeg -i "concat: part1.mp4 | part2.mp4" -c copy ouput.mp4 Solo el primero la parte se reproducirá, y cuando llegue a la segunda parte, simplemente permanecerá en el último fotograma de la primera parte o se volverá negra según el reproductor de video. (Pero jugar part2.mp4 en sí funciona bien)

No hay ningún error durante la conversión o el concat.


Supongo que está transcodificando los archivos a H264. Tenga en cuenta que este códec utiliza la compresión entre cuadros, es decir, la mayoría de los cuadros no tienen información completa, sino solo las diferencias en comparación con el cuadro anterior; por lo tanto, no puede concatenarlos de esa manera, ya que las referencias a los fotogramas clave anteriores no coincidirán.
PaulJ

Creo que los está tratando como dos carreras separadas, así que no creo que vea ningún problema de referencia con el segundo archivo. El primer archivo podría tener problemas de referencia inesperados al final del video debido a la falla del servidor, que puede ser el problema. ¿Es el archivo final el tamaño esperado? ¿Has intentado concatenar solo los flujos de video sin audio? ¿Se puede saltar a la parte 2 sin intentar hacer una transición limpia desde la parte 1?
dstob

Lo he intentado sin audio, y he intentado saltar a la segunda parte sin pasar de la primera, pero aún no se reproduce. ¿Quizás si recorte la primera parte en un minuto o dos antes de conciliarla?
Jonathan.

Tiene 2 formas posibles: recortar part1 a lo largo del límite del fotograma clave (antes del último fotograma clave) y codificar part2 desde allí. Y segundo: parche ffmpeg para almacenar o reconstruir el estado interno del codificador, lo que probablemente no sea una solución viable debido a numerosas y numerosas dificultades técnicas.
ogurets
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.