无法将带Alpha通道的VP9视频编码至IVF容器的技术问询
VP9编码视频转IVF容器后丢失透明通道的疑问
我尝试将带透明通道的VP8/WebM视频转换为VP9编码+IVF容器格式,目前遇到了透明通道丢失的问题:
成功保留透明通道的操作
使用以下命令可以成功生成带透明通道的VP9/WebM视频:
ffmpeg -c:v libvpx -i dancer1.webm -c:v libvpx-vp9 dancer_vp9.webm
这里强制使用libvpx解码器读取原视频(该解码器支持Alpha通道),再用libvpx-vp9编码,最终WebM容器的视频能正常保留透明效果。
IVF容器下透明通道丢失的情况
将容器改为IVF后,生成的视频会丢失透明通道,命令如下:
ffmpeg -c:v libvpx -i dancer1.webm -c:v libvpx-vp9 dancer_vp9.ivf
经多种方式验证均无透明效果:
- 在VLC中播放
- 用FFmpeg转换为PNG帧:
ffmpeg -c:v libvpx-vp9 -i dancer_vp9.ivf -vf "select=eq(n\,0)" frame.png - 在Chrome中通过WebCodecs API播放
我还尝试直接将WebM中带Alpha的流复制到IVF容器,结果同样丢失透明通道:
ffmpeg -i dancer1_vp9.webm -c copy dancer1_vp9_copy.ivf
奇怪的现象
读取VP8/VP9 WebM视频时:
- 无论是否强制使用libvpx解码器(FFmpeg原生解码器会丢弃Alpha通道),输出到IVF容器的结果都丢失透明通道;
- 但输出到WebM容器时,使用libvpx解码器能保留Alpha通道,原生解码器则不行。
生成的IVF文件的ffprobe输出
ffprobe version 5.0.1 Copyright (c) 2007-2022 the FFmpeg developers built with Apple clang version 13.1.6 (clang-1316.0.21.2.5) configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.0.1_3 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-neon libavutil 57. 17.100 / 57. 17.100 libavcodec 59. 18.100 / 59. 18.100 libavformat 59. 16.100 / 59. 16.100 libavdevice 59. 4.100 / 59. 4.100 libavfilter 8. 24.100 / 8. 24.100 libswscale 6. 4.100 / 6. 4.100 libswresample 4. 3.100 / 4. 3.100 libpostproc 56. 3.100 / 56. 3.100 Input #0, ivf, from 'dancer_vp9.ivf': Duration: 00:01:02.87, start: 0.000000, bitrate: 249 kb/s Stream #0:0: Video: vp9 (Profile 0) (VP90 / 0x30395056), yuv420p(tv), 640x360, 30 tbr, 30 tbn
请问是IVF容器本身不支持Alpha通道,还是我的操作存在错误?
内容的提问来源于stack exchange,提问作者Jakob Košir
相关产品推荐
相关产品推荐

