在没有质量损失的情况下将 mp4 转换为 webp (ffmpeg)

convert mp4 to webp without quality loss (ffmpeg)

我该怎么做?

ffmpeg -y -i input.mp4 -vcodec libwebp -lossless 0 -compression_level 0 -loop 0 output_lossless0_comp0.webp

ffmpeg -i input.mp4 -vcodec libwebp -filter:v fps=fps=20 -lossless 0  -compression_level 3 -q:v 70 -loop 1 -preset picture -an -vsync 0 -s 800:600 output.webp

导致严重的质量损失。

我在其他地方找到的所有其他命令行都会导致无限的编码时间和荒谬的文件大小(当源文件为 3 MB 时为 500+ MB)。

我只需要将 mp4 转换为 webp 而不压缩或质量损失。

只有 -c:v copy 选项可以保证类似大小的输出而不会降低质量,但是 webp 不支持 mp4 编解码器,因此您需要使用“一些”编码器和任何编码器都​​会导致质量下降或输出文件变大(这是一种权衡)。

如果您使用 libwebp (documentation),那么您将需要尝试使用其参数的不同值来获得在尺寸、质量和性能方面对您有利的结果时间。

我会使用 -lossless 0-lossless 1 以及 -compression_level 参数的不同值来开始任何测试:

For lossy, this is a quality/speed tradeoff. Higher values give better quality for a given size at the cost of increased encoding time. For lossless, this is a size/speed tradeoff. Higher values give smaller size at the cost of increased encoding time. More specifically, it controls the number of extra algorithms and compression tools used, and varies the combination of these tools. This maps to the method option in libwebp. The valid range is 0 to 6. Default is 4.