利用脚本 使用 ffmpeg 为群晖生成 Photos 套件对应的缩略图

2023-11-16 01:28:07 19点赞 220收藏 39评论

我的环境:

arpl引导,DS3622xs,DSM 7.2.1-69057

我的问题

黑裙的 Synology Photos 无法正常生成视频缩略图。网上替换ffmpeg的方法我已经使用过了,大概可以好一两天,后面又坏了,搞不明白为什么。

常规解决方案:

常规方案网上都是,大致流程如下:

  1. 自行安装ffmpeg;

  2. 运行下面的命令

mv /usr/bin/ffmpeg /usr/bin/ffmpeg.bak
ln -s /var/packages/ffmpeg6/target/bin/ffmpeg /usr/bin/ffmpeg

这里ffmpeg具体的路径和版本有关,如果是ffmpeg4那就是

mv /usr/bin/ffmpeg /usr/bin/ffmpeg.bak
ln -s /var/packages/ffmpeg/target/bin/ffmpeg /usr/bin/ffmpeg

常规方案结果

但这个方法我可以成功一两天,后面就会失效。我猜测是我安装了其他的套件,也调用ffmpeg,后面可能出现了权限之类的问题导致Photos不能用了。但问题是哪怕重新操作也不行。更奇怪的是我再自己创建一个测试的黑裙,安装同样的套件,怎么折腾都不能复现。

只有重装系统可以恢复,但过一会儿又不行了。

与这篇帖子呈现出的结果比较类似:

我自己折腾了好久,实在没办法让系统自己生成,所以想到了另一个方法,就是自己生成缩略图放到@eaDir里。

对于Synology Photos套件(默认一般品质的缩略图)来说,处理/folder/video.mp4文件,生成的是“SYNOPHOTO_THUMB_M.jpg”和“SYNOPHOTO_THUMB_XL.jpg”,放置在/folder/@eaDir/video.mp4/下(注意这里的video.mp4是个文件夹名)

对于Video Station,生成的缩略图是SYNOVIDEO_VIDEO_SCREENSHOT.jpg

文章只针对Synology Photos,Video Station同理

但问题是我不会写自动化脚本。

不过让我翻到了DSM 5.2时期有人写过类似的脚本:

解决方案

原贴主的脚本可以使用,但是有一些不符合我预期的问题,比如路径、文件名不能有特殊符号、空格等。

大学只学过C语言,它的代码我能看懂,但让我改我其实不知道如何增加python的相关函数。好在现在有AI。根据我的需求和AI的帮助,代码修改如下:

利用脚本 使用 ffmpeg 为群晖生成 Photos 套件对应的缩略图
  1. ffmpeg命令是生成视频中间时刻的缩略图,例如视频12s,那么取6s时的图片作为缩略图,为此使用了ffprobe,ffprobe命令是不能直接使用的,所以在脚本开始定义了ffprobe的路径在“/var/packages/ffmpeg/target/bin/ffprobe”实际上就是在你安装的对应ffmpeg旁,如果你把它ln -s到/usr/bin下,ffprobe就可以使用了。这里要注意ffmpeg的版本可能造成这里的路径不一样

    如果不想使用ffprobe可以把-ss命令改成0.001之类很小的时间。

  2. path改成了文件路径,这个是根据AI修改的,AI说原sys.path[0]是命令路径,我如果在根目录执行会对根目录遍历,我不懂python所以我不确定;

  3. 去掉了exte函数,使用os.path.splitext(name)获取扩展名;

  4. 增加了命令行参数-o作为OverWrite命令强制覆盖掉已经存在的缩略图。默认当缩略图文件已存在则跳过;

  5. 跳过@eaDir路径,跳过SYNOPHOTO_FILM_H264.mp4,SYNOPHOTO_FILM_M.mp4和SYNOPHOTO_FILM_MPEG4.mp4;

  6. 原始文件里的路径都要加""双引号,不然不支持特殊字符如空格括号等;

  7. 在执行ffmpeg命令之前要确保文件路径已经存在,ffmpeg不能自主生成路径(原作者的代码是在photo路径下使用,系统已经生成了对应路径),所以加了个生成thumb_dir路径的命令;这样哪怕视频还没放到photo文件夹下索引,也可以提前生成缩略图文件;

  8. ffmpeg的loglevel改成了warning;

  9. ffmpeg的输出定为固定高度,宽度按比例也就这个命令“-vf scale=-1:1280”,里面的-1就是意味着固定原始比例自动生成。群晖生成XL的高度是1280,M是320,SM是240,我这里M给了个480,SM不需要手动生成,系统可以自己生成;

  10. 换成了subprocess.run函数来执行ffmpeg命令,这样似乎是逐个执行,就可以在日志看到现在正在Create,然后Created!,而且可以判断ffmpeg输出正确/错误;

  11. 最后加了个删掉空目录的命令;

  12. 命令执行后打印已完成字样,这样查看日志的时候知道程序运行完了。

使用方法

正常使用:python SynoPhotoThumbGen.py

需要确保已经有python环境

强制覆盖已经有的缩略图:python SynoPhotoThumbGen.py -o

如果不想使用ssh,可以在群晖中添加命令:

利用脚本 使用 ffmpeg 为群晖生成 Photos 套件对应的缩略图

