Adicione o filtro de formato ao seu filterchain antes de usar o pad:
-vf scale,format=rgba,pad
Estou usando um comando ffmpeg simples para redimensionar e preencher imagens para caber em um quadro de 960x540. Eu gostaria que o padding fosse transparente, mas eu tenho um comportamento diferente em imagens diferentes.
Comando:
ffmpeg -y -i image.PNG -vf \
"scale=iw*min(960/iw\,540/ih):ih*min(960/iw\,540/ih),pad=960:540:(960-iw)/2:(540-ih)/2:color=#00000000" \
new.png
Parece que as capturas de tela do PNG que tirei obtêm um plano de fundo transparente como esperado. Os JPGs parecem receber o preenchimento preto, mesmo que eu os converta em PNG antes da mão.
A diferença que pareço ver é rgb24 vs rgba. Esse é o problema? Se sim, como posso alterar essa propriedade antes de fazer o preenchimento?
preenchimento preto:
Metadata:
encoder : Lavf57.25.100
Stream #0:0: Video: png, rgb24, 960x540 [SAR 1926:1925 DAR 3424:1925], q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
preenchimento transparente:
Metadata:
encoder : Lavf57.25.100
Stream #0:0: Video: png, rgba, 960x540, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Adicione o filtro de formato ao seu filterchain antes de usar o pad:
-vf scale,format=rgba,pad
Aqui está uma resposta: Se eu converter primeiro o JPG para um PNG e alterar o formato do pixel para rgba ao mesmo tempo , então eu posso fazer o preenchimento e ele será transparente. Não parece funcionar se eu tentar fazê-lo ao mesmo tempo que faço o preenchimento.
Aqui está o comando para a conversão:
ffmpeg -i image.jpg -pix_fmt rgba image.png
Tags ffmpeg