|
@@ -1,5 +1,6 @@
|
|
|
import sys, os, subprocess, pathlib, logging
|
|
import sys, os, subprocess, pathlib, logging
|
|
|
-import meta, tag
|
|
|
|
|
|
|
+from .consts import Consts
|
|
|
|
|
+from .tag import Tag
|
|
|
|
|
|
|
|
class Mux:
|
|
class Mux:
|
|
|
def __init__(self, logLevel=logging.WARN):
|
|
def __init__(self, logLevel=logging.WARN):
|
|
@@ -8,7 +9,7 @@ class Mux:
|
|
|
self.logger.setLevel(logLevel)
|
|
self.logger.setLevel(logLevel)
|
|
|
|
|
|
|
|
# Tag init
|
|
# Tag init
|
|
|
- self.tags = tag.Tag(logLevel=logLevel)
|
|
|
|
|
|
|
+ self.tags = Tag(logLevel=logLevel)
|
|
|
|
|
|
|
|
def mux(self, media):
|
|
def mux(self, media):
|
|
|
self.logger.info(f"Processing {len(media)} files")
|
|
self.logger.info(f"Processing {len(media)} files")
|
|
@@ -31,7 +32,7 @@ class Mux:
|
|
|
|
|
|
|
|
# Skip groups that do not need muxing
|
|
# Skip groups that do not need muxing
|
|
|
if len(group) == 1:
|
|
if len(group) == 1:
|
|
|
- if 'mux_vers' in group[0] and group[0]['mux_vers'] and group[0]['mux_vers'] >= meta.mux_vers:
|
|
|
|
|
|
|
+ if 'mux_vers' in group[0] and group[0]['mux_vers'] and group[0]['mux_vers'] >= Consts.mux_vers:
|
|
|
self.logger.debug(f"Skipping single-item group with current mux_vers: {group[0]['path']}")
|
|
self.logger.debug(f"Skipping single-item group with current mux_vers: {group[0]['path']}")
|
|
|
continue
|
|
continue
|
|
|
|
|
|
|
@@ -40,10 +41,10 @@ class Mux:
|
|
|
subs = []
|
|
subs = []
|
|
|
videos = []
|
|
videos = []
|
|
|
for file in group:
|
|
for file in group:
|
|
|
- if file['ext'] in meta.video_ext:
|
|
|
|
|
|
|
+ if file['ext'] in Consts.video_ext:
|
|
|
self.logger.info(f"Found video: {file['name']}")
|
|
self.logger.info(f"Found video: {file['name']}")
|
|
|
videos.append(file)
|
|
videos.append(file)
|
|
|
- elif file['ext'] in meta.subs_ext:
|
|
|
|
|
|
|
+ elif file['ext'] in Consts.subs_ext:
|
|
|
self.logger.info(f"Found subtitle: {file['name']}")
|
|
self.logger.info(f"Found subtitle: {file['name']}")
|
|
|
subs.append(file)
|
|
subs.append(file)
|
|
|
else:
|
|
else:
|
|
@@ -59,7 +60,7 @@ class Mux:
|
|
|
# Build args
|
|
# Build args
|
|
|
final = videos[0]['path'].parent.joinpath(f'{videos[0]['group']}.mkv')
|
|
final = videos[0]['path'].parent.joinpath(f'{videos[0]['group']}.mkv')
|
|
|
temp = final.with_suffix('.mkv-remux')
|
|
temp = final.with_suffix('.mkv-remux')
|
|
|
- args = [ 'mkvmerge', '--default-language', meta.lang_default, '-o', temp ]
|
|
|
|
|
|
|
+ args = [ 'mkvmerge', '--default-language', Consts.lang_default, '-o', temp ]
|
|
|
args.append(videos[0]['path'])
|
|
args.append(videos[0]['path'])
|
|
|
|
|
|
|
|
# Subtitles get language and SDH metadata
|
|
# Subtitles get language and SDH metadata
|
|
@@ -85,14 +86,14 @@ class Mux:
|
|
|
err = f"Non-zero exit code: {merge.returncode}"
|
|
err = f"Non-zero exit code: {merge.returncode}"
|
|
|
elif not temp.exists():
|
|
elif not temp.exists():
|
|
|
err = 'file missing'
|
|
err = 'file missing'
|
|
|
- elif temp.stat().st_size < (meta.min_size * size):
|
|
|
|
|
|
|
+ elif temp.stat().st_size < (Consts.min_size * size):
|
|
|
err = 'file too small'
|
|
err = 'file too small'
|
|
|
if err is not None:
|
|
if err is not None:
|
|
|
self.logger.error(f"Mux error ({err}):\n{merge.stdout.decode('utf-8')}")
|
|
self.logger.error(f"Mux error ({err}):\n{merge.stdout.decode('utf-8')}")
|
|
|
continue
|
|
continue
|
|
|
|
|
|
|
|
# Set tag
|
|
# Set tag
|
|
|
- if not self.tags.set_int(temp, meta.mux_tag, meta.mux_vers):
|
|
|
|
|
|
|
+ if not self.tags.set_int(temp, Consts.mux_tag, Consts.mux_vers):
|
|
|
continue
|
|
continue
|
|
|
|
|
|
|
|
# Remove sources
|
|
# Remove sources
|
|
@@ -110,18 +111,18 @@ class Mux:
|
|
|
try:
|
|
try:
|
|
|
self.logger.info(f"Renaming: {temp.name} -> {final.name}")
|
|
self.logger.info(f"Renaming: {temp.name} -> {final.name}")
|
|
|
temp.rename(final)
|
|
temp.rename(final)
|
|
|
- info = meta.default()
|
|
|
|
|
|
|
+ info = Consts.default()
|
|
|
info['path'] = final
|
|
info['path'] = final
|
|
|
info['name'] = final.name
|
|
info['name'] = final.name
|
|
|
info['ext'] = 'mkv'
|
|
info['ext'] = 'mkv'
|
|
|
info['group'] = videos[0]['group']
|
|
info['group'] = videos[0]['group']
|
|
|
- info['mux_vers'] = meta.mux_vers
|
|
|
|
|
|
|
+ info['mux_vers'] = Consts.mux_vers
|
|
|
media.append(info)
|
|
media.append(info)
|
|
|
except BaseException as e:
|
|
except BaseException as e:
|
|
|
err = e
|
|
err = e
|
|
|
if not final.exists():
|
|
if not final.exists():
|
|
|
err = 'file missing'
|
|
err = 'file missing'
|
|
|
- elif final.stat().st_size < (meta.min_size * size):
|
|
|
|
|
|
|
+ elif final.stat().st_size < (Consts.min_size * size):
|
|
|
err = 'file too small'
|
|
err = 'file too small'
|
|
|
if err is not None:
|
|
if err is not None:
|
|
|
self.logger.error(f"Rename error ({final}): {err}")
|
|
self.logger.error(f"Rename error ({final}): {err}")
|