FFmpeg 无法将带 alpha 通道的 mov 转换为带 alpha 通道的 webm

FFmpeg 无法将带 alpha 通道的 mov 转换为带 alpha 通道的 webm

我正在尝试使用 ffmpeg 将带 alpha 通道的 mov 转换为带 alpha 通道的 webm。但是,我得到的是 webm 视频无 alpha 通道。我的方法基于这些链接:

我使用的代码:

ffmpeg -i input.mov -c:v libvpx-vp9 output.webm

输出如下:

ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1_2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gpl --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libspeex --enable-videotoolbox
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'overlap_1.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2019-01-17T08:43:07.000000Z
  Duration: 00:00:04.00, start: 0.000000, bitrate: 34346 kb/s
    Stream #0:0(eng): Video: qtrle (rle  / 0x20656C72), bgra(progressive), 1080x1080, 32249 kb/s, SAR 1:1 DAR 1:1, 24 fps, 24 tbr, 24 tbn, 24 tbc (default)
    Metadata:
      creation_time   : 2019-01-17T08:43:07.000000Z
      handler_name    : Apple Video Media Handler
      encoder         : Animation
      timecode        : 00:00:00:00
    Stream #0:1(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
    Metadata:
      creation_time   : 2019-01-17T08:43:07.000000Z
      handler_name    : Time Code Media Handler
      timecode        : 00:00:00:00
File 'overlap_C1.webm' already exists. Overwrite ? [y/N] y
Stream mapping:
  Stream #0:0 -> #0:0 (qtrle (native) -> vp9 (libvpx-vp9))
Press [q] to stop, [?] for help
[libvpx-vp9 @ 0x7ffdb8018200] v1.7.0
Output #0, webm, to 'overlap_C1.webm':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    encoder         : Lavf58.20.100
    Stream #0:0(eng): Video: vp9 (libvpx-vp9), yuva420p, 1080x1080 [SAR 1:1 DAR 1:1], q=-1--1, 200 kb/s, 24 fps, 1k tbn, 24 tbc (default)
    Metadata:
      creation_time   : 2019-01-17T08:43:07.000000Z
      handler_name    : Apple Video Media Handler
      timecode        : 00:00:00:00
      encoder         : Lavc58.35.100 libvpx-vp9
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame=   96 fps=1.6 q=0.0 Lsize=     145kB time=00:00:03.95 bitrate= 299.9kbits/s speed=0.0649x    
video:70kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 106.879829%

根据输出结果可知:

  • 视频编解码器:vp9
  • 像素格式:yuva420p
  • 文件格式:webm

看起来还不错,但是当我尝试通过 IINA(一个很棒的视频播放器)和 Chrome 播放该视频时,视频显示的是黑色而不是 alpha 通道。没有 Alpha 通道!

然后我尝试了编解码器vp8,结果得到了同样的效果webm视频。我不知道我到底发生了什么。这是我的情况:

  • 系统:macOS mojave 10.14.2
  • libvpx:启用
  • xcode:已安装

希望有人能给我建议,谢谢!

答案1

我认为这个问题已解决。我在确认webm视频是否有alpha通道时犯了一个错误。这是我用2个软件播放带alpha通道的mov和带alpha通道的webm的结果。

伊尼那(该视频播放器在 Github 上的评级为 17034)

  • mov:带有黑白方块的背景
  • webm:黑色背景

铬合金(版本71,稳定)

  • mov:不支持
  • webm:黑色背景

到目前为止,黑色背景让我认为 webm 视频没有 alpha 通道。

然后我发现网站显示 Chrome 如何支持带有 alpha 通道的 webm 视频。超级有趣的是,我可以更改 webm 视频的背景颜色,然后我检查了 html 代码,他们使用 CSS 来控制背景颜色。这真是一种确认 webm 视频是否具有 alpha 通道的好方法!

因此我执行了以下步骤来确认我的 webm 视频:

  1. 使用 Chrome 打开 webm 视频
  2. 进入开发者工具
  3. 将 CSS 代码添加到视频标签

    样式="背景颜色:rgb(0,255,0)"

  4. 如果 webm 视频有 alpha 通道,视频背景将更改为绿色的,否则什么也不会发生。幸运的是我的 webm 视频有 alpha 通道!

谢谢,希望这有帮助。

答案2

Blender 3D 开源软件的视频序列编辑器可以获取视频文件并导出 Webm 文件。Blender 使用 FFmpeg。请参阅www.blender.org

相关内容