OK, der native Codec ist einfach nicht so gut wie der libvpx-Codec, der von den Webm-Peeps geliefert wird. Wenn Sie also diese Alpha-Informationen benötigen, sollten Sie den Codec beim Laden mit dem libvpx-Codec überschreiben.
Wie Sie das tun - siehe hier: https://stackoverflow.com/questions/35340437/how-can-i-use-avformat-open-input-function-ffmpeg
Grundsätzlich muss das dritte Argument avformat_open_input()
ein av_find_input_format("libvpx")
Typ seinAVInputFormat
Wenn Sie nicht sicher sind, ob es sich um einen VP8,9-Codec im Dateikontext handelt, müssen Sie zuerst die Datei prüfen, den Codec ermitteln und dann in einem tatsächlichen Ladevorgang überschreiben. Informationen dazu finden Sie hier: https://stackoverflow.com/questions/14134589/what-does-the-avformat-open-input-do
Und schließlich - wenn Sie den nativen anstelle des webm-Codecs verwenden möchten, es sei denn, er hat ein Alpha (aber warum), können Sie überprüfen, ob das Alpha-Flag gesetzt ist, indem Sie die Zusatzdaten AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL überprüfen.
Prüfen Sie AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, wenn die side_data mit (uint64_t) 1 beginnt, da sich eine Transparenzebene befindet.
Der allgemeine Konsens besteht jedoch darin, immer den libvpx-Decoder zu verwenden.
Bearbeiten: Weitere Details Die ID des Google VP8-Codecs lautet 139. 167 ist der Google VP9-Codec. Um die libvpx-Versionen zu ersetzen, müssen Sie "libvpx-vp8" und "libvpx-vp9" suchen, z. B. avcodec_find_decoder_by_name ("libvpx-vp9").