使用 FFMPEG 将 MOV 转换为 WEBM 时颜色褪色

使用 FFMPEG 将 MOV 转换为 WEBM 时颜色褪色

我正在尝试将一个简单的动画从 MOV 转换为 WEBM,以便它可以用作我的 Twitch 流的 OBS 警报。

但是,当我使用 FFMPEG 进行转换时,颜色稍微褪色了。

正如您在左边的红线上看到的,右半部分(WEBM)与左半部分(MOV)相比显得褪色了。

这是我目前正在使用的:

ffmpeg -i "file_name.mov" -c:v libvpx-vp9 -lossless 1 -auto-alt-ref 0 "file_name.webm"

我没有想到颜色会稍微褪色。

有没有什么方法可以确保 WEBM 在从 MOV 文件转换后不会丢失其颜色?

非常感谢。

这是“file_name.mov”:https://drive.google.com/file/d/1pJpSC4RbNFV-WBILdKfBSzua1qVaXxw0/view?usp=sharing

答案1

libvpx-vp9 编解码器选择yuva420p输出像素格式,因为您没有指定-pix_fmt参数。

由于我们正在寻找无损编码,我们可以添加-pix_fmt gbrp

ffmpeg -y -i "file_name.mov" -c:v libvpx-vp9 -lossless 1 -auto-alt-ref 0 -pix_fmt gbrp "file_name.webm"


从 RGBA(MOV 文件的格式)到 YUVA420 的像素格式转换适用色度二次采样,这可能会影响颜色。

注意:添加-pix_fmt gbrpalpha(透明度)通道在转换为时会丢失gbrp(但 VP9 不支持 rgba 像素格式作为 MOV RLE 编解码器)。


看起来 FFmpeg 中也有一个关于像素格式转换的错误(或者 FFmpeg 与视频播放器之间不兼容)。

以下转换的颜色在使用 VLC 播放时看起来几乎完美,但在使用 MPC-HC 播放时会变得褪色(例如):

ffmpeg -y -i "file_name.mov" -c:v libvpx-vp9 -vf "scale=out_color_matrix=bt709:dst_range=1:dst_format=yuv420p" -lossless 1 -auto-alt-ref 0 -pix_fmt yuv420p -bsf:v vp9_metadata=color_space=bt709 "file_name2.webm"

相关内容