¿Cómo agregar mi logotipo durante los primeros 30 segundos en un video con ffmpeg?

9

Intento agregar mi logotipo durante los primeros 30 segundos en un video con ffmpeg. Tengo un video llamado d1.mp4y un logotipo llamado logo.png.

Cuando comienza el video, la marca de agua debe estar en la esquina superior izquierda o superior derecha del video y desaparecer después de 30 segundos.

¿Me puede mostrar cómo agregarlo?

iwocan
fuente
mi nombre de video es d1.mp4 y mi nombre de logotipo es logo.png, gracias ..
iwocan
Entonces, ¿qué ffmpeg -i d1.mp4 -i logo.pngmuestra? Simplemente ingrese ese comando y muéstrenos cuál es la salida. Cuando ffmpeghaga preguntas sobre , siempre debe incluir tantos detalles como sea posible sobre el material de video / audio que tiene, lo que ya intentó y la salida completa de la línea de comandos de todo lo que ha intentado.
slhck
esto es lo que obtengo en mi pantalla cmd. pastebin.com/bPCnhXh2
iwocan

Respuestas:

13
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

Esto supone que el logotipo es una única imagen fija con un canal alfa y desea superponerlo sobre un video con una velocidad de cuadros de 30000/1001 (velocidad NTSC). Cambie -frameratepara que coincida con su video de entrada si es diferente. Si su logotipo es un video, omítalo -framerate 30000/1001 -loop 1. Si el logotipo no tiene un canal alfa, agregue uno insertando, por ejemplo, format=yuva420p,inmediatamente antes fade.

Esto mostrará el logotipo en la posición x, y 10,10 durante 30 segundos seguido de un desvanecimiento de 1 segundo.

mark4o
fuente
1
¡Muy interesante! ¿Podría explicar por qué el frameratey loopse requieren en este caso y no por una simple superposición sin filtro de desvanecimiento?
Rajib
Muchas gracias mark40, pero cuando escribo este código, la pantalla cmd no se detiene ... No sé por qué, pero no funcionó para mí ...
iwocan
Hola LordNeckbeard, Aquí hay una captura de pantalla .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan
1
@iwocan Creo que puedes copiar cosas del indicador de Windows. Asumí que buscarías cómo hacerlo, pero mira Copiar al portapapeles desde el símbolo del sistema de Windows .
llogan
44
@Rajib: El motivo de -frameratey -looppara una imagen fija es para que el desvanecimiento funcione. Si solo hay un solo cuadro, entonces no tiene forma de desvanecerse en un intervalo de 1 segundo. Idealmente, debería ser la misma velocidad de cuadros que el video para que el desvanecimiento sea lo más suave posible.
mark4o
19

Uso del overlayfiltro de video para agregar un logotipo a un video:

ingrese la descripción de la imagen aquí

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

Para comprender este comando, necesita saber qué es un especificador de flujo y leer la Introducción al filtrado FFmpeg será de gran ayuda. [0:v]se refiere a la transmisión de video de la primera entrada ( video.mp4), y se [1:v]refiere a la transmisión de video de la segunda entrada ( logo.mp4). Así es como puede saber overlayqué entradas usar. Puede omitir [0:v][1:v], y overlayseguirá funcionando, pero se recomienda que sea explícito y no dependa de valores predeterminados posiblemente desconocidos.

Por defecto, el logotipo se colocará en la esquina superior izquierda.

El uso -codec:a copyserá transmitir copiar el audio. Esto simplemente vuelve a silenciar el audio en lugar de volver a codificarlo. Piense en ello como un "copiar y pegar" del audio.

Moviendo el logo

Este ejemplo moverá el logotipo 10 píxeles hacia la derecha y 10 píxeles hacia abajo: ingrese la descripción de la imagen aquí

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

Este ejemplo moverá el logotipo 10 píxeles desde el lado derecho y 10 píxeles hacia abajo:

ingrese la descripción de la imagen aquí

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_wse refiere al ancho de la entrada "principal" (el fondo o [0:v]), y se overlay_wrefiere al ancho de la entrada "superpuesta" (el logotipo o [1:v]). Entonces, en el ejemplo, esto se puede traducir a overlay=320-90-10:10o overlay=220:10.

Momento de la superposición

Algunos filtros pueden manejar la edición de la línea de tiempo que le permite usar expresiones aritméticas para determinar cuándo se debe aplicar un filtro. Consulte para ffmpeg -filtersver qué filtros admiten la edición de la línea de tiempo.

Este ejemplo mostrará el logotipo hasta 30 segundos:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

Si desea desvanecer el logotipo, consulte la respuesta de mark4o .

lema
fuente
¡Muchas gracias! :) Pido disculpas por mi inglés roto nuevamente. ¡Este comando funciona perfecto! :)
iwocan
finalmente algo comprensible! ¿Qué debo usar para que aparezca al principio que al final?
cikatomo
¿Quería aparecer al principio Y al final? Dos veces. He intentado enable = between (t \, 0 \, 30): enable = between (t \, 50 \, 60), pero la única última línea de tiempo está en vigor
cikatomo
@cikatomo enable=not(between'(t,30,50)'). Esto mostrará la superposición en todo momento, pero no con una duración de 30-60 segundos.
llogan
Perfecto, gracias. A pesar de su advertencia de no usarlo overlaysolo, lo hice, porque la posición predeterminada de la esquina superior izquierda era lo que quería. (Entonces, al final, mis banderas eran simplemente filter_complex overlay.)
Felwithe