
用 ffmpeg 将 webm 转为 webp 格式
用 ffmpeg 将 webm 转为 webp 格式
在此之前已多次通过 ffmpeg 将 webm 转为 webp 格式,但是使用频率非常低,但总会有需求,ffmpeg 的参数多且复杂,使用时总是要复习文档。
故有了本文,方便后续需要时查阅。
注:下面内容经过或来源于生成式人工智能。
WebM 和 WebP 都是 Google 推出的面向网页的媒体格式。WebM 主要用于视频,而 WebP 则用于图像。
出于各种原因,获取到的动图可能是WebM格式的,所以需要将 WebM 视频转换为 WebP 动图。
单个文件转换
假设要将当前目录下的 input.webm 文件转为 output.webp,可以运行:
1 | ffmpeg -i input.webm -vcodec libwebp -filter:v fps=fps=20 -lossless 0 -compression_level 3 -q:v 70 -loop 1 -preset picture -an -vsync 0 output.webp |
相关参数说明:
-i
指定输入文件-vcodec libwebp
指定使用 WebP 编码器-filter:v fps=fps=20
输出20帧每秒-lossless 0
有损压缩-compression_level 3
压缩等级为 3-q:v 70
视频质量参数,0 最差 100 最好-loop 1
让 WebP 循环播放-preset picture
适合图像的编码预设-an
禁掉音频-vsync 0
不同步视频时间戳,加快编码速度
根据实际情况可以调整上述参数。
批量转换
如果要批量转换目录下的 webm 文件为 webp,可以写一个简单的 bash 脚本:
1 |
|
该脚本遍历当前目录的 webm 文件,逐个调用 ffmpeg 进行转换,输出文件名将 .webm
后缀改为 .webp
。
进一步优化
可以使用 ffmpeg 的两个衍生项目 ff-webp 和 ffmpeg-webp 进一步优化编码体验。
比如使用 ffwebp:
1 | ffwebp -frame_rate 20 -loop 0 input.webm -q 80 -o output.webp |
可能得到更小的文件体积。
结
上述主要内容来源于AI生成,经过我个人的修改和补充。在实际使用过程中,WebM 视频会存在较多的噪点色带,需要获得好的效果,我更喜欢这么处理:
1 | import vapoursynth as vs |
然后进行处理
1 | vspipe.exe -c y4m .\webm.vpy output.y4m |