【问题标题】:Splitting webm video to png with transparency将 webm 视频拆分为具有透明度的 png
【发布时间】:2014-03-18 16:15:29
【问题描述】:

我需要将webm 编码的视频拆分为png 帧,而不会丢失透明度。我使用以下 ffmpeg 命令:

ffmpeg -i dancer1.webm -pix_fmt rgba frames/%04d.png

这会产生一个png的目录,但是为什么每个输出帧都缺少透明度?

我使用了this 示例视频,其中包含一个 Alpha 通道。看到它在背景here 上播放。这是 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)

在输出 png 上运行 identify 会产生以下结果:

$ identify 0001.png
0001.png PNG 640x360 640x360+0+0 8-bit DirectClass 94.1KB 0.000u 0:00.000

file 对 png 有这样的看法:

$ file 0001.png
0001.png: PNG image data, 640 x 360, 8-bit/color RGBA, non-interlaced

一切看起来都对我来说是正确的,那么为什么输出图像不包含 Alpha 通道?

【问题讨论】:

标签: video ffmpeg png alpha-transparency webm


【解决方案1】:

自 2016 年 7 月 20 日起,可以正确解码具有 Alpha 通道(VP8a 或 VP9a)的 webm,但您需要 -vcodec libvpx 选项。您必须下载在该日期之后编译的 FFmpeg(或使用最新提交自行编译),并在创建 frames 文件夹后,使用以下命令:

ffmpeg -vcodec libvpx -i dancer1.webm frames/%04d.png

请注意,-vcodec libvpx 是输入之前,而不是之后。

【讨论】:

    【解决方案2】:

    看起来您的 WebM 视频实际上没有 alpha 通道:

    流 #0:0(eng):视频:vp8,yuv420p

    你会看到

    Stream #0:0(eng):视频:vp8,yuva420p(如果有)。

    如果我看到一个带有 alpha 的 WebM 文件,我会欣喜若狂 - 在过去的 24 小时里,我没有成功地尝试使用 ffmpeg 从 flv 转换为带有 alpha 的文件:(

    【讨论】:

      【解决方案3】:

      我能够使用此命令从 webm 获取透明的 png,并且没有错误:

      ffmpeg -vcodec libvpx-vp9 -i ejemlo.webm -pix_fmt rgba frames/%04d.png

      【讨论】:

        猜你喜欢
        • 2016-04-30
        • 2021-10-13
        • 1970-01-01
        • 2011-04-09
        • 2018-06-05
        • 2015-01-26
        • 1970-01-01
        • 2012-01-29
        • 1970-01-01
        相关资源
        最近更新 更多