tutorial superponer sobre poner maker logo imagenes imagen español editar davinci cortar con como agregar video ffmpeg video-processing video-encoding command-line-tool

sobre - superponer imagen en video movie maker



¿Superponiendo dos videos a una imagen estática? (1)

Los gráficos de filtro complejos en ffmpeg pueden parecer complicados al principio, pero tienen sentido una vez que lo pruebes varias veces. Debe estar familiarizado con la sintaxis del filtro. Comience por leer la Introducción de filtrado y la Descripción del filtro . No tiene que entenderlo por completo, pero le ayudará a comprender el siguiente ejemplo.

Ejemplo

Utilice el filtro de scale video para escalar (cambiar el tamaño) de las entradas a un tamaño específico, y luego use el filtro de overlay video para colocar los videos sobre las imágenes estáticas.

ffmpeg -loop 1 -i background.png -i video1.mp4 -i video2.mp4 -filter_complex / "[1:v]scale=(iw/2)-20:-1[a]; / [2:v]scale=(iw/2)-20:-1[b]; / [0:v][a]overlay=10:(main_h/2)-(overlay_h/2):shortest=1[c]; / [c][b]overlay=main_w-overlay_w-10:(main_h/2)-(overlay_h/2)[video]" / -map "[video]" output.mkv

Lo que esto significa

Opciones sin filtro:

  • -loop 1 Continuamente -loop 1 la siguiente entrada que es background.png .

  • background.png La imagen de fondo. El especificador de flujo es [0:v] Tiene un tamaño de 1280x720.

  • video1.mp4 Esta primera entrada de video (Big Buck Bunny en la imagen de ejemplo). El especificador de flujo es [1:v] . Tiene un tamaño de 640x360.

  • video2.mp4 Esta segunda entrada de video (las varmints en la imagen de ejemplo). El especificador de flujo es [2:v] . Tiene un tamaño de 640x360.

Opciones de filtrado

  • -filter_complex La opción para iniciar el filtro de gráfico complejo.

  • [1:v]scale=(iw/2)-20:-1[a] Esto está tomando video1.mp4 , referido como [1:v] , y escalando. iw es un alias para el ancho de entrada , y en este caso es un valor de 640. Dividimos a la mitad y restamos 20 píxeles adicionales como relleno, por lo que habrá espacio alrededor de cada video cuando esté superpuesto. -1 significa calcular automáticamente un valor que preservará el aspecto. Por supuesto, puede omitir la fantasía y proporcionar manualmente valores como scale=320:240 . Luego use una etiqueta de enlace de salida llamada [a] para que podamos referirnos a esta salida más tarde.

  • [2:v]scale=(iw/2)-20:-1[b] Igual que arriba, pero use video2.mp4 como entrada y nombre la etiqueta del enlace de salida como [b] .

  • [0:v][a]overlay=10:(main_h/2)-(overlay_h/2):shortest=1[c] Use background.png como primera entrada de superposición, y use los resultados de nuestro primer filtro de escala, referido a como [a] , como la segunda entrada de superposición. Coloque [a] sobre [0:v] . main_h es un alias para la altura principal que hace referencia a la altura de entrada de fondo ( [0:v] ). overlay_h es un alias para la altura de superposición y se refiere a la altura del primer plano ( [a] ). Este ejemplo colocará Big Buck Bunny en el lado izquierdo. shortest=1 obligará a la salida a terminar cuando finalice la entrada más corta; de lo contrario, se repetirá siempre porque background.png está en bucle. Nombre los resultados de este filtro [c] .

  • [c][b]overlay=overlay_w*2:overlay_h:shortest=1[video] Use [c] como la primera entrada de superposición y [b] como la segunda entrada de superposición. Utilizando los parámetros de superposición overlay_w y overlay_h (overlay input width and height). Este ejemplo colocará las varmints verminy en el lado derecho. Etiquete la salida como [video] .

  • -map "[video]" mapea la salida del filtro al archivo de salida. La etiqueta de enlace [video] al final del gráfico de filtro no es necesariamente obligatoria, pero se recomienda que sea explícita con el mapeo.

Audio

Tener dos transmisiones de audio separadas

De manera predeterminada, solo el primer canal de audio de entrada encontrado se usará en la salida como se define en Selección de secuencia . Puede usar la opción -map para agregar una pista de audio adicional desde la segunda entrada de video (la salida tendrá dos transmisiones de audio). Este ejemplo copiará en secuencia el audio en lugar de volver a codificar:

ffmpeg -loop 1 -i background.png -i video1.mp4 -i video2.mp4 -filter_complex / "[1:v]scale=(iw/2)-20:-1[a]; / [2:v]scale=(iw/2)-20:-1[b]; / [0:v][a]overlay=10:(main_h/2)-(overlay_h/2):shortest=1[c]; / [c][b]overlay=main_w-overlay_w-10:(main_h/2)-(overlay_h/2)[video]" / -map "[video]" -map 1:a -map 2:a -codec:a copy output.mkv

Combina ambas transmisiones de audio

O combine ambas entradas de audio en una usando los filtros de audio de pan y pan (suponiendo que ambas entradas son estéreo y desea salida estéreo):

ffmpeg -loop 1 -i background.png -i video1.mp4 -i video2.mp4 -filter_complex / "[1:v]scale=(iw/2)-20:-1[a]; / [2:v]scale=(iw/2)-20:-1[b]; / [0:v][a]overlay=10:(main_h/2)-(overlay_h/2):shortest=1[c]; / [c][b]overlay=main_w-overlay_w-10:(main_h/2)-(overlay_h/2)[video]" / [1:a][2:a]amerge,pan=stereo:c0<c0+c2:c1<c1+c3[audio]" / -map "[video]" -map "[audio]" output.mkv

