mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2024-11-14 17:40:24 -08:00
f05b09f349
Updates rarfile to 3.1 Updates stevedore to 3.5.0 Updates appdirs to 1.4.4 Updates click to 8.1.3 Updates decorator to 5.1.1 Updates dogpile.cache to 1.1.8 Updates pbr to 5.11.0 Updates pysrt to 1.1.2 Updates pytz to 2022.6 Adds importlib-metadata version 3.1.1 Adds typing-extensions version 4.1.1 Adds zipp version 3.11.0
100 lines
3.9 KiB
Python
100 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
import logging
|
|
import os
|
|
|
|
from babelfish import Error as BabelfishError, Language
|
|
from enzyme import MKV
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def refine(video, embedded_subtitles=True, **kwargs):
|
|
"""Refine a video by searching its metadata.
|
|
|
|
Several :class:`~subliminal.video.Video` attributes can be found:
|
|
|
|
* :attr:`~subliminal.video.Video.resolution`
|
|
* :attr:`~subliminal.video.Video.video_codec`
|
|
* :attr:`~subliminal.video.Video.audio_codec`
|
|
* :attr:`~subliminal.video.Video.subtitle_languages`
|
|
|
|
:param bool embedded_subtitles: search for embedded subtitles.
|
|
|
|
"""
|
|
# skip non existing videos
|
|
if not video.exists:
|
|
return
|
|
|
|
# check extensions
|
|
extension = os.path.splitext(video.name)[1]
|
|
if extension == '.mkv':
|
|
with open(video.name, 'rb') as f:
|
|
mkv = MKV(f)
|
|
|
|
# main video track
|
|
if mkv.video_tracks:
|
|
video_track = mkv.video_tracks[0]
|
|
|
|
# resolution
|
|
if video_track.height in (480, 720, 1080):
|
|
if video_track.interlaced:
|
|
video.resolution = '%di' % video_track.height
|
|
else:
|
|
video.resolution = '%dp' % video_track.height
|
|
logger.debug('Found resolution %s', video.resolution)
|
|
|
|
# video codec
|
|
if video_track.codec_id == 'V_MPEG4/ISO/AVC':
|
|
video.video_codec = 'H.264'
|
|
logger.debug('Found video_codec %s', video.video_codec)
|
|
elif video_track.codec_id == 'V_MPEG4/ISO/SP':
|
|
video.video_codec = 'DivX'
|
|
logger.debug('Found video_codec %s', video.video_codec)
|
|
elif video_track.codec_id == 'V_MPEG4/ISO/ASP':
|
|
video.video_codec = 'Xvid'
|
|
logger.debug('Found video_codec %s', video.video_codec)
|
|
else:
|
|
logger.warning('MKV has no video track')
|
|
|
|
# main audio track
|
|
if mkv.audio_tracks:
|
|
audio_track = mkv.audio_tracks[0]
|
|
# audio codec
|
|
if audio_track.codec_id == 'A_AC3':
|
|
video.audio_codec = 'Dolby Digital'
|
|
logger.debug('Found audio_codec %s', video.audio_codec)
|
|
elif audio_track.codec_id == 'A_DTS':
|
|
video.audio_codec = 'DTS'
|
|
logger.debug('Found audio_codec %s', video.audio_codec)
|
|
elif audio_track.codec_id == 'A_AAC':
|
|
video.audio_codec = 'AAC'
|
|
logger.debug('Found audio_codec %s', video.audio_codec)
|
|
else:
|
|
logger.warning('MKV has no audio track')
|
|
|
|
# subtitle tracks
|
|
if mkv.subtitle_tracks:
|
|
if embedded_subtitles:
|
|
embedded_subtitle_languages = set()
|
|
for st in mkv.subtitle_tracks:
|
|
if st.language:
|
|
try:
|
|
embedded_subtitle_languages.add(Language.fromalpha3b(st.language))
|
|
except BabelfishError:
|
|
logger.error('Embedded subtitle track language %r is not a valid language', st.language)
|
|
embedded_subtitle_languages.add(Language('und'))
|
|
elif st.name:
|
|
try:
|
|
embedded_subtitle_languages.add(Language.fromname(st.name))
|
|
except BabelfishError:
|
|
logger.debug('Embedded subtitle track name %r is not a valid language', st.name)
|
|
embedded_subtitle_languages.add(Language('und'))
|
|
else:
|
|
embedded_subtitle_languages.add(Language('und'))
|
|
logger.debug('Found embedded subtitle %r', embedded_subtitle_languages)
|
|
video.subtitle_languages |= embedded_subtitle_languages
|
|
else:
|
|
logger.debug('MKV has no subtitle track')
|
|
else:
|
|
logger.debug('Unsupported video extension %s', extension)
|