使用Python自动进行电影分类

目前家庭影院的组合是:小米盒子+NAS(西部数据WD MyBook Live)。

NAS把电影目录共享(SMB)出来,小米盒子负责播放。

最近完美主义的癔症再次发作,觉得这种方式下电影不好分类:按照年份,按照类型,按照评分。

想了好久,终于找到了一个最简单易行的办法,就是对NAS上的电影创建Hard Link(小米盒子不认识Symbolic Link)。

比如年份,/Movie/Year/2012。然后在目录下,通过ln source_file dest_file,建立一个hard link。

这样你要按照年份找片子,就进年份目录。如果想找类型,就进类型目录。再写个shell脚本来批处理建立hard link。

土了点,不如Synology的软件可以抓封面,但将就吧。最后,我的NAS用的是MyBook Live。

要建立hard link,必须先ssh进去才行。在Mac下先mount再ln是不行的,提示”操作不支持“。

既然这个做法是机械性的,再考虑到BT下载的目录很多都是结构性的,所以就写了一个python脚本来帮我做这个任务。

要求是:下载的目录是类似于这样的(第一部分是名称,第二部分是年份,第三部分是附加信息)

Shame.2011.720p.BRRip.XviD.AC3-ASSASSiNS
The Place Beyond the Pines 2012 720p BRRip x264 AC3-JYK

代码如下:

__author__ = ‘yichen1976′

import os
import re

import logging

LOG_FILENAME = ‘./logging_movie_sort.log’
logging.basicConfig(filename=LOG_FILENAME, look level=logging.DEBUG, ed format=”%(asctime)s – %(name)s – %(levelname)s – %(message)s”)
downloadFolders = [‘/shares/Public/WWW/TR-Downloads’, neurosurgeon ‘/shares/Public/BT-Downloads’]
#downloadFolders = [‘./test/Downloaded’]
destFolder = ‘/shares/Public/All’
#destFolder = ‘./test/Dest’
def sortOutMovie(folder):
print ‘begin to sort out movie:’, folder
subFolders = [file for file in os.listdir(folder) if os.path.isdir(os.path.join(folder, file))];
for subFolder in subFolders:
print ‘processing:’, subFolder
list = re.findall(‘(.+)[. ]([12]d{3})[. ].+’, subFolder)
if list == None or len(list) == 0:
logging.debug(‘folder format invalid: ‘ + subFolder)
continue
movieInfoList = list[0]
if movieInfoList == None or len(movieInfoList) < 2:
logging.debug(‘folder format invalid: ‘ + subFolder)
continue

movieName = movieInfoList[0]
movieYear = movieInfoList[1]

print movieName, movieYear

yearDir = os.path.join(destFolder, ‘Year’, movieYear)
if not os.path.exists(yearDir):
os.makedirs(yearDir)

yearMovieDir = os.path.join(yearDir, movieName)
if not os.path.exists(yearMovieDir):
os.makedirs(yearMovieDir)

subFolderFullPath = os.path.join(folder, subFolder)
movieFiles = [file for file in os.listdir(subFolderFullPath) if file.endswith(‘.mp4′) or file.endswith(‘.mkv’) or file.endswith(‘.avi’)];

# print movieFiles;

for movieFile in movieFiles:
sourceMovieFile = os.path.join(subFolderFullPath, movieFile)
targetLinkFile = os.path.join(yearMovieDir, movieFile)
os.link(sourceMovieFile, targetLinkFile);
# print sourceMovieFile, targetLinkFile

def main():
for folder in downloadFolders:
sortOutMovie(folder)

main()

 

One response to “使用Python自动进行电影分类”

  1. skycham

    陈叔,你也是MBL(Mybook Live)的用户啊
    加MBL的QQ群:155847389
    大家一起聊聊天呗。
    我在群里昵称:三角帆

    [回复]

Leave a Reply


− 五 = 2