Probe les fichiers à l'indexage
This commit is contained in:
parent
cd44b6815a
commit
82283fa27f
1 changed files with 63 additions and 0 deletions
63
main.py
63
main.py
|
@ -17,6 +17,9 @@ import filerule
|
||||||
from ftplib import FTP
|
from ftplib import FTP
|
||||||
import time
|
import time
|
||||||
import file
|
import file
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
def ftpwalk(directory, ftp):
|
def ftpwalk(directory, ftp):
|
||||||
|
@ -228,7 +231,9 @@ def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
|
||||||
try:
|
try:
|
||||||
resp = api.post_file(path=domain['server'] + film.path, name=film.name, type='film', type_id=filmID)
|
resp = api.post_file(path=domain['server'] + film.path, name=film.name, type='film', type_id=filmID)
|
||||||
if 'id' in resp:
|
if 'id' in resp:
|
||||||
|
probe_data = probe_file(film, domain)
|
||||||
post_markers(api, film, resp['id'])
|
post_markers(api, film, resp['id'])
|
||||||
|
post_probe(api, resp['id'], probe_data)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
@ -244,7 +249,9 @@ def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
|
||||||
resp = api.post_file(path=domain['server'] + film.path, name=film.name, type='film', type_id=filmID,
|
resp = api.post_file(path=domain['server'] + film.path, name=film.name, type='film', type_id=filmID,
|
||||||
**film.additional_info())
|
**film.additional_info())
|
||||||
if 'id' in resp:
|
if 'id' in resp:
|
||||||
|
probe_data = probe_file(film, domain)
|
||||||
post_markers(api, film, resp['id'])
|
post_markers(api, film, resp['id'])
|
||||||
|
post_probe(api, resp['id'], probe_data)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
@ -272,7 +279,9 @@ def handle_films(Lfilm_loc, Lfilm_api, domain, api, rules, tok):
|
||||||
print('post: path=', domain['server'] + film.path)
|
print('post: path=', domain['server'] + film.path)
|
||||||
resp = api.post_file(path=domain['server'] + film.path, name=film.name, type='film', type_id=resp["id"])
|
resp = api.post_file(path=domain['server'] + film.path, name=film.name, type='film', type_id=resp["id"])
|
||||||
if 'id' in resp: # id du file
|
if 'id' in resp: # id du file
|
||||||
|
probe_data = probe_file(film, domain)
|
||||||
post_markers(api, film, resp['id'])
|
post_markers(api, film, resp['id'])
|
||||||
|
post_probe(api, resp['id'], probe_data)
|
||||||
else:
|
else:
|
||||||
Lcannot_post.append(film)
|
Lcannot_post.append(film)
|
||||||
|
|
||||||
|
@ -390,6 +399,9 @@ def handle_episodes(Lepisode_loc, Lepisode_api, domain, api, rules, tok):
|
||||||
resp = api.post_file(path=domain['server'] + episode.path, name=episode.name, type='episode',
|
resp = api.post_file(path=domain['server'] + episode.path, name=episode.name, type='episode',
|
||||||
type_id=resp["id"])
|
type_id=resp["id"])
|
||||||
print('response: ', resp)
|
print('response: ', resp)
|
||||||
|
if 'id' in resp:
|
||||||
|
probe_data = probe_file(episode, domain)
|
||||||
|
post_probe(api, resp['id'], probe_data)
|
||||||
else:
|
else:
|
||||||
print('episode not posted:', resp)
|
print('episode not posted:', resp)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
@ -446,6 +458,57 @@ def find_by_common(L1, L2, f_prop):
|
||||||
break
|
break
|
||||||
return found
|
return found
|
||||||
|
|
||||||
|
def probe_file(file_, domain):
|
||||||
|
filename = domain['server'].replace('ftp://', 'ftp://'+domain['username']+':'+domain['password']+'@')+file_.path+'/'+file_.name
|
||||||
|
print("probe:", filename)
|
||||||
|
try:
|
||||||
|
output = subprocess.check_output("ffprobe -v quiet -show_format -show_streams "+shlex.quote(filename)+" -print_format json", shell=True)
|
||||||
|
except:
|
||||||
|
print('invalid file:', file_.name)
|
||||||
|
return {'sub':[], 'audio':[], 'video':[]}
|
||||||
|
outp = json.loads(output.decode('utf-8'))
|
||||||
|
#print('got output:', outp)
|
||||||
|
container = outp['format']['format_name']
|
||||||
|
streams = outp['streams']
|
||||||
|
streaminfo = {'sub':[], 'audio':[], 'video':[], 'container':container}
|
||||||
|
for s in streams:
|
||||||
|
if s['codec_type'] == 'subtitle':
|
||||||
|
if 'tags' in s:
|
||||||
|
if 'language' in s['tags']:
|
||||||
|
streaminfo['sub'].append(s['tags']['language'])
|
||||||
|
elif 'LANGUAGE' in s['tags']:
|
||||||
|
streaminfo['sub'].append(s['tags']['LANGUAGE'])
|
||||||
|
elif s['codec_type'] == 'audio':
|
||||||
|
if 'tags' in s:
|
||||||
|
if 'language' in s['tags']:
|
||||||
|
streaminfo['audio'].append({'lang':s['tags']['language'], 'name':s['codec_name']})
|
||||||
|
elif 'LANGUAGE' in s['tags']:
|
||||||
|
streaminfo['audio'].append({'lang':s['tags']['LANGUAGE'], 'name':s['codec_name']})
|
||||||
|
else:
|
||||||
|
streaminfo['audio'].append({'name':s['codec_name']})
|
||||||
|
elif s['codec_type'] == 'video':
|
||||||
|
if s['codec_name'] != 'mjpeg':
|
||||||
|
streaminfo['video'].append({'name':s['codec_name'], 'width':s['width'], 'height':s['height']})
|
||||||
|
return streaminfo
|
||||||
|
|
||||||
|
def post_probe(api, fileid, probe_data):
|
||||||
|
name1 = None
|
||||||
|
for codec in probe_data['audio']:
|
||||||
|
if not name1:
|
||||||
|
name1 = codec['name']
|
||||||
|
elif name1 != codec['name']:
|
||||||
|
print('different audio codecs for file:', fileid)
|
||||||
|
api.put_audio_codec(fileid, codec['name'])
|
||||||
|
time.sleep(1)
|
||||||
|
if 'container' in probe_data:
|
||||||
|
api.put_audio_container(fileid, probe_data['container'])
|
||||||
|
time.sleep(1)
|
||||||
|
if len(probe_data['video']) > 0:
|
||||||
|
api.put_video_codec(fileid, probe_data['video'][0]['name'])
|
||||||
|
time.sleep(1)
|
||||||
|
if 'container' in probe_data:
|
||||||
|
api.put_video_container(fileid, probe_data['container'])
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
def post_markers(api, file_, fileid):
|
def post_markers(api, file_, fileid):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue