1

Я использую простую команду ffmpeg, чтобы изменить размер и дополнить изображения, чтобы они поместились в рамку 960x540. Мне бы хотелось, чтобы отступы были прозрачными, но я получаю разное поведение на разных изображениях.

Команда:

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

Кажется, что сделанные мной скриншоты PNG получаются прозрачным фоном, как и ожидалось. JPG, кажется, получают черный отступ, даже если я преобразую их в PNG перед раздачей.

Кажется, я вижу разницу в rgb24 против rgba. Это проблема? Если так, как я могу изменить это свойство перед заполнением?

Черная обивка:

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

Прозрачная прокладка:

  Metadata:
    encoder         : Lavf57.25.100
    Stream #0:0: Video: png, rgba, 960x540, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc

2 ответа2

3

Добавьте фильтр формата в цепочку фильтров перед использованием pad:

-vf scale,format=rgba,pad
0

Вот один из ответов: если я сначала преобразовываю JPG в PNG и одновременно изменяю формат пикселя на rgba, тогда я могу выполнить заполнение, и оно будет прозрачным. Похоже, это не сработает, если я попытаюсь сделать это одновременно с заполнением.

Вот команда для преобразования:

ffmpeg -i image.jpg -pix_fmt rgba image.png

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .