Como adicionar meu logotipo nos primeiros 30 segundos em um vídeo com ffmpeg?

9

Estou tentando adicionar meu logotipo pelos primeiros 30 segundos em um vídeo com ffmpeg. Eu tenho um vídeo chamado d1.mp4e um logotipo chamado logo.png.

Quando o vídeo inicia, a marca d'água deve estar no canto superior esquerdo ou no canto superior direito do vídeo e desaparecer após 30 segundos.

Você pode me mostrar como adicioná-lo?

iwocan
fonte
meu nome vídeo é d1.mp4 e meu nome logotipo é logo.png, obrigado ..
iwocan
Então o que ffmpeg -i d1.mp4 -i logo.pngmostra? Por favor, basta digitar esse comando e nos mostrar qual é a saída. Ao fazer perguntas ffmpeg, sempre inclua o máximo de detalhes possível sobre o material de vídeo / áudio que você possui, o que já tentou e a saída completa da linha de comando de tudo o que tentou.
amigos estão dizendo sobre slhck
aqui está o que eu recebo na minha tela cmd. pastebin.com/bPCnhXh2
iwocan

Respostas:

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

Isso pressupõe que o logotipo seja uma única imagem estática com um canal alfa e você deseja sobrepor-se a um vídeo com uma taxa de quadros de 30000/1001 (taxa NTSC). Altere -frameratepara corresponder à sua entrada de vídeo, se for diferente. Se o seu logotipo for um vídeo, omita -framerate 30000/1001 -loop 1. Se o logotipo não tiver um canal alfa, adicione um inserindo, por exemplo, format=yuva420p,imediatamente antes fade.

Isso exibirá o logotipo na posição x, y 10,10 por 30 segundos, seguido de um segundo desbotamento.

mark4o
fonte
11
Muito interessante! Você poderia explicar por que o frameratee loopé necessário nesse caso e não para uma sobreposição simples sem filtro de desbotamento?
Rajib
Muito obrigado mark40, mas quando eu escrevo esse código, a tela do cmd não para .. Eu não sei por que, mas ele não funcionou para mim ..
iwocan
Oi LordNeckbeard, Aqui está uma captura de tela .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan
11
@iwocan Eu acredito que você pode copiar as coisas do prompt do Windows. Supus que você pesquisaria como fazê-lo, mas veja Copiar para a área de transferência no prompt de comando do Windows .
Llogan
4
@Rajib: A razão para -frameratee -looppara uma imagem estática é para que o desbotamento funcione. Se houver apenas um quadro, ele não poderá desaparecer em um intervalo de 1 segundo. Idealmente, deve ter a mesma taxa de quadros que o vídeo, para que o desbotamento seja o mais suave possível.
mark4o
19

Usando o overlayfiltro de vídeo para adicionar um logotipo a um vídeo:

insira a descrição da imagem aqui

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

Para entender esse comando, você precisa saber o que é um especificador de fluxo e ler a Introdução à filtragem FFmpeg ajudará. [0:v]refere-se ao (s) fluxo (s) de vídeo da primeira entrada ( video.mp4) e [1:v]ao fluxo de vídeo da segunda entrada ( logo.mp4). É assim que você pode dizer overlayquais entradas usar. Você pode omitir [0:v][1:v]e overlayainda funcionará, mas recomenda-se que seja explícito e não confie em padrões possivelmente desconhecidos.

Por padrão, o logotipo será colocado no canto superior esquerdo.

Usando -codec:a copyvai transmitir copiar o áudio. Isso simplesmente retira o som do áudio em vez de recodificá-lo. Pense nisso como um "copiar e colar" do áudio.

Movendo o logotipo

Este exemplo moverá o logotipo 10 pixels para a direita e 10 pixels para baixo: insira a descrição da imagem aqui

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

Este exemplo moverá o logotipo 10 pixels do lado direito e 10 pixels para baixo:

insira a descrição da imagem aqui

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_wrefere-se à largura da entrada "principal" (plano de fundo ou [0:v]) e overlay_wrefere-se à largura da entrada "sobreposição" (o logotipo ou [1:v]). Portanto, no exemplo, isso pode ser traduzido para overlay=320-90-10:10ou overlay=220:10.

Cronometrando a sobreposição

Alguns filtros podem lidar com a edição da linha do tempo, que permite usar expressões aritméticas para determinar quando um filtro deve ser aplicado. Consulte para ffmpeg -filtersver quais filtros suportam a edição da linha do tempo.

Este exemplo mostrará o logotipo até 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

Se você deseja desbotar o logotipo, consulte a resposta da mark4o .

llogan
fonte
Muito obrigado! :) Peço desculpas pelo meu inglês quebrado novamente. Este comando funciona perfeito! :)
iwocan
finalmente algo compreensível! o que devo usar para fazer com que apareça no início do que no final?
cikatomo
Eu pretendia aparecer no começo E no final? Duas vezes. Eu tentei enable = entre (t \, 0 \, 30): enable = entre (t \, 50 \, 60), mas a única última linha do tempo está em vigor
cikatomo
@cikatomo enable=not(between'(t,30,50)'). Isso mostrará a sobreposição o tempo todo, mas não a duração de 30 a 60 segundos.
Llogan 27/10/2015
Perfeito, obrigado. Apesar de seu aviso para não usar overlaytudo por si só, usei , porque a posição padrão da parte superior esquerda era o que eu queria. (Então, no final, minhas bandeiras eram simplesmente filter_complex overlay.) #
Felwithe