Ste*_*lie 6 video png ffmpeg alpha-transparency webm
我需要将webm编码的视频分割png成帧,而不会失去透明度。我使用以下 ffmpeg 命令:
ffmpeg -i dancer1.webm -pix_fmt rgba frames/%04d.png
Run Code Online (Sandbox Code Playgroud)
这会生成一个 png 目录,但为什么每个输出帧都缺少透明度?
我使用了这个示例视频,其中包含一个 alpha 通道。看它在这里播放背景。这是来自 ffmpeg 的示例输出帧:

ffmpeg 在运行时产生以下输出:
ffmpeg version N-60294-g549f052 Copyright (c) 2000-2014 the FFmpeg developers [1/2471]
built on Feb 2 2014 05:41:56 with gcc 4.6 (Debian 4.6.3-1)
configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-I/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-L/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
libavutil 52. 63.100 / 52. 63.100
libavcodec 55. 49.101 / 55. 49.101
libavformat 55. 28.101 / 55. 28.101
libavdevice 55. 7.100 / 55. 7.100
libavfilter 4. 1.101 / 4. 1.101
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, matroska,webm, from 'dancer1.webm':
Metadata:
encoder : libwebm-0.2.1.0
Duration: 00:01:02.83, start: 0.000000, bitrate: 520 kb/s
Stream #0:0(eng): Video: vp8, yuv420p, 640x360, SAR 1:1 DAR 16:9, 30 tbr, 1k tbn, 1k tbc (default)
Metadata:
alpha_mode : 1
Output #0, image2, to 'frames/%04d.png':
Metadata:
encoder : Lavf55.28.101
Stream #0:0(eng): Video: png, rgba, 640x360 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 30 tbc (default)
Metadata:
alpha_mode : 1
Stream mapping:
Stream #0:0 -> #0:0 (vp8 -> png)
Run Code Online (Sandbox Code Playgroud)
identify在输出 png 上运行会产生以下结果:
$ identify 0001.png
0001.png PNG 640x360 640x360+0+0 8-bit DirectClass 94.1KB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)
file 关于 png 有这样的说法:
$ file 0001.png
0001.png: PNG image data, 640 x 360, 8-bit/color RGBA, non-interlaced
Run Code Online (Sandbox Code Playgroud)
一切对我来说都是正确的,那么为什么输出图像不包含 alpha 通道呢?
自 2016 年 7 月 20 日起,可以使用 alpha 通道(VP8a 或 VP9a)正确解码 webm,但您需要-vcodec libvpx选择。您必须下载在该日期之后编译的FFmpeg(或使用最新提交编译自己),并在创建frames文件夹后,使用以下命令:
ffmpeg -vcodec libvpx -i dancer1.webm frames/%04d.png
注意-vcodec libvpx是在输入之前,而不是在输入之后。
小智 1
看起来您的 WebM 视频实际上没有 Alpha 通道:
流 #0:0(eng):视频:vp8、yuv420p
你会看到
流 #0:0(eng):视频:vp8、yuva420p(如果有)。
如果我看到一个带有 alpha 的 WebM 文件,我会欣喜若狂 - 在过去 24 小时内尝试使用 ffmpeg 将 flv 与 alpha 进行转换,但没有成功:(
| 归档时间: |
|
| 查看次数: |
5198 次 |
| 最近记录: |