Eu tenho usado o seguinte crossfade de Gyan como parte do meu fluxo de trabalho por um tempo, pois achei ele superior a outras soluções de crossfade e fácil de adaptar para diferentes entradas. No entanto, agora estou tentando implementá-lo em um script Bash para fins de automação e estou tendo problemas para gerar dinamicamente a resolução na linha color=black:1384x1080
.
ffmpeg -i "$1" -i "$2" -i "$3" \
-movflags faststart \
-filter_complex \
"color=black:1384x1080:d=186.367[base]; \
[0:v]scale=-2:1080,setpts=PTS-STARTPTS[v0]; \
[2:v]format=yuva420p,fade=in:st=0:d=2:alpha=1,setpts=PTS-STARTPTS+((168)/TB)[v1]; \
[base][v0]overlay[tmp]; \
[tmp][v1]overlay,format=yuv420p[fv]; \
[1:a][2:a]acrossfade=d=2[fa]" \
-map [fv] -map [fa] -map -0:v:1 -c:v libx264 -c:a libopus -shortest "output.mp4"
Na linha abaixo, posso usar scale=-2:1080
para dimensionar a entrada e preservar sua proporção, mas usar a mesma sintaxe com o color
filtro resulta em vários erros dizendo praticamente a mesma coisa:
Não é possível analisar o valor da opção "-2x1080" como tamanho da imagem
Existe alguma maneira de automatizar essa parte do script ou não tenho escolha a não ser fazê-lo manualmente?
O filtro scale2ref pode ser usado para dimensionar uma entrada com referência a outra entrada.
Adicione scale2ref assim e redefina o SAR após a sobreposição final.