保存为png后不同的ffmpeg结果

问题描述 投票:0回答:0

首先将图像保存为 PNG 似乎会产生不同的 ffmpeg 编码。运行此测试代码

from PIL import Image
import cv2
import ffmpeg
import hashlib

ffmpeg.input('test.jpg').output('testff.png').run()
cv2.imwrite('testcv.png',cv2.imread('test.jpg'))
Image.open('test.jpg').save('testpil.png')

hashes=[]
for suf in ['.jpg','ff.png','cv.png','pil.png']:
    dest='test'+suf.replace('.','')+'.mp4'
    ffmpeg.input('test'+suf).output(dest).run()
    hashes.append(hashlib.file_digest(open(dest,'rb'),'md5').hexdigest())
    
print(hashes)

我明白了
['a5b744a8ac0f6de9ec4de43ff737c46e'
,'ab62474f2160899e064ba24890047372'
,'baa788d5e4ef212ab610b8b5cf7772cb'
,'baa788d5e4ef212ab610b8b5cf7772cb']

如您所见,唯一匹配的两个是 cv2 和pillow 转换,并且它们都不与原始转换匹配。就文件大小而言,首先传递给 png 的结果似乎比直接从 jpg 结果小 10% 左右。

为什么会发生这种情况?在准备好编码之前如何避免更改图像数据?

python image video ffmpeg file-format
© www.soinside.com 2019 - 2024. All rights reserved.