我正在用python编写一个脚本,将视频(让此视频为X)转换为帧(X '),然后返回到相同的视频(Y)。现在,当我将视频Y分解为帧(Y ')时,图像不等于X '帧,即它们具有不同的哈希值。我希望它们是相同的,如果不相同是预期的行为,我如何使它们相同?
有没有办法从
' video,X->框架,X ',——>视频,Y,——>frame,Y ',——>视频,Z,——>帧,Z
如视频X、Y、Z和帧X '、Y '、Z '在各自的集合中彼此相同。我尝试过多种视频编解码器(mp4, avi, mkv)和图像格式(tif, jpeg, png)。根据我的理解,有损压缩编解码器不应该工作,因为像tif这样的无损压缩也不能产生一致的输出。
我在其他教程中遵循了这些视频到帧和帧到视频,但无济于事。如有任何帮助,不胜感激。
这是由于生成损失,也可能是由于色彩空间转换和色度子采样。您必须使用支持颜色空间(或"像素格式")的无损工作流。
的例子:
-
输出无损图像格式:
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
散列匹配。