我正在尝试使用 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 视频:
- 使用 Chrome 打开 webm 视频
- 进入开发者工具
将 CSS 代码添加到视频标签
样式="背景颜色:rgb(0,255,0)"
如果 webm 视频有 alpha 通道,视频背景将更改为绿色的,否则什么也不会发生。幸运的是我的 webm 视频有 alpha 通道!
谢谢,希望这有帮助。
答案2
Blender 3D 开源软件的视频序列编辑器可以获取视频文件并导出 Webm 文件。Blender 使用 FFmpeg。请参阅www.blender.org