mirror of https://github.com/morpheus65535/bazarr
78 lines
2.9 KiB
Python
78 lines
2.9 KiB
Python
# coding=utf-8
|
|
# fmt: off
|
|
|
|
import logging
|
|
|
|
from subliminal import Movie
|
|
|
|
from utilities.path_mappings import path_mappings
|
|
from app.database import TableEpisodes, TableMovies
|
|
from subtitles.tools.embedded_subs_reader import parse_video_metadata
|
|
|
|
|
|
def refine_from_ffprobe(path, video):
|
|
if isinstance(video, Movie):
|
|
file_id = TableMovies.select(TableMovies.movie_file_id, TableMovies.file_size)\
|
|
.where(TableMovies.path == path_mappings.path_replace_reverse_movie(path))\
|
|
.dicts()\
|
|
.get_or_none()
|
|
else:
|
|
file_id = TableEpisodes.select(TableEpisodes.episode_file_id, TableEpisodes.file_size)\
|
|
.where(TableEpisodes.path == path_mappings.path_replace_reverse(path))\
|
|
.dicts()\
|
|
.get_or_none()
|
|
|
|
if not file_id:
|
|
return video
|
|
|
|
if isinstance(video, Movie):
|
|
data = parse_video_metadata(file=path, file_size=file_id['file_size'],
|
|
movie_file_id=file_id['movie_file_id'])
|
|
else:
|
|
data = parse_video_metadata(file=path, file_size=file_id['file_size'],
|
|
episode_file_id=file_id['episode_file_id'])
|
|
|
|
if 'ffprobe' not in data and 'mediainfo' not in data:
|
|
logging.debug("No cache available for this file: {}".format(path))
|
|
return video
|
|
|
|
if data['ffprobe']:
|
|
logging.debug('FFprobe found: %s', data['ffprobe'])
|
|
parser_data = data['ffprobe']
|
|
elif data['mediainfo']:
|
|
logging.debug('Mediainfo found: %s', data['mediainfo'])
|
|
parser_data = data['mediainfo']
|
|
else:
|
|
parser_data = {}
|
|
|
|
if 'video' not in parser_data:
|
|
logging.debug('BAZARR parser was unable to find video tracks in the file!')
|
|
else:
|
|
if 'resolution' in parser_data['video'][0]:
|
|
if not video.resolution:
|
|
video.resolution = parser_data['video'][0]['resolution']
|
|
if 'codec' in parser_data['video'][0]:
|
|
if not video.video_codec:
|
|
video.video_codec = parser_data['video'][0]['codec']
|
|
if 'frame_rate' in parser_data['video'][0]:
|
|
if not video.fps:
|
|
if isinstance(parser_data['video'][0]['frame_rate'], float):
|
|
video.fps = parser_data['video'][0]['frame_rate']
|
|
else:
|
|
try:
|
|
video.fps = parser_data['video'][0]['frame_rate'].magnitude
|
|
except AttributeError:
|
|
video.fps = parser_data['video'][0]['frame_rate']
|
|
|
|
if 'audio' not in parser_data:
|
|
logging.debug('BAZARR parser was unable to find audio tracks in the file!')
|
|
else:
|
|
if 'codec' in parser_data['audio'][0]:
|
|
if not video.audio_codec:
|
|
video.audio_codec = parser_data['audio'][0]['codec']
|
|
for track in parser_data['audio']:
|
|
if 'language' in track:
|
|
video.audio_languages.add(track['language'].alpha3)
|
|
|
|
return video
|