Ver también

Tengo dos videos que me gustaría combinar en un solo video, en el que ambos se ubicarían sobre una imagen de fondo estática. (Piense en algo como esto .) Mis requisitos son que el software que uso sea gratuito, que se ejecute en OSX y que no tenga que volver a codificar mis videos una cantidad excesiva de veces. También me gustaría poder realizar esta operación desde la línea de comando o mediante script, ya que lo haré mucho. (Pero esto no es estrictamente necesario.)

Intenté jugar con ffmpeg durante un par de horas, pero no parece muy adecuado para el postprocesamiento. Podría potencialmente piratear algo a través de la función de superposición, pero hasta ahora no he descubierto cómo hacerlo, además de convertir la imagen en un video (¡lo que requiere 2 veces más tiempo que la duración de mis videos!) y luego superponiendo los dos videos en otro paso de renderizado.

¿Algun consejo? ¡Gracias!

Actualizar:

Gracias a la ayuda de LordNeckbeard, ¡pude lograr el resultado deseado con una sola llamada ffmpeg! Desafortunadamente, la codificación es bastante lenta, demorando 6 segundos para codificar 1 segundo de video. Creo que esto es causado por la imagen de fondo. ¿Alguna sugerencia para acelerar la codificación? Aquí está el registro de ffmpeg:

MacBook-Pro:Video archagon$ ffmpeg -loop 1 -i underlay.png -i test-slide-video-short.flv -i test-speaker-video-short.flv -filter_complex "[1:0]scale=400:-1[a];[2:0]scale=320:-1[b];[0:0][a]overlay=0:0[c];[c][b]overlay=0:0" -shortest -t 5 -an output.mp4 ffmpeg version 1.0 Copyright (c) 2000-2012 the FFmpeg developers built on Nov 14 2012 16:18:58 with Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn) configuration: --prefix=/opt/local --enable-swscale --enable-avfilter --enable-libmp3lame --enable-libvorbis --enable-libopus --enable-libtheora --enable-libschroedinger --enable-libopenjpeg --enable-libmodplug --enable-libvpx --enable-libspeex --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/clang --arch=x86_64 --enable-yasm --enable-gpl --enable-postproc --enable-libx264 --enable-libxvid libavutil 51. 73.101 / 51. 73.101 libavcodec 54. 59.100 / 54. 59.100 libavformat 54. 29.104 / 54. 29.104 libavdevice 54. 2.101 / 54. 2.101 libavfilter 3. 17.100 / 3. 17.100 libswscale 2. 1.101 / 2. 1.101 libswresample 0. 15.100 / 0. 15.100 libpostproc 52. 0.100 / 52. 0.100 Input #0, image2, from ''underlay.png'': Duration: 00:00:00.04, start: 0.000000, bitrate: N/A Stream #0:0: Video: png, rgb24, 1024x768, 25 fps, 25 tbr, 25 tbn, 25 tbc Input #1, flv, from ''test-slide-video-short.flv'': Metadata: author : copyright : description : keywords : rating : title : presetname : Custom videodevice : VGA2USB Pro V3U30343 videokeyframe_frequency: 5 canSeekToEnd : false createdby : FMS 3.5 creationdate : Mon Aug 16 16:35:34 2010 encoder : Lavf54.29.104 Duration: 00:50:32.75, start: 0.000000, bitrate: 90 kb/s Stream #1:0: Video: vp6f, yuv420p, 640x480, 153 kb/s, 8 tbr, 1k tbn, 1k tbc Input #2, flv, from ''test-speaker-video-short.flv'': Metadata: author : copyright : description : keywords : rating : title : presetname : Custom videodevice : Microsoft DV Camera and VCR videokeyframe_frequency: 5 audiodevice : Microsoft DV Camera and VCR audiochannels : 1 audioinputvolume: 75 canSeekToEnd : false createdby : FMS 3.5 creationdate : Mon Aug 16 16:35:34 2010 encoder : Lavf54.29.104 Duration: 00:50:38.05, start: 0.000000, bitrate: 238 kb/s Stream #2:0: Video: vp6f, yuv420p, 320x240, 204 kb/s, 25 tbr, 1k tbn, 1k tbc Stream #2:1: Audio: mp3, 22050 Hz, mono, s16, 32 kb/s File ''output.mp4'' already exists. Overwrite ? [y/N] y using cpu capabilities: none! [libx264 @ 0x7fa84c02f200] profile High, level 3.1 [libx264 @ 0x7fa84c02f200] 264 - core 119 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00 Output #0, mp4, to ''output.mp4'': Metadata: encoder : Lavf54.29.104 Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1024x768, q=-1--1, 25 tbn, 25 tbc Stream mapping: Stream #0:0 (png) -> overlay:main Stream #1:0 (vp6f) -> scale Stream #2:0 (vp6f) -> scale overlay -> Stream #0:0 (libx264) Press [q] to stop, [?] for help

Actualización 2:

¡Funciona! Un cambio importante fue mover la entrada underlay.png al final de la lista de entrada. Esto incrementó el rendimiento sustancialmente. Esta es mi última llamada ffmpeg. (Los mapas al final no son necesarios para esta disposición particular, pero a veces tengo algunas entradas de audio adicionales que quiero asignar a mi salida).

ffmpeg -i VideoOne.flv -i VideoTwo.flv -loop 1 -i Underlay.png -filter_complex "[2:0] [0:0] overlay=20:main_h/2-overlay_h/2 [overlay];[overlay] [1:0] overlay=main_w-overlay_w-20:main_h/2-overlay_h/2 [output]" -map [output]:v -map 0:a OutputVideo.m4v