【问题标题】:How to md5 the video track (only) in ffmpeg如何在ffmpeg中对视频轨道进行md5(仅)
【发布时间】:2020-12-15 21:13:19
【问题描述】:

我有一个.mov 文件,其中包含一个视频和几个音轨。我可以对整个文件进行 md5 处理:

[pdev@d ~]$ md5sum 1_TRAILER_HD_2CH_ES419_ENSUB_16X9_178_2398_DIGITAL_FINAL.mov
042f0e177fe25f562079cc07208ec446

虽然当我尝试在ffmpeg 中做同样的事情时,我得到了不同的值:

$ ffmpeg -i 1_TRAILER_HD_2CH_ES419_ENSUB_16X9_178_2398_DIGITAL_FINAL.mov -f md5 -
MD5=74bd904f1edb4eb1368040e2792d7497   0kB time=00:01:59.11 bitrate=   0.0kbits/s speed=2.36x
frame= 2867 fps= 56 q=-0.0 Lsize=       0kB time=00:01:59.57 bitrate=   0.0kbits/s speed=2.35x
video:23222700kB audio:22421kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

为什么值不同?此外,如何对视频轨道进行校验和?我有各种文件,它们有不同的音轨,想看看这些文件上是否有相同的视频轨道。


更新:我相信这个答案显示了如何计算纯音频校验和,但不确定纯视频:https://superuser.com/a/1044419/118248

【问题讨论】:

    标签: linux video ffmpeg md5 checksum


    【解决方案1】:

    md5sum 与 ffmpeg

    • md5sum 包含完整的文件。
    • ffmpeg 仅计算视频和/或音频流的 MD5。如果您不希望元数据或其他非媒体流数据影响 MD5,则很有用。它还将允许您获取特定流的校验和(仅视频或音频,或同时两者,或每个单独的哈希)。您还可以选择多种算法(MD5、SHA256、CRC32、adler32 等)。

    仅对视频轨道进行校验和

    添加-map option 以仅选择视频流。使用 -map 会禁用默认的 stream selection 行为,并允许您手动选择所需的流。

    示例:解码

    视频和/或音频将被完全解码。这可能很慢。

    ffmpeg -i input.mp4 -map 0:v -f md5 -
    

    示例:流复制

    这只是使用stream copy 模式获取MD5。没有解码。

    ffmpeg -i input.mp4 -map 0:v -c copy -f md5 -
    

    示例:分别显示视频和音频校验和

    使用streamhash 复用器:

    ffmpeg -i input.mp4 -map 0 -c copy -f streamhash -hash md5 -
    ...
    0,v,MD5=50224fec84bc6dfde90d742bcf1d2e01
    1,a,MD5=1d2a32ed72798d66e0110bd02df2be65
    

    示例:每帧

    使用framehash 复用器:

    ffmpeg -i input.mp4 -map 0 -f framehash -
    

    更多信息

    • 有关详细信息,请参阅 MD5hash 多路复用器文档。
    • 如果您想减少冗长并仅输出哈希/校验和/MD5(以及任何错误),请添加 -v error
    • 要使用其他算法,您可以使用 hash 复用器 (-f hash) 和 -hash 选项,例如 -f hash -hash SHA512。默认为 SHA265。

    【讨论】:

    • 太棒了,谢谢。但是 ffmpeg 校验和相当慢! :(
    • 不错,大约快 10 倍。出于好奇,当您说“复制”与“解复用”时,两者有什么区别?
    • @David542 Stream copy 是一个通用的 ffmpeg 术语,指的是 demuxing 和 muxing 而省略了解码和编码。
    • 谢谢,如果我想尝试其他方式,我是否可以使用 0:a 对纯音频做同样的事情?
    • @David542 是的,0:a 将包括所有音频流。 0:a:2 将包括第三个音频流(ffmpeg 从 0 开始计数)。或者使用流哈希。请参见示例 #3。
    猜你喜欢
    • 2012-10-02
    • 2014-10-16
    • 2020-12-27
    • 2020-11-09
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 2016-02-05
    • 2018-02-25
    相关资源
    最近更新 更多