当压缩非常小的视频时,视频容器本身似乎有很大的开销。
以下是一些使用单帧 16x16 像素全黑图像的示例:
ffmpeg -f lavfi -i color=c=black:s=16x16:r=1:duration=1 -y /tmp/v1.mp4
wc -c /tmp/v1.mp4
# 1625 bytes
ffmpeg -f lavfi -i color=c=black:s=16x16:r=1:duration=1 -codec:v hevc -y /tmp/v2.mp4
wc -c /tmp/v2.mp4
# 3165 bytes
ffmpeg -f lavfi -i color=c=black:s=16x16:r=1:duration=1 -y /tmp/v1.h264
wc -c /tmp/v1.h264
# 744 bytes
ffmpeg -f lavfi -i color=c=black:s=16x16:r=1:duration=1 -codec:v hevc -y /tmp/v2.hevc
wc -c /tmp/v2.hevc
# 2354 bytes
所有这些数字看起来都出乎意料地大。是否ffmpeg
存储了一些不需要的元数据?
有什么办法可以避免这些大笔开销,尤其是对于HEVC
?
相比之下,图像编解码器看起来更紧凑:
ffmpeg -f lavfi -i color=c=black:s=16x16:r=1:duration=1 -y /tmp/v1.png
wc -c /tmp/v1.png
# 94 bytes
ffmpeg -f lavfi -i color=c=black:s=16x16:r=1:duration=1 -y /tmp/v1.jpg
wc -c /tmp/v1.jpg
# 222 bytes
我们需要删除存储的“SEI 用户编码器设置”:
使用上面的例子: