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 esbackground.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á tomandovideo1.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 comoscale=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 usevideo2.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]
Usebackground.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 porquebackground.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ónoverlay_w
yoverlay_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