群晖(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
#!/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命令行窗口运行如下命令
cd / cd volume1/video/ sudo python3 photo_thumb.py
注:如上脚本采用python3执行,python2未实验