我正在用 python 编写一个脚本,将视频(让这个视频为 X)转换成帧(X′),然后再转换回同一个视频(< em>是)。现在,当我将视频 Y 分解回帧 (Y′) 时,图像不等于 X′ 帧,即它们具有不同的哈希值。我希望它们是相同的,如果不相同是预期的行为,我怎样才能使它们相同?
有什么办法可以去
`视频,X --> 帧,X′,--> 视频,Y,--> 帧,Y′、--> 视频、Z、--> 帧、Z′
等而不改变其先前状态的输出,例如视频 X、Y、Z 和帧 X' 、Y′、Z′在各自的集合中彼此相同吗?
我尝试了多种视频编解码器(mp4、avi、mkv)和图像格式(tif、jpeg、png)。据我所知,有损压缩编解码器不应该以无损方式工作,例如 tif 也不会产生一致的输出。
我已经按照这些 video-to-frame 和 frame-to-video 以及其他教程进行了操作,但无济于事。任何帮助将不胜感激。
答案 0 :(得分:1)
这是由于 generation loss 和可能还有 colorspace 转换和 chroma-subsampling。您必须使用同样支持您的色彩空间(或“像素格式”)的无损工作流程。
示例:
输出无损图像格式:
ffmpeg -i input.mp4 x_%02d.tiff
使用 ffmpeg -h encoder=tiff
查看支持的像素格式列表。
使用 framehash muxer 获取帧哈希:
ffmpeg -v error -i x_%02d.tiff -f framehash -hash md5 -
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 230400, 56a4401ee8f46ef4205508ab06926bdc
0, 1, 1, 1, 230400, 3ff51f5bef6dbf619fd0469bd29f63ec
0, 2, 2, 1, 230400, ef51487b9905ecb4638c9901251a1dde
使用无损编码器编码视频:
ffmpeg -framerate 25 -i x_%02d.tiff -c:v ffv1 video_y.mkv
输出无损图像格式:
ffmpeg -i video_y.mkv y_%02d.tiff
获取帧哈希:
ffmpeg -v error -i y_%02d.tiff -f framehash -hash md5 -
#stream#, dts, pts, duration, size, hash
0, 0, 0, 1, 230400, 56a4401ee8f46ef4205508ab06926bdc
0, 1, 1, 1, 230400, 3ff51f5bef6dbf619fd0469bd29f63ec
0, 2, 2, 1, 230400, ef51487b9905ecb4638c9901251a1dde
哈希匹配。