图像 -> 视频 -> 使用 avconv 的图像不是无损的
image -> video -> image not lossless using avconv
我正在尝试测试使用一些不同的视频编解码器丢失的信息量。我有一个 python 脚本,它使用 PyPNG 编写一系列 8 位 RGB 图像。然后我使用 avconv 对其进行编码,例如
avconv -r 1 -i ../frames/data%03d.png -c:v ffv1 -qscale:v 0 -r 1
outffv1.avi
然后我像这样将其解码回 png
avconv -r 1 -i outffv1.avi -r 1 ./outffv1/frame%03d.png
但是当我比较视频压缩前后的图像时,它们是不同的(平均绝对误差~~15%)。令我困惑的是,这是真的(给予或接受)独立于编解码器。
例如,对于 libtheora 的一系列 qscale 值,我得到了类似的答案。
png 编码,即写入 png,并立即加载回来,没有视频压缩步骤,是无损的。
更新 - 更精确的工作示例:
此处为单个输入框:https://www.dropbox.com/s/2utk1xs2t8heai9/data001.png?dl=0
编码成这样的视频:avconv -r 1 -i ./frames/data%03d.png -c:v ffv1 -qscale:v 0 -r 1 outffv1.avi
此处生成的视频:https://www.dropbox.com/s/g1babae2a41v914/outffv1.avi?dl=0
在这里再次解码为 png:https://www.dropbox.com/s/8i8zg1qn7dxsgat/out001.png?dl=0
使用此命令:avconv -r 1 -i outffv1.avi -qscale:v 31 -r 1 out%03d.png
和图像魔法不同的是这样的
compare out001.png ./frames/data001.png diff.png
给这个(非零)差异
https://www.dropbox.com/s/vpouk54p0dieqif/diff.png?dl=0
您的视频文件很可能使用 YUV 颜色格式。 PNG 使用 RGB。颜色的转换不是无损过程。
我正在尝试测试使用一些不同的视频编解码器丢失的信息量。我有一个 python 脚本,它使用 PyPNG 编写一系列 8 位 RGB 图像。然后我使用 avconv 对其进行编码,例如
avconv -r 1 -i ../frames/data%03d.png -c:v ffv1 -qscale:v 0 -r 1
outffv1.avi
然后我像这样将其解码回 png
avconv -r 1 -i outffv1.avi -r 1 ./outffv1/frame%03d.png
但是当我比较视频压缩前后的图像时,它们是不同的(平均绝对误差~~15%)。令我困惑的是,这是真的(给予或接受)独立于编解码器。
例如,对于 libtheora 的一系列 qscale 值,我得到了类似的答案。
png 编码,即写入 png,并立即加载回来,没有视频压缩步骤,是无损的。
更新 - 更精确的工作示例:
此处为单个输入框:https://www.dropbox.com/s/2utk1xs2t8heai9/data001.png?dl=0
编码成这样的视频:avconv -r 1 -i ./frames/data%03d.png -c:v ffv1 -qscale:v 0 -r 1 outffv1.avi
此处生成的视频:https://www.dropbox.com/s/g1babae2a41v914/outffv1.avi?dl=0
在这里再次解码为 png:https://www.dropbox.com/s/8i8zg1qn7dxsgat/out001.png?dl=0
使用此命令:avconv -r 1 -i outffv1.avi -qscale:v 31 -r 1 out%03d.png
和图像魔法不同的是这样的
compare out001.png ./frames/data001.png diff.png
给这个(非零)差异
https://www.dropbox.com/s/vpouk54p0dieqif/diff.png?dl=0
您的视频文件很可能使用 YUV 颜色格式。 PNG 使用 RGB。颜色的转换不是无损过程。