From 309c409a5ba9ba83beedc655571f589477f165c5 Mon Sep 17 00:00:00 2001 From: Miguel Angel Simon Sierra Date: Tue, 30 Jun 2026 17:24:53 -0700 Subject: [PATCH 1/2] docs: note that ffprobe reports transparent WebM as yuv420p (alpha is a VP9 side-channel) --- docs/guides/rendering.mdx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/guides/rendering.mdx b/docs/guides/rendering.mdx index 78842861a0..01b7a8ad94 100644 --- a/docs/guides/rendering.mdx +++ b/docs/guides/rendering.mdx @@ -389,6 +389,17 @@ Only the visible elements (cards, text, images) will appear in the final video. - **In a video editor:** Import the MOV file and place it on a track above other footage. Transparent areas should show the footage below. - **Online tool:** Use [rotato.app/tools/transparent-video](https://rotato.app/tools/transparent-video) to verify your MOV or WebM has working transparency. + + **`ffprobe` reports a transparent WebM as `yuv420p`, not `yuva420p`.** This is expected and does not mean the alpha is missing. ffmpeg's native `vp9` decoder silently drops VP9's alpha side-channel, so `ffprobe` shows `pix_fmt=yuv420p` even on a file that genuinely has alpha. The WebM still carries alpha when its header reports `ALPHA_MODE=1`. To read the true pixel format and verify per-pixel alpha, force the VP9 library decoder: + + ```bash + ffprobe -c:v libvpx-vp9 -show_entries stream=pix_fmt -of csv=p=0 out.webm # yuva420p + ffmpeg -c:v libvpx-vp9 -i out.webm -frames:v 1 -f rawvideo -pix_fmt rgba frame.raw + ``` + + A fully transparent corner pixel reads `00 00 00 00`. MOV (ProRes 4444) and `png-sequence` report their alpha directly, so this caveat is WebM-only. + + ## Tips From 8ba036f3d4421de6f81ddc0056c997f49e14e356 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Wed, 1 Jul 2026 02:35:17 +0000 Subject: [PATCH 2/2] docs: clarify WebM alpha verification --- docs/guides/rendering.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/guides/rendering.mdx b/docs/guides/rendering.mdx index 01b7a8ad94..fb48c53a6d 100644 --- a/docs/guides/rendering.mdx +++ b/docs/guides/rendering.mdx @@ -390,14 +390,14 @@ Only the visible elements (cards, text, images) will appear in the final video. - **Online tool:** Use [rotato.app/tools/transparent-video](https://rotato.app/tools/transparent-video) to verify your MOV or WebM has working transparency. - **`ffprobe` reports a transparent WebM as `yuv420p`, not `yuva420p`.** This is expected and does not mean the alpha is missing. ffmpeg's native `vp9` decoder silently drops VP9's alpha side-channel, so `ffprobe` shows `pix_fmt=yuv420p` even on a file that genuinely has alpha. The WebM still carries alpha when its header reports `ALPHA_MODE=1`. To read the true pixel format and verify per-pixel alpha, force the VP9 library decoder: + **`ffprobe` reports a transparent WebM as `yuv420p`, not `yuva420p`.** This is expected and does not mean the alpha is missing. VP9 stores its alpha plane in a Matroska `BlockAdditional` sidecar, not in the primary stream's pixel format, so `ffprobe` reports the primary stream as `pix_fmt=yuv420p` even when the file genuinely carries alpha. First check that the WebM declares the alpha sidecar, then force the VP9 library decoder to verify per-pixel alpha: ```bash - ffprobe -c:v libvpx-vp9 -show_entries stream=pix_fmt -of csv=p=0 out.webm # yuva420p + ffprobe -v error -show_streams out.webm | grep -i alpha_mode # ALPHA_MODE=1 or alpha_mode=1 ffmpeg -c:v libvpx-vp9 -i out.webm -frames:v 1 -f rawvideo -pix_fmt rgba frame.raw ``` - A fully transparent corner pixel reads `00 00 00 00`. MOV (ProRes 4444) and `png-sequence` report their alpha directly, so this caveat is WebM-only. + A fully transparent corner pixel in `frame.raw` reads `00 00 00 00`. MOV (ProRes 4444) and `png-sequence` report their alpha directly, so this caveat is WebM-only. ## Tips