Мы пытаемся объединить ffmpeg4 с Pyglet.
Все идет очень хорошо, но у нас есть одна проблема:
Если файл VP9 (или VP8) создается с использованием ffmpeg4, из файлов png с альфа-версией мы получаем видеофайл (webm) с внутренним альфа-каналом.
ffmpeg -i image_seq%03d.png -qmin 0 -qmax 50 -crf 5 -b:v 1M output.webm
Образцы веб-видео с альфа-версией можно найти на этой странице: https://simpl.info/videoalpha/
Однако при воспроизведении мы не получим альфу, если не переопределим кодек для libvpx. (такое же поведение можно продемонстрировать в CLI-версии ffplay). Мы avutil, avcodec, etc
. Д.
Вопрос: Как правильно определить (в коде), что поток VP8 или VP9 имеет альфа-компонент? (Таким образом, мы можем загрузить его и получить к нему доступ через AVFrame()
для использования в качестве текстуры RGBA.)
Более конкретно:
Мы получаем FormatContext из файла, используя AVFormatContext
и поток AVStream
из этого FormatContext.
Затем из AVStream
мы получаем параметр codecpar.
Из AVCodecParameters
мы можем изучить codec_id (167 - VP9) и другие полезные параметры, такие как bits_per_coded_sample
.
Интересно, что эти значения кажутся правильными для потоков, таких как H264 (codec_id = 27) в 24 битах, но помечены как 0 для кодека VP9. Приводит меня к мысли, что это не правильное место, чтобы найти правильную ценность.