Delete the Live Photo MOV file that corresponds to a non-existent Live photo.

代码

#!/bin/bash
DIR_PATH="/share/Photo/手机相册备份/"
FFPROBE_PATH="/share/CACHEDEV1_DATA/.qpkg/MediaSignPlayer/CodexPackExt/static/bin/ffprobe"
echo '' > /share/下载/photo/short_videos.txt
for mov_file in $(find $DIR_PATH -iname "*.mov" ! -path "*/@Recycle/*" ! -path "*/.@__thumb/*"); do
    if [ ! -f "${mov_file%.*}.JPG" ] && [ ! -f "${mov_file%.*}.jpg" ] && [ ! -f "${mov_file%.*}.HEIC" ] && [ ! -f "${mov_file%.*}.heic" ]; 
    then
        duration="$("$FFPROBE_PATH" -v quiet -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$mov_file")"
        if [ "$(echo "$duration < 5" | busybox bc)" -eq 1 ]; then
            echo "$mov_file - $duration"
            echo "$mov_file" >> /share/下载/photo/short_videos.txt
        fi
    fi
done
echo -e "\033[32m完成!\033[0m"

为什么有这个脚本

iPhone的Live Photo照片由一张照片+一个小于5秒的MOV视频组成。
通过工具或者手机App将iPhone照片上传到QNAP里,会自动分解成2个文件。
当在QNAP中,通过QuMagie AI相册删除Live Photo照片,系统仅仅删除了照片文件本身,配套的Live Photo MOV文件还保留。

ChatGPT 讲解工作原理

这段代码是一个bash脚本,主要的功能是查找指定目录下的所有MOV视频文件,并检查它们是否有对应的静态图片文件。如果没有对应的图片文件,并且视频文件的时长少于5秒,那么就将其路径打印出来并记录在名为"short_videos.txt"的文本文件中。

具体来说,这段代码的执行过程如下:

将目录路径"/share/Photo/手机相册备份/"和ffprobe程序路径"/share/CACHEDEV1_DATA/.qpkg/MediaSignPlayer/CodexPackExt/static/bin/ffprobe"分别赋值给变量DIR_PATH和FFPROBE_PATH。

将空字符串的内容写入名为"short_videos.txt"的文件。

使用"find"命令在指定目录下查找所有扩展名为.mov的文件,同时使用"! -path"参数排除掉包含字符串"@Recycle"和".@__thumb"的文件夹。然后使用一个for循环遍历所有查找到的视频文件。

使用if条件语句判断视频文件是否存在与其同名的JPG或HEIC格式的图片文件。如果不存在,则执行以下步骤:

使用ffprobe程序获取视频文件的时长。

如果视频文件时长少于5秒,则将其路径打印出来并记录在"short_videos.txt"文件中。

最后打印出"完成!"的提示信息。

总的来说,这段代码的作用是帮助用户查找手机相册备份目录下没有对应静态图片文件的短视频文件,并将其路径记录在文件中,以便用户进一步处理或删除这些文件。

注意

用这个代码的前提是已经安装CAYIN MediaSign Player,并且购买了11.9USD的H.265授权。
其中文件short_videos.txt里面是搜索到的MOV文件绝对路径,为了安全起见,可以手动查看生成的文件列表是否正确,查看对应MOV文件是否有同名的JPG/HEIC照片,如果没有,证明生成的文件是正确的。
可以修改代码来实现查找到MOV文件随即删除:
修改:echo "$mov_file" >> /share/下载/photo/short_videos.txt
为: echo mv "$mov_file" /dev/null >> /share/下载/photo/short_videos.txt
之后在shell里运行 short_videos.txt 里面的代码即可删除对应MOV文件