群晖(Synology)video Station索引无视频缩略图
一、个人环境
黑群晖DSM6.1.4
二、解决方式
1、参考上文,下载新版本ffmpeg
https://www.cnblogs.com/hester/p/14696235.html
2、编写python脚本,调用ffmpeg截取视频图像
三、解决步骤
目前群晖DSM自带的ffmpeg版本是 2.7.1 ,通过社区第三方安装 4.2.4 版本的ffmpeg,Photo Station索引后,可以生成视频缩略图;但Video Station索引后,仍然无法生成视频缩略图。
个人的解决方式为编写python转换脚本
1、下载新版ffmpeg
如何下载、安装,请参考:https://www.cnblogs.com/hester/p/14696235.html
2、编写python转换脚本
创建脚本文件photo_thumb.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | #!/usr/bin/python # -*- coding:UTF-8 -*- import os import sys def check_type(filename,video_list): """ 检查是否为视频文件 """ array = map (filename.endswith,video_list) if True in array: return True else : return False def get_capture_delay_time(file_path): """ 获取截取图片在视频中位置 """ if not os.path.exists(file_path): return False file_size = os.path.getsize(file_path) if file_size < = 1 * 1024 * 1024 : # 视频大小 <= 1MB,截取视频第1S图片 delay_time = 1 elif file_size < = 4 * 1024 * 1024 : # 1MB < 视频大小 <= 4MB,截取视频第5S图片 delay_time = 5 elif file_size < = 50 * 1024 * 1024 : # 4MB < 视频大小 <= 50MB,截取视频第10S图片 delay_time = 10 else : delay_time = 20 # 50MB < 视频大小,截取视频第20S图片 return delay_time def check_file_existed(file_path): """ 检查文件是否存在 """ if os.path.exists(file_path): return True else : return False def get_file_pre(file_name): """ 获取文件名前缀,如my_video.mp4,返回my_video """ video_name_list = os.path.splitext(file_name) if len (video_name_list) = = 2 : video_name_pre = video_name_list[ 0 ] else : video_name_pre = False return video_name_pre def make_thumb(file_path,video_types): """ 遍历文件夹,调用ffmpeg截取视频图片 """ for dir_path,dir_names,file_names in os.walk(file_path): for name in file_names: # print("*"*20) # print(name) if not check_type(name,video_types): # 不是视频文件,跳过本地迭代,继续下一次迭代 print ( "not video,continue next" ) continue video_full_path = os.path.join(dir_path, name) video_name_pre = get_file_pre(name) if video_name_pre: # 如果缩略图已经存在,跳过本地迭代,继续下一次迭代 pic_name = '%s%s' % (video_name_pre, '.jpg' ) picture_full_path = os.path.join(dir_path,pic_name) ret = check_file_existed(picture_full_path) if ret: print ( "%s existed,continue next" % picture_full_path) continue delay_time = get_capture_delay_time(video_full_path) if not delay_time: # 获取文件大小失败,跳过本地迭代,继续下一次迭代 continue shell = 'ffmpeg -i "%s" -y -ss %s -frames:v 1 "%s"' % \ (video_full_path, delay_time,picture_full_path) # print("#"*20) print (shell) os.system(shell) print ( "%s capture success" % picture_full_path) if __name__ = = "__main__" : # 当前路径中执行脚本 file_path = sys.path[ 0 ] video_types = [ '.mp4' , '.avi' , '.wmv' , '.mkv' , '.flv' ] make_thumb(file_path,video_types) |
也可参考如下链接,直接下载
链接:https://pan.baidu.com/s/1iHW_3GvutSz6d_KPeyxvlA
提取码:3uok
3、上传至群辉共享文件夹
- 打开File Station,上传脚本文件photo_thumb.py至需要转换的文件夹,如video
- 脚本执行时,会自动遍历子文件夹,所以只需在最外层文件夹执行即可
4、进入步骤3中video文件夹,运行脚本
ssh登录群辉,如何设置、登录,请参考https://www.cnblogs.com/hester/p/14696235.html
ssh命令行窗口运行如下命令
1 2 3 | cd / cd volume1 /video/ sudo python3 photo_thumb.py |
注:如上脚本采用python3执行,python2未实验
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架