将视频转换为帧,然后在不改变 python 中的帧的情况下返回视频
Covert video to frames, then back to video without altering the frames in python
我正在 python 中编写脚本,将视频(假设此视频为 X)转换为帧(X′) 然后回到同一视频 (Y)。现在,当我将视频 Y 拆分回帧 (Y′) 时,图像不等于 X′ 帧,即它们具有不同的哈希值。我希望它们是相同的,如果不相同是预期的行为,我怎样才能使它们相同?
有没有办法从
`video, X --> frames, X′, --> video, Y, --> 帧, Y′, --> 视频, Z, --> 帧, Z ′
等等,而不改变其先前状态的输出,例如视频 X、Y、Z 和框架 X′, Y′, Z′ 彼此相同他们各自的集合?
我尝试了多种视频编解码器(mp4、avi、mkv)和图像格式(tif、jpeg、png)。据我了解,有损压缩编解码器不应该通过无损压缩工作,例如 tif 也不会产生一致的输出。
我在其他教程中遵循了这些 video-to-frame and frame-to-video,但无济于事。任何帮助将不胜感激。
这是由于 generation loss and possibly also colorspace conversion and 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
哈希匹配。
我正在 python 中编写脚本,将视频(假设此视频为 X)转换为帧(X′) 然后回到同一视频 (Y)。现在,当我将视频 Y 拆分回帧 (Y′) 时,图像不等于 X′ 帧,即它们具有不同的哈希值。我希望它们是相同的,如果不相同是预期的行为,我怎样才能使它们相同?
有没有办法从
`video, X --> frames, X′, --> video, Y, --> 帧, Y′, --> 视频, Z, --> 帧, Z ′
等等,而不改变其先前状态的输出,例如视频 X、Y、Z 和框架 X′, Y′, Z′ 彼此相同他们各自的集合?
我尝试了多种视频编解码器(mp4、avi、mkv)和图像格式(tif、jpeg、png)。据我了解,有损压缩编解码器不应该通过无损压缩工作,例如 tif 也不会产生一致的输出。
我在其他教程中遵循了这些 video-to-frame and frame-to-video,但无济于事。任何帮助将不胜感激。
这是由于 generation loss and possibly also colorspace conversion and 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
哈希匹配。