[FFmpeg-trac] #5792(undetermined:new): Alpha planes not found/ignored decoding VP8a/VP9a (VPxa)
FFmpeg
trac at avcodec.org
Tue Aug 23 17:58:34 EEST 2016
#5792: Alpha planes not found/ignored decoding VP8a/VP9a (VPxa)
-------------------------------------+-------------------------------------
Reporter: cdlvcdlv | Type: defect
Status: new | Priority: normal
Component: | Version:
undetermined | unspecified
Keywords: VP8a VP9a | Blocked By:
decoding alpha-planes | Reproduced by developer: 0
Blocking: |
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
== Summary of the bug ==
Though **FFmpeg** is now able to fully decode **VPxa**, alpha planes are
not used (as before), and **VPxa** videos are reported as **yuv420p** (not
**yuva420p**).
== Decoding VPxa alpha planes has been recently added ==
I opened a ticket (now closed) to request adding **VP8a** decoding to
**FFmpeg** (though I didn't know how to express it to make myself
understand). A few days later I found that [http://ffmpeg.org/pipermail
/ffmpeg-devel/2016-July/196403.html Vignesh Venkatasubramanian had already
coded it] and was [http://ffmpeg-devel.ffmpeg.narkive.com/SLLQJ6WC/patch-
libvpx-enable-vp9-alpha-encoding asking for including it in FFmpeg]. I
sent an e-mail to VV and he confirmed that his code had been commited yet.
It's
[https://github.com/FFmpeg/FFmpeg/commit/134fe28981cd94206cf4dcfd468ccc1b76391980
commit 134fe2898 (2016-07-20)].
Nevertheless, I haven't been able to make it work. In Windows 7 and XP,
I've tried latest **Zeranoe**'s build, **rogerdpack** build and I've
compiled natively **FFmpeg** in Windows to no avail.
== VPxa versus another two codecs with transparency ==
First, I create 3 videos with alpha channel (**mov**/**qtrle**,
**avi**/**huffyuv** and **webm**/**VP8a**) from
[https://upload.wikimedia.org/wikipedia/commons/1/14/Animated_PNG_example_bouncing_beach_ball.png
the same animated PNG with transparency]:
{{{
ffmpeg -i
https://upload.wikimedia.org/wikipedia/commons/1/14/Animated_PNG_example_bouncing_beach_ball.png
-c:v libvpx ball+alpha.webm -c:v qtrle ball+alpha.mov -c:v huffyuv
ball+alpha.avi
}}}
(I found out that {{{-pix_fmt yuva420p -metadata:s:v:0 alpha_mode="1"}}}
is not necessary to make the **VP8a** video. Using Chrome, I verify that
the transparency of the webm video works.)
Then I use **ffplay** to watch every video overlaid on {{{testsrc}}}
filter:
{{{
ffplay -f lavfi -i testsrc -t 1 -vf
movie=ball+alpha.mov[ov];[in][ov]overlay
ffplay -f lavfi -i testsrc -t 1 -vf
movie=ball+alpha.avi[ov];[in][ov]overlay
ffplay -f lavfi -i testsrc -t 1 -vf
movie=ball+alpha.webm[ov];[in][ov]overlay
}}}
The first two are right (just as if you use the original .png as value of
{{{movie}}} filter). However, the third overlay is wrong (the background
of the ball is a black rectangle, not {{{testsrc}}}).
I extracted the first frame of every video and uploaded them:
{{{
ffmpeg -f lavfi -i testsrc -i ball+alpha.mov -filter_complex [0][1]overlay
-vframes 1 qtrle.png
ffmpeg -f lavfi -i testsrc -i ball+alpha.avi -filter_complex [0][1]overlay
-vframes 1 huffyuv.png
ffmpeg -f lavfi -i testsrc -i ball+alpha.webm -filter_complex
[0][1]overlay -vframes 1 VP8a.png
}}}
[https://i.imgsafe.org/c61609e802.png qtrle overlay frame]
[https://i.imgsafe.org/c6161ee44c.png huffyuv overlay frame]
[https://i.imgsafe.org/c61635b36c.png VP8a overlay frame]
Another way to check this issue is using {{{alphaextract}}} filter:
{{{
ffplay -i ball+alpha.mov -vf alphaextract
ffplay -i ball+alpha.avi -vf alphaextract
ffplay -i ball+alpha.webm -vf alphaextract
}}}
The first two work as expected, the third just stops with error (remember
that it works fine in Chrome):
{{{
Input #0, matroska,webm, from 'ball+alpha.webm':B sq= 0B f=0/0
Metadata:
encoder : Lavf57.47.101
Duration: 00:00:01.50, start: 0.000000, bitrate: 115 kb/s
Stream #0:0: Video: vp8, yuv420p, 100x100, SAR 1:1 DAR 1:1, 13.33 fps,
13.33
tbr, 1k tbn, 1k tbc (default)
Metadata:
alpha_mode : 1
[Parsed_alphaextract_0 @ 0621e1a0] Requested planes not available.
[Parsed_alphaextract_0 @ 0621e1a0] Failed to configure input pad on
Parsed_alpha
}}}
== Test sample from Chome demo ==
You can also use one of the sample **VP8a** videos from
http://simpl.info/videoalpha to check it:
{{{
wget http://simpl.info/videoalpha/video/soccer1.webm
ffplay -f lavfi -i "testsrc=size=640x480" -vf
movie=soccer1.webm[ov];[in][ov]overlay
}}}
Or, if you have a fast connection (and machine):
{{{
ffmpeg -f lavfi -i "testsrc=size=640x480" -i
http://simpl.info/videoalpha/video/soccer1.webm -filter_complex
[0][1]overlay -f matroska - | ffplay -
}}}
[https://i.imgsafe.org/c638490a99.png soccer1.webm overlaid (grey
rectangle)]
Trying to use {{{alphaextract}}} with **soccer1.webm** stops also on
error:
{{{
ffplay -i http://simpl.info/videoalpha/video/soccer1.webm -vf alphaextract
...
Input #0, matroska,webm, from
'http://simpl.info/videoalpha/video/soccer1.webm':
Metadata:
encoder : libwebm-0.2.1.0
Duration: 00:01:20.20, start: 0.000000, bitrate: 526 kb/s
Stream #0:0(eng): Video: vp8, yuv420p, 360x360, SAR 1:1 DAR 1:1, 30
fps, 30
tbr, 1k tbn, 1k tbc (default)
Metadata:
alpha_mode : 1
[Parsed_alphaextract_0 @ 062b7f60] Requested planes not available.
[Parsed_alphaextract_0 @ 062b7f60] Failed to configure input pad on
Parsed_alpha
extract_0
nan M-V: nan fd= 0 aq= 0KB vq= 58KB sq= 0B f=0/0
}}}
== Summary ==
These videos were all **VP8a**, but the preceding applies also to
**VP9a**.
It seems to me that the new decoder is not aware of the existence of the
alpha planes (**ffprobe** says the videos are **yuv420p**, and
{{{alphaextract}}} complaints of not finding the requested planes). Maybe
I'd need to add an unknown option to make VV's commit work (I googled, but
found no one). Then, my request would be of better documentation.
== Builds used ==
**ffmpeg** compiled by me using **rdp** build helpers: 2016-08-20.
{{{
ffmpeg version N-81413-g45e5d5f Copyright (c) 2000-2016 the FFmpeg
developers
built with gcc 5.4.0 (GCC)
configuration: --arch=x86 --target-os=mingw32 --cross-
prefix=/cygdrive/c/ffmpeg-
windows-build-helpers-
master/native_build/windows/ffmpeg_local_builds/sandbox/cr
oss_compilers/mingw-w64-i686/bin/i686-w64-mingw32- --pkg-config=pkg-config
--dis
able-w32threads --enable-libsoxr --enable-fontconfig --enable-libass
--enable-li
bbluray --enable-iconv --enable-libtwolame --extra-
cflags=-DLIBTWOLAME_STATIC --
enable-libzvbi --enable-libcaca --enable-libmodplug --extra-libs=-lstdc++
--extr
a-libs=-lpng --enable-decklink --extra-libs=-loleaut32 --enable-libmp3lame
--ena
ble-version3 --enable-zlib --enable-librtmp --enable-libvorbis --enable-
libtheor
a --enable-libspeex --enable-libopenjpeg --enable-gnutls --enable-libgsm
--enabl
e-libfreetype --enable-libopus --enable-bzlib --enable-libopencore-amrnb
--enabl
e-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroedinger
--enable-li
bvpx --enable-libilbc --enable-libwavpack --enable-libwebp --enable-libgme
--ena
ble-dxva2 --enable-avisynth --enable-gray --enable-libopenh264 --enable-
nvenc --
enable-libebur128 --enable-netcdf --enable-libflite --enable-lzma
--enable-libsn
appy --enable-libzimg --enable-gpl --enable-libx264 --enable-libx265
--enable-fr
ei0r --enable-filter=frei0r --enable-librubberband --enable-libvidstab
--enable-
libxavs --enable-libxvid --extra-libs=-lpsapi --extra-libs=-lspeexdsp
--extra-cf
lags='-mtune=core2' --extra-cflags=-O3 --enable-static --disable-shared
--prefix
=/cygdrive/c/ffmpeg-windows-build-helpers-
master/native_build/windows/ffmpeg_loc
al_builds/sandbox/cross_compilers/mingw-w64-i686/i686-w64-mingw32
--enable-nonfr
ee --enable-libfdk-aac --disable-libfaac --enable-runtime-cpudetect
libavutil 55. 29.100 / 55. 29.100
libavcodec 57. 54.100 / 57. 54.100
libavformat 57. 47.101 / 57. 47.101
libavdevice 57. 0.102 / 57. 0.102
libavfilter 6. 52.100 / 6. 52.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
}}}
**rogerdpack** builds (https://sourceforge.net/projects/ffmpegwindowsbi/)
: 2016-08-12 (v3.1.2)
{{{
ffmpeg version n3.1.2 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --arch=x86 --target-os=mingw32 --cross-
prefix=/home/rdp/dev/ffm
peg-windows-build-
helpers/sandbox/cross_compilers/mingw-w64-i686/bin/i686-w64-mi
ngw32- --pkg-config=pkg-config --disable-w32threads --enable-libsoxr
--enable-fo
ntconfig --enable-libass --enable-libbluray --enable-iconv --enable-
libtwolame -
-extra-cflags=-DLIBTWOLAME_STATIC --enable-libzvbi --enable-libcaca
--enable-lib
modplug --extra-libs=-lstdc++ --extra-libs=-lpng --enable-decklink
--extra-libs=
-loleaut32 --enable-libmp3lame --enable-version3 --enable-zlib --enable-
librtmp
--enable-libvorbis --enable-libtheora --enable-libspeex --enable-
libopenjpeg --e
nable-gnutls --enable-libgsm --enable-libfreetype --enable-libopus
--enable-bzli
b --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-
amrwbenc
--enable-libschroedinger --enable-libvpx --enable-libilbc --enable-
libwavpack --
enable-libwebp --enable-libgme --enable-dxva2 --enable-avisynth --enable-
gray --
enable-libopenh264 --enable-nvenc --enable-libebur128 --enable-netcdf
--enable-l
ibflite --enable-lzma --enable-libsnappy --enable-libzimg --enable-gpl
--enable-
libx264 --enable-libx265 --enable-frei0r --enable-filter=frei0r --enable-
librubb
erband --enable-libvidstab --enable-libxavs --enable-libxvid --extra-
libs=-lpsap
i --extra-libs=-lspeexdsp --extra-cflags='-mtune=core2' --extra-cflags=-O3
--ena
ble-static --disable-shared --prefix=/home/rdp/dev/ffmpeg-windows-build-
helpers/
sandbox/cross_compilers/mingw-w64-i686/i686-w64-mingw32 --enable-runtime-
cpudete
ct
libavutil 55. 28.100 / 55. 28.100
libavcodec 57. 48.101 / 57. 48.101
libavformat 57. 41.100 / 57. 41.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 47.100 / 6. 47.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
}}}
**Zeranoe** build: 2016-08-21
{{{
ffmpeg version N-81423-g61fac0e Copyright (c) 2000-2016 the FFmpeg
developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads
--enable-dxva
2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib
--enable-libeb
ur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv
--enabl
e-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-
libfreety
pe --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug
--enable
-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-libop
enh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-
libschroe
dinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-
libtheora
--enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-
libvorb
is --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264
--enabl
e-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma
--ena
ble-decklink --enable-zlib
libavutil 55. 29.100 / 55. 29.100
libavcodec 57. 54.100 / 57. 54.100
libavformat 57. 47.101 / 57. 47.101
libavdevice 57. 0.102 / 57. 0.102
libavfilter 6. 52.100 / 6. 52.100
libswscale 4. 1.100 / 4. 1.100
libswresample 2. 1.100 / 2. 1.100
libpostproc 54. 0.100 / 54. 0.100
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/5792>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list