想把宝贝儿子的视频放在这个网站,但 MP4 文件实在是太大了,既占用存储空间又耗费带宽,所以就转换成专注于网络视频的 WebM 格式,在保持高质量的同时显著缩小文件体积。

使用 FFmpeg 把源视频转换成 WebM 格式

$ ./convert-to-webm.sh input.mp4

#!/bin/bash
# 采用 2-Pass Constant Quality 模式
# 根据视频帧高度调整 `-crf 32` 参数值
ffmpeg -i $1 -c:v libvpx-vp9 -b:v 0 -crf 32 -pass 1 -an -f null /dev/null && \
ffmpeg -i $1 -c:v libvpx-vp9 -b:v 0 -crf 32 -pass 2 -c:a libopus ${1%.*}.webm

First-visit-to-the-Zoo-1080x1080.webm

Playing-in-the-Snow-720x1280.webm

FFmpeg 取“帧”操

$ ffmpeg -ss 00:00:21.5 -i input.webm -frames:v 1 output.webp

$ ffmpeg -i input.webm -vf select='eq(pict_type\,I)' -vsync 0 -q:v 2 output-%03d.jpg

$ ffmpeg -i input.webm -vf select='between(t\,10\,20)*eq(pict_type\,I)' -vsync 0 -q:v 2 output-%03d.jpg

# "-vf"      = "-filter:v"
# "-vsync 0" = "-vsync passthrough"
# "-vsync 2" = "-vsync vfr"
# "-q:v 2"   = "-qscale:v 2"

References: