我有一些存储在 MPEG-2 视频中的卡通动画,我想将其转换为 MPEG-4/h264。
MPEG-2 视频压缩相当差,图片细节周围既有“小” JPEG 伪影,又有较大的 JPEG 块,每帧的色调都会略有变化。
压缩文件变得相当大,因为我猜测 ffmpeg 会尝试尽可能多地保留原始内容,这也意味着保留 MPEG-2 压缩的所有错误。
由于动画最初由大面积的平面彩色表面组成,这是视频压缩器的梦想,有没有一种聪明的方式来表达:
“将几乎相同颜色的大面积颜色表面变为单一颜色,以便非常有效地压缩它们?”
换句话说,通过消除 MPEG-2 造成的损害来优化文件大小和视频质量。
ffmpeg 选项-tune animation
可以节省一点文件大小,但效果不大。此外,降低总体视频质量只会在旧压缩损坏的基础上引入“新”压缩损坏。
答案1
后期处理
一般来说,输入的垃圾 = 输出的垃圾,但你可以使用众多 FFmpeg 后处理过滤器之一让它看起来“更好”:氟化氢,页,第7页,种,美国陆军。
带有典型伪影的原始图像
后处理图像
示例命令
ffmpeg -i input.mpg -vf "pp=hb/vb/dr/fq|8" -c:v libx264 -crf 23 -preset medium \
-tune animation -c:a copy output.mkv
-crf
根据您的需要进行调整和预设,如FFmpeg Wiki:H.264 视频编码指南。音频是流已复制在这个例子中。
后期处理可能比较慢。
使用播放器
一些播放器,例如 VLC (视频→后期处理) 可能包含后处理功能,因此简单地使用它而不是重新编码可能是更好的选择。
或者使用ffplay
播放或预览过滤:
ffplay -vf "pp=hb/vb/dr/fq|8" -i input.mpg