<div dir="ltr">Hi,<br><br>I wrote a small program based on the FFMPEG example doc/examples/demuxing_decoding.c to extract the frames from an input video and save them out as PNG files. This works but the output frames are missing alpha information.<br><br>In this case the input file is WebM and the decoder used is VP9 (AV_CODEC_ID_VP9) so I expect (know) that the input file stores alpha. I tested this with FFMPEG itself. I have pasted the output at the end of this email. The key point is that FFMPEG identified the format as yuva420p.<br><br>When debugging my program I observed that pCodecContext->pix_fmt was AV_PIX_FMT_YUV420P - not AV_PIX_FMT_YUVA420P<br><br>// Error handling omitted<br>av_find_best_stream(...)<br>auto stream = formatContext->streams[streamIndex];<br>const auto codecIdentifier{ AV_CODEC_ID_VP9 };<br>auto decoder = avcodec_find_decoder(codecIdentifier);<br>*codecContext = avcodec_alloc_context3(decoder);<br>avcodec_parameters_to_context(...);<br>avcodec_open2(*codecContext, decoder, &options);<br><br>// ...<br><br>// AV_PIX_FMT_YUV420P - no alpha<br>const auto pixelFormat = pCodecContext->pix_fmt;<br><br>Does anybody know how to force FFMPEG to open the input video such that alpha is preserved?<br><br>Thanks,<br><br>FFMPEG output<br>--- snip ---<br> ffmpeg -c:v libvpx-vp9 -i temp/anim.webm temp/output-%3d.png<br>ffmpeg version N-101533-g637a2ba03d Copyright (c) 2000-2021 the FFmpeg developers<br>  built with gcc 10.2.0 (Rev9, Built by MSYS2 project)<br>  configuration:  --disable-static --enable-shared --pkg-config=pkgconf --cc='ccache gcc' --cxx='ccache g++' --ld='ccache g++' --disable-autodetect --enable-amf --enable-bzlib --enable-cuda --enable-cuvid --enable-d3d11va --<br>enable-dxva2 --enable-iconv --enable-lzma --enable-nvenc --enable-schannel --enable-zlib --enable-sdl2 --enable-ffnvcodec --enable-nvdec --enable-cuda-llvm --enable-gmp --enable-libmp3lame --enable-libopus --enable-libvorbis<br> --enable-libvpx --enable-libdav1d --enable-libaom --disable-debug --enable-libfdk-aac --extra-libs=-liconv --enable-gpl --enable-version3 --enable-nonfree --shlibdir=/local64/bin-video<br>  libavutil      56. 68.100 / 56. 68.100<br>  libavcodec     58.131.100 / 58.131.100<br>  libavformat    58. 74.100 / 58. 74.100<br>  libavdevice    58. 12.100 / 58. 12.100<br>  libavfilter     7.109.100 /  7.109.100<br>  libswscale      5.  8.100 /  5.  8.100<br>  libswresample   3.  8.100 /  3.  8.100<br>  libpostproc    55.  8.100 / 55.  8.100<br>[libvpx-vp9 @ 0000024732b106c0] v1.10.0-rc1-11-gcb0d8ce31<br>    Last message repeated 1 times<br>Input #0, matroska,webm, from 'temp/anim.webm':<br>  Metadata:<br>    ENCODER         : Lavf58.45.100<br>  Duration: 00:00:04.04, start: 0.000000, bitrate: 112 kb/s<br>  Stream #0:0: Video: vp9 (Profile 0), yuva420p(tv), 640x480, SAR 1:1 DAR 4:3, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)<br>    Metadata:<br>      alpha_mode      : 1<br>      ENCODER         : Lavc58.91.100 libvpx-vp9<br>      DURATION        : 00:00:04.040000000<br>[libvpx-vp9 @ 0000024732b11140] v1.10.0-rc1-11-gcb0d8ce31<br>Stream mapping:<br>  Stream #0:0 -> #0:0 (vp9 (libvpx-vp9) -> png (native))<br>Press [q] to stop, [?] for help<br>[libvpx-vp9 @ 0000024732b11140] v1.10.0-rc1-11-gcb0d8ce31<br>Output #0, image2, to 'temp/output-%3d.png':<br>  Metadata:<br>    encoder         : Lavf58.74.100<br>  Stream #0:0: Video: png, rgba(pc, progressive), 640x480 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 fps, 25 tbn (default)<br>    Metadata:<br>      alpha_mode      : 1<br>      DURATION        : 00:00:04.040000000<br>      encoder         : Lavc58.131.100 png<br>frame=  101 fps=0.0 q=-0.0 Lsize=N/A time=00:00:04.04 bitrate=N/A speed=7.73x<br><br>--- snip ---</div>