我目前正在尝试以最小的更改消除重复的视频。这些可能是编码略有不同、分辨率较低或只是更改了元数据。这些视频位于复杂的文件夹结构中,因此只能删除某些文件夹中的重复视频。
因此,我正在寻找一个适用于 Linux 的工具,它只返回找到的重复项的列表,然后我自己用一个简单的脚本进行处理。该工具必须只能与 CLI(或作为库)一起使用,因为我想直接在服务器上运行它,并且只让它自动比较某些子文件夹以节省时间(整个服务器将花费太长时间)。
到目前为止我唯一发现的是杜佩古鲁和视频重复查找器。遗憾的是它们都是 GUI 程序。
目前我正在使用 jdupes 删除所有字节完美副本。但这很容易被更改的元数据或不同的格式(例如 webm、m4v 与 mp4)所愚弄。
有谁知道这样的工具吗?或者这是我需要自己写的东西吗?
答案1
对于简单的精确重复查找器,我更喜欢使用fdupes
工具。
您也可以使用自己的脚本,但您对重复的描述不够严格,无法提供可靠的答案。现在我会坚持使用包装ffprobe
中的ffmpeg
产品。看看这个命令:
ffprobe -hide_banner -loglevel quiet -print_format json -sexagesimal -show_format -show_streams YOUR_FILE.mp4
选项说明:
-hide_banner
- 隐藏横幅,我们不需要它来处理文件-log_level quiet
- 其他消息也不重要-print_format json
- JSON输出格式允许我们使用JSON处理器轻松提取我们感兴趣的数据-sexagesimal
- 时间输出格式HH:MM:SS.MICROSECONDS
-show_format
- 提供有关文件格式的附加信息-show_streams
- 提供有关音频和视频流的信息
这提供了一些有趣的信息。您可以首先使用以下命令提取一些键,例如 format.duration jq
:
ffprobe -hide_banner -loglevel quiet -print_format json -sexagesimal -show_format -show_streams YOUR_FILE.mp4 | jq '$.format.duration'
相同的电影应该具有相同的持续时间。
将它们分组到“由持续时间决定的可能重复”目录后,您可以在特定时刻截取某些帧的屏幕截图:
ffmpeg -i YOUR_FILE.mp4 -ss 00:00:01.000 -vframes 1 output.png
这将保存电影开始第一秒的任何图像的屏幕截图(可能我更喜欢多个时间戳)。
然后是最终缩放图像并使用 ImageMagick 比较它们的相似性的问题(https://imagemagick.org/script/compare.php)或其他类似工具
祝你好运!