ffmpeg: agrega 3 segundos de negro a la cabeza y cola del video

11

Digamos que tengo un video, que puede tener cualquier dimensión o códec (por ejemplo, mp4), y quiero agregar 3 segundos de cuadros negros a su cabeza.

He visto otras variantes de esta pregunta que se refieren a agregar un solo cuadro, y también respuestas que especifican el ancho y la altura del video. Sin embargo, el video puede ser de cualquier ancho y alto y no quiero cambiar esos valores. Solo agrega el negro. En un comando separado, también me gustaría agregar los segundos de negro a la cola.

No debe haber audio en la sección negra; el negro solo debe concatenarse al frente y al final. Además, me gustaría evitar volver a codificar el video si es posible, y copiar el resultado a un nuevo archivo.

Cualquier ayuda sería apreciada.

batmannutjob
fuente
¿Hay audio presente? ¿Y quieres saltarte la codificación del video principal?
Gyan
@Mulvya gracias por tu aporte. He actualizado mi pregunta.
Matt C
@MattC Puede eliminar el comentario anterior ahora. Esto necesitará múltiples comandos, a menos que vuelva a codificar. ¿Eso esta bien?
Gyan
@Mulvya sí, varios comandos son buenos. Gracias de nuevo.
Matt C

Respuestas:

12

El método básico para unir videos sin volver a codificar es usar el demuxer concat. Este dispositivo requiere que los archivos que se unen compartan ciertas propiedades, como códec, velocidad de cuadros, dimensiones de video, base de tiempo ... etc.

El primer paso es crear el segmento en blanco, que puede usarse tanto en la cabeza como en la cola.

ffmpeg -i fullvideo.mp4 -vf trim=0:3,geq=0:128:128 -af atrim=0:3,volume=0 -video_track_timescale 600 3sec.mp4

Tiene que hacer un paso de contabilidad para el video completo. Si no se hace, el video combinado probablemente se ejecutará a la velocidad incorrecta.

ffmpeg -i fullvideo.mp4 -c copy -video_track_timescale 600 full600.mp4

Luego, crea un archivo de texto.

file 3sec.mp4
file full600.mp4
file 3sec.mp4

Entonces corre

ffmpeg -f concat -i list.txt -c copy merged.mp4

Mi primer paso asume que la transmisión de video tiene el formato de píxel más común yuv420p. Lo que debería estar bien, ya que este es el único formato de píxeles compatible con reproductores web y cámaras de teléfonos inteligentes, videocámaras de consumo ... etc. Si no es así, el geqfiltro puede fallar.

También supongo, tácitamente, que el video completo no usa más cuadros de referencia que los producidos por el preajuste mediumde x264. Es una suposición segura para el 95% de los videos.

Finalmente, supongo que el video completo tiene AAC-LC como códec de audio. Se espera que sea cierto para la mayoría de los videos de teléfono / cámara / web.

Gyan
fuente