¿Puedo combinar copiar y codificar en una sola operación para obtener un corte rápido y preciso?

¿Puedo combinar copiar y codificar en una sola operación para obtener un corte rápido y preciso?

Probé muchos cortadores de video con tecnología ffmpeg y todos tienen el mismo problema: el corte rápido no es preciso sin volver a codificar. Probé muchas soluciones en mi propia aplicación, pero ninguna funciona como necesito. Entonces, tengo esta idea para solucionar este problema: supongamos que quiero generar un nuevo video que no contenga el mandril que comienza en t1 a t2. Quiero que ffmpeg haga esto para dividir el segmento (t1, t2) en 3 partes:

  1. una parte (t1-x, t1+y), que es un bloque codificado completo que debe volverse a codificar para poder copiar la parte (t1, y) con precisión.
  2. una parte (t2-z, t3+w), que es un bloque codificado completo que debe volverse a codificar para poder copiar la parte (z, t2) con precisión.
  3. una parte intermedia (y, z) que contiene bloques codificados completos, donde se puede copiar tal cual.

Luego une las 3 partes resultantes de los pasos anteriores. Tenga en cuenta que se espera que las dos primeras partes sean pequeñas (y una de ellas o ambas pueden tener una longitud cero), por lo que el proceso de recodificación será rápido. Esto nos permitirá tener cortes exactos con una operación ligeramente más lenta pero aún así súper rápida que recodificar el video completo. Puede ser incluso más rápido si podemos hacer múltiples cortes con un comando, de modo que atravesemos los fotogramas una vez.

Entonces, ¿puedo hacer eso hoy con ffmpeg? ¿O puede ffmpeg admitirlo pronto? Espero que alguien pueda aplicar esto y decirnos cómo, o mencionar a algunos miembros del equipo de ffmpeg, o entregárselo de todos modos.

Respuesta1

Ffmpeg admite el corte de fotogramas clave utilizando el ssparámetro, pero su posición es de suma importancia.

Ejemplo de búsqueda de fotogramas clave:

ffmpeg -ss 30 -i input_vid.mp4 -t 60 -c copy output_clip.mp4

Ejemplo de búsqueda de todos los fotogramas:

ffmpeg -i input_vid.mp4 -ss 30 -t 60 -c copy output_clip.mp4

El -copyparámetro aquí es importante ya que causa Copia de secuencia. En algunos casos, necesitarás agregar el parámetro -noaccurate_seek.

Para más información, ver:


La mayoría de los vídeos utilizan códecs que realizan compresión temporal, por lo que un punto de corte específico puede depender de fotogramas antes (y después) de ese punto de corte para decodificarse correctamente. Entonces, cuando usas ffmpeg para recortar videos con el copymodo, ffmpeg debe incluir todos los fotogramas antes y después del segmento recortado que son necesarios para decodificar el segmento correctamente. Esto puede dar como resultado un segmento negro inicial.

Para seguir usando el modo de copia pero evitando el segmento negro, debe configurar el interruptor -avoid_negative_ts.

información relacionada