ffmpeg: o preenchimento nem sempre é transparente

1

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
    
por dgig 15.05.2016 / 19:44

2 respostas

3

Adicione o filtro de formato ao seu filterchain antes de usar o pad:

-vf scale,format=rgba,pad
    
por 15.05.2016 / 21:33
0

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
    
por 15.05.2016 / 20:37

Tags