ffmpeg - vídeo de uma única imagem com sobreposições de vídeo (múltiplas)

0

Estou usando o seguinte comando ffmpeg para gerar um vídeo (15s) a partir de uma única imagem

ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=1280:720 out.mp4

O segundo comando pega o vídeo / a e adiciona várias sobreposições de vídeo.

ffmpeg -i movie.m4v -vf "movie=movie.m4v, scale=140:-1[inner]; movie=movie.m4v, scale=100:-1[inner2]; [in][inner] overlay=70:70 [step1]; [step1][inner2] overlay=300:70 [out]" out.mp4

Alguém sabe como combinar essas duas linhas em um único comando?

    
por Misun 04.12.2014 / 20:12

1 resposta

3

Apenas vídeo

Você pode usar um filtro para toda a filtragem.

ffmpeg -loop 1 -i image0.png -i video1.m4v -i video2.m4v -filter_complex \
"[0:v]scale=1280:-2[bg]; \
 [1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
 [2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
 [bg][fg1]overlay=70:70:shortest=1[ol]; \
 [ol][fg2]overlay=300:70,format=yuv420p[v]" \
-map "[v]" -movflags +faststart output.mp4
  • O movie filtro de fonte de multimídia não é necessário.

  • setpts irá redefinir o registro de data e hora para que funcione melhor com overlay .

  • Observe o shortest=1 em um dos filtros de sobreposição. Caso contrário, a entrada da imagem fará um loop para sempre. Alternativamente, você pode usar o filtro trim na entrada da imagem.

  • A ação "fim do arquivo" de overlay pode ser alterada com eof_action .

  • O format filter define a subamostragem de chroma compatível para o QuickTime e outros jogadores de baixa qualidade. / p>

  • Quando a codificação terminar, -movflags +faststart realocará alguns dados para o início do arquivo. Isso é útil, por exemplo, se você estiver transmitindo para o MP4 e seus espectadores assistirem por download progressivo, como em um navegador.

com áudio

Assumindo que ambos os vídeos tenham áudio estéreo e você deseje combinar o áudio de cada vídeo em uma única saída estéreo.

Exemplo 1

Esteexemplocolocaráosdoiscanaisesquerdosdeentradanocanalesquerdodesaída,eambososcanaisdiretosdeentradanocanaldireitodesaída.

ffmpeg-loop1-iimage0.png-ivideo1.m4v-ivideo2.m4v-filter_complex\"[0:v]scale=1280:-2[bg]; \
 [1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
 [2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
 [bg][fg1]overlay=70:70:shortest=1[ol]; \
 [ol][fg2]overlay=300:70,format=yuv420p[v]; \
 [1:a][2:a]amerge[a]" \
-map "[v]" -map "[a]" -ac 2 -movflags +faststart output.mp4

Exemplo 2

Esteexemplocolocaráosdoiscanaisdaprimeiraentradanocanalesquerdodasaída,eambososcanaisdasegundaentradanocanaldireitodasaída.

ffmpeg-loop1-iimage0.png-ivideo1.m4v-ivideo2.m4v-filter_complex\"[0:v]scale=1280:-2[bg]; \
 [1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
 [2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
 [bg][fg1]overlay=70:70:shortest=1[ol]; \
 [ol][fg2]overlay=300:70,format=yuv420p[v]; \
 [1:a][2:a]amerge,pan=stereo|c0<c0+c2|c1<c1+c3[a]" \
-map "[v]" -map "[a]" -movflags +faststart output.mp4

Exemplo 3

Se você quiser apenas o áudio de uma entrada, basta adicionar uma opção -map ao exemplo de vídeo acima (sem necessidade de amerge e pan ):

-map 1:a -c:a copy

Veja também

por 04.12.2014 / 21:03

Tags