2011-11-15 12 views
10

Estoy intentando agregar superposiciones a un video de entrada con ffmpeg que aparece un tiempo después de que se inicia el video.Superposición de video después de establecer el desfase temporal con FFmpeg

La forma más sencilla de añadir una superposición es:

ffmpeg -i in.avi -vf "movie=overlay.avi [ovl]; [in][ovl] overlay" out.avi 

Pero esto se suma la superposición de vídeo (o imagen) desde el inicio del vídeo de entrada hasta que uno de los extremos videos.

Sé cómo compensar el video de superposición usando movie=overlay.avi:seek_point=1.4, pero ¿qué pasa con un desplazamiento en el video de entrada?

Siempre pude recortar el video al punto deseado, agregar una superposición en el segundo clip, luego unir los dos, pero eso no es muy eficiente.

+0

¿Has encontrado alguna solución? –

Respuesta

6

De acuerdo con la limitada FFmpeg overlay documentation, el proceso espera que ambos vídeos tienen el mismo timestamp (por ejemplo, 0: 00: 00: 00) Valor de mantener las cosas en sincronía, y advierte si no se hace a continuación, el avi.out tendrá un offset no deseado del archivo de video overlay.avi utilizado.

Sin embargo, puede utilizar ese hecho y aprovecharlo.

Es entonces cuando concebible que si el vídeo overlay.avi tiene un comenzando timestamp con el desplazamiento deseado cuales es requiere en el video in.avi de entrada, entonces el video overlay.avi disparará a ese mismo timestamp (proporcionado por in.avi) para crear el resultado esperado para el video out.avi.

La única mala noticia es el contenedor .avino tiene marcas de tiempo, a diferencia de .mp4 o .mkv formatos de archivo que lo hacen. Tendrá que cambiar a un formato de archivo que soporta *timestamps* para que esto funcione (por ejemplo, overlay.mp4 o overlay.mkv) para la creación de la salida del archivo de vídeo final requerido.

8

Expandir en arttronics' insightful, but speculative answer, de hecho, el video se puede superponer con facilidad usando la bandera -itsoffset.

Las obras -itsoffset bandera de este modo:

-itsoffset compensados ​​ (entrada)

Ajuste el tiempo de desplazamiento de entrada en cuestión de segundos. [-] hh: mm: ss [.xxx] sintaxis también es compatible. El desplazamiento se agrega a las marcas de tiempo de los archivos de entrada.Especificar una compensación positiva significa que las transmisiones correspondientes están retrasadas por offset segundos.

(NB: A pesar de la frase "archivo de entrada s", la bandera en realidad sólo se aplica a la entrada inmediatamente después de que Tenga en cuenta también this bug sobre las compensaciones no se aplican a los flujos de audio H/T attronics...)

Así superponer con un desplazamiento es tan simple como:

ffmpeg -i bg.avi -itsoffset 2 -i over.avi -filter_complex overlay out.avi 

Esto funciona independientemente del tipo de contenedor.

+0

** - 1 ** El uso de '-itsoffset' aplicará el desplazamiento a los ** archivos **, no solo al archivo' overlay.avi'. Referencia [** ffmpeg Ticket 1349 itsoffset no funciona para el segundo archivo de entrada **] (http://ffmpeg.org/trac/ffmpeg/ticket/1349). Además, el extracto que publicó confirmó que ambos ** archivos **: *** las marcas de tiempo de los archivos de entrada *** – arttronics

+0

@attronics No, eso está mal. Los documentos están mal escritos, pero el ticket de error que mencionas es solo para transmisiones de audio y, lo que es más importante, ** esto funciona **. Ejecutar el comando dado con compilaciones actuales de FFmpeg tiene exactamente el efecto deseado de retrasar la superposición. – blahdiblah

+0

Revise su respuesta para incluir los documentos que son engañosos, p. editar, entonces yo puedo entonces Upvote. Gracias por aclararlo. ¡Aclamaciones! – arttronics

Cuestiones relacionadas