注意这里的“已启动”要勾掉,命令完全由我们自己运行。

利用脚本 使用 ffmpeg 为群晖生成 Photos 套件对应的缩略图

用户自定义脚本写:

find “/volume1/PT/photo(这边要替换)” -maxdepth 2 -name "SynoPhotoThumbGen.py" -type f -exec python {} ;

命令是在/volume1/PT/photo路径下(两层深度内)查找

文件中标注的地方路径要根据自己的需求换掉。比如我常常在/volume1/PT/photo路径下进行预生成缩略图。.py脚本要命名成SynoPhotoThumbGen.py

-maxdepth 2命令是表明层级只搜索两层,避免搜的过深。

举个例子:

--/photo
-----文件夹1
--------SynoPhotoThumbGen.py (可以被找到)
-----文件夹2
--------文件夹3
------------SynoPhotoThumbGen.py (不可以被找到)

当然了,你直接写.py的路径也行。这里就是为/photo/文件夹1/下的所有视频生成缩略图

如果需要觉得已有缩略图有错误,可以增加-o命令

find “/volume1/PT/photo(这边要替换)” -maxdepth 2 -name "SynoPhotoThumbGen.py" -type f -exec python {} -o ;

其他

因为在视频对应的@eaDir/video.ext/下还有个.mp4文件,之前有可能会被识别(现在的脚本不会了,因为排除了@eaDir),可以使用

find -path '星号@eaDir/星号/@eaDir'

查看有多少这种@eaDir套@eaDir的,再使用:

find -type d -path "星号/@eaDir/星号/@eaDir" -print0 | xargs -0 rm -rf

删除掉所有这样的目录。

星号要换成*,

find -type d -path "/@eaDir//@eaDir" -print0 | xargs -0 rm -rf

最后

我不懂编程!不对文件安全负责!!!!!!

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
39评论

  • 精彩
  • 最新
  • 黑裙半洗白可以直接破解ame的,操作非常简单

    校验提示文案

    提交
    我已经半洗白了,一开始可以生成缩略图,过了一两天就又不行了

    校验提示文案

    提交
    而且AME应该只管HEVC的?我是所有的视频都不能生成,很难受

    校验提示文案

    提交
    收起所有回复
  • 第一半洗白,不能用随机的SN。第二不要用ffmpeg6。第三人脸识别补丁要打。第四AME也要补丁打好,正常使用。 我使用到现在没碰到过你的问题。。。你在好好分析下,是不是那步没做到位。。。 对了,SA6400不要用。还不完美。。。

    校验提示文案

    提交
    我周末试试重装一次 [喜极而泣]

    校验提示文案

    提交
    只半洗白,只有以前部分视频没缩略图,后面的都有,就没折腾了。

    校验提示文案

    提交
    还有11条回复
    收起所有回复
  • 为啥我的黑裙啥也不动,photo也能显示缩略图

    校验提示文案

    提交
    所以就很玄学 [苦恼] ,我很难受╯﹏╰

    校验提示文案

    提交
    unraid内arpl引导,DS920+,DSM 7.1.1-42962 Update 2,你黑裙是直装还是虚拟机,大多还是ffmpge的问题

    校验提示文案

    提交
    收起所有回复
  • root密码跟管理员密码是一样的么

    校验提示文案

    提交
    是的

    校验提示文案

    提交
    收起所有回复
  • 3622XS+啥都不用干,填入SN就可以了......其他机型才需要你这些

    校验提示文案

    提交
    你别说,好像是我之前ame破解有问题把所有的带崩了 [喜极而泣] 周末又重装了一次就好了

    校验提示文案

    提交
    收起所有回复
  • 我用狂神的ffmpeg破解,能刷新出缩略图,但在网页端无法播放hevc视频?这是破解不完全还是说正常现象。

    校验提示文案

    提交
    哪个版本的系统?

    校验提示文案

    提交
    7.1.1-42962

    校验提示文案

    提交
    收起所有回复
  • 哪里下载 SynoPhotoThumbGen.py 这个文件

    校验提示文案

    提交
    去看看,不好意思好久没上值得买了 [高兴]

    校验提示文案

    提交
    收起所有回复
  • 脚本链接: 去看看
    我不会写程序,不对文件安全负责。

    校验提示文案

    提交
  • 讲的挺好

    校验提示文案

    提交
  • 我发现反斜杠被自动去掉了。。。

    校验提示文案

    提交
  • 很好

    校验提示文案

    提交
  • 楼主动手能力很强

    校验提示文案

    提交
  • 你的机型装920/918就好了,36xx那些本来就没往多媒体反向设计。

    校验提示文案

    提交
  • 我也是啥都没干就有略缩图了

    校验提示文案

    提交
  • 码不对,找一能用的就好用了。索然引导没报错,但实际没有缩略图

    校验提示文案

    提交
  • 我在白裙上也是自己生成,跟视频抓取,转格式一起,主要烦恼确实是群晖自带的阉割版ffmpeg,每次一更新后就找不到ffprobe了,在面板上看到有更新不去点又有点强迫症

    校验提示文案

    提交
  • 脚本哪里下 我现在遇到的问题是 想让photo索引共享目录的照片 试试你这个方法行不行

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
220
扫一下,分享更方便,购买更轻松