使用FFmpeg将带Alpha通道的MOV视频转换为带Alpha通道的VP9 WebM视频

12
我想把带有透明度的 mov 转换成带有透明度的 webm,可以在 这里 看到。我按照 这里 解释的步骤尝试了一下,但没成功。
根据这个答案,我能够移除视频中所有的黑色背景,使它变成透明的,但这不是我需要的,因为我已经有一个带有透明度的 mov 文件,希望将其转换为带透明度的 webm 格式。
ffmpeg -i input.mp4 -c:v libvpx -vf "colorkey=0x000000:0.1:0.1,format=yuva420p" out.webm

这是我想转换为带透明度的webm视频的ffprobe输出。

built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.8.4 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libtheora --enable-libvorbis --enable-libvpx --enable-librtmp --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-ffplay --enable-libspeex --enable-libschroedinger --enable-libfdk-aac --enable-libopus --enable-frei0r --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 --enable-nonfree --enable-vda
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    creation_time   : 2016-01-17 16:04:07
    encoder         : Mac OS X v? (AVF 1046.9.1, CM 1731.15.20, x86_64)
    encoder-eng     : Mac OS X v? (AVF 1046.9.1, CM 1731.15.20, x86_64)
  Duration: 00:00:06.63, start: 0.000000, bitrate: 63966 kb/s
    Stream #0:0(eng): Video: prores (ap4h / 0x68347061), yuva444p10le(bt470bg/smpte240m/bt709), 1920x1080, 63963 kb/s, 25.03 fps, 25 tbr, 600 tbn, 600 tbc (default)
    Metadata:
      creation_time   : 2016-01-17 16:04:07
      handler_name    : Core Media Data Handler
      encoder         : Apple ProRes 4444

我也尝试了下面的命令,但对我也没用。

ffmpeg -y -i input.mov -c:v libvpx-vp9 -b:v 2000k -pass 1 -an -f webm output.webm

我在Mac上使用通过brew安装的ffmpeg版本2.8.4,最新版本为2.8.5。

6个回答

18
自从2016-07-13以来,可以使用alpha通道(VP9a)对VP9/webm视频进行编码。然而,您在此处使用的命令将创建一个VP8a视频。假设您拥有该日期之后编译的ffmpeg副本,则所需的只是将libvpx更改为libvpx-vp9。您也不需要yuva420p转换(默认已选中)。

yuva420p 在我的情况下似乎不是默认选择的。更新:虽然在浏览器中透明度确实有效,但这似乎是一个 ffprobe bug - Klesun

16

尝试

ffmpeg -i input.mov -c:v libvpx -pix_fmt yuva420p out.webm

我该如何设置比特率? - Enijar
2
为2mbps的平均速率添加“-b:v 2000k”。 - Gyan
8
回答时,VP9不支持alpha通道。更改为 libvpx-vp9 - Gyan
3
透明度编码与auto_alt_ref不起作用,我收到了这个错误。 - Iftikar Urrhman Khan
2
@IftikarUrrhmanKhan 请尝试在输出之前添加“-auto-alt-ref 0”。 - xuhcc
显示剩余2条评论

6

所有其他解决方案都导致视频质量不佳。请确保按照您的喜好定义比特率。我将我的从1M更改为2M,感到满意。

ffmpeg -i "Model 1 V1.mov" -f webm -c:v libvpx -b:v 2M -acodec libvorbis -auto-alt-ref 0 model1v3.webm -hide_banner

如果您使用After Effects或Premiere Pro,还可以使用此插件在Adobe Media Encoder中使用。


1

WebM-alpha仅适用于VP8,目前对VP9无效。


0
根据评论中的建议修改了接受的答案。 这对我有效。
ffmpeg -i input.mov -c:v libvpx -pix_fmt yuva420p -auto-alt-ref 0 -b:v 2000k output.webm

0

这是在VP8中对我有效的命令。

ffmpeg -i input.mov -c:v libvpx -pix_fmt yuva420p -b:v 2M -auto-alt-ref 0 output.webm

接受的选项无效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接