|
|
|
@ -121,19 +121,26 @@ def getUnmuxSequence(trackDescriptor: TrackDescriptor, sourcePath, targetPrefix,
|
|
|
|
|
if not trackCodec in CODEC_LOOKUP_TABLE.keys():
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
# executable and input file
|
|
|
|
|
commandTokens = FfxController.COMMAND_TOKENS + ['-i', sourcePath]
|
|
|
|
|
|
|
|
|
|
trackType = trackDescriptor.getType()
|
|
|
|
|
|
|
|
|
|
targetPathBase = os.path.join(targetDirectory, targetPrefix) if targetDirectory else targetPrefix
|
|
|
|
|
|
|
|
|
|
# mapping
|
|
|
|
|
commandTokens += ['-map',
|
|
|
|
|
f"0:{trackType.indicator()}:{trackDescriptor.getSubIndex()}",
|
|
|
|
|
'-c',
|
|
|
|
|
'copy']
|
|
|
|
|
|
|
|
|
|
# TODO #425: Codec Enum
|
|
|
|
|
# output format
|
|
|
|
|
if 'format' in CODEC_LOOKUP_TABLE[trackCodec].keys():
|
|
|
|
|
commandTokens += ['-f', CODEC_LOOKUP_TABLE[trackCodec]['format']]
|
|
|
|
|
|
|
|
|
|
# TODO #425: Codec enum
|
|
|
|
|
# output filename
|
|
|
|
|
commandTokens += [f"{targetPathBase}.{CODEC_LOOKUP_TABLE[trackCodec]['extension']}"]
|
|
|
|
|
|
|
|
|
|
return commandTokens
|
|
|
|
@ -182,7 +189,7 @@ def unmux(ctx,
|
|
|
|
|
ctx.obj['logger'].warning(f"Skipping file {fp.getFilename()}: Label set but no indicator recognized")
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
ctx.obj['logger'].debug(f"\nUnmuxing file {fp.getFilename()}\n")
|
|
|
|
|
ctx.obj['logger'].info(f"\nUnmuxing file {fp.getFilename()}\n")
|
|
|
|
|
|
|
|
|
|
for trackDescriptor in sourceMediaDescriptor.getAllTrackDescriptors():
|
|
|
|
|
|
|
|
|
@ -195,7 +202,12 @@ def unmux(ctx,
|
|
|
|
|
|
|
|
|
|
if unmuxSequence:
|
|
|
|
|
if not ctx.obj['dry_run']:
|
|
|
|
|
|
|
|
|
|
#TODO #425: Codec Enum
|
|
|
|
|
ctx.obj['logger'].info(f"Unmuxing stream {trackDescriptor.getIndex()} into file {targetPrefix}.{CODEC_LOOKUP_TABLE[trackDescriptor.getCodec()]['extension']}")
|
|
|
|
|
|
|
|
|
|
ctx.obj['logger'].debug(f"Executing unmuxing sequence")
|
|
|
|
|
|
|
|
|
|
out, err, rc = executeProcess(unmuxSequence, context = ctx.obj)
|
|
|
|
|
if rc:
|
|
|
|
|
ctx.obj['logger'].error(f"Unmuxing of stream {trackDescriptor.getIndex()} failed with error ({rc}) {err}")
|
|
|
|
@ -552,21 +564,14 @@ def convert(ctx,
|
|
|
|
|
|
|
|
|
|
#HINT: -1 if not set
|
|
|
|
|
if 'tmdb' in cliOverrides.keys() and 'season' in cliOverrides['tmdb']:
|
|
|
|
|
sSeason = cliOverrides['tmdb']['season']
|
|
|
|
|
showSeason = cliOverrides['tmdb']['season']
|
|
|
|
|
else:
|
|
|
|
|
sSeason = mediaFileProperties.getSeason()
|
|
|
|
|
showSeason = mediaFileProperties.getSeason()
|
|
|
|
|
|
|
|
|
|
if 'tmdb' in cliOverrides.keys() and 'episode' in cliOverrides['tmdb']:
|
|
|
|
|
sEpisode = cliOverrides['tmdb']['episode']
|
|
|
|
|
else:
|
|
|
|
|
sEpisode = mediaFileProperties.getEpisode()
|
|
|
|
|
|
|
|
|
|
if 'tmdb' not in cliOverrides.keys() and showId != -1:
|
|
|
|
|
showSeason, showEpisode = ssc.shiftSeason(showId, season=sSeason, episode=sEpisode)
|
|
|
|
|
showEpisode = cliOverrides['tmdb']['episode']
|
|
|
|
|
else:
|
|
|
|
|
showSeason = sSeason
|
|
|
|
|
showEpisode = sEpisode
|
|
|
|
|
|
|
|
|
|
showEpisode = mediaFileProperties.getEpisode()
|
|
|
|
|
|
|
|
|
|
ctx.obj['logger'].debug(f"Season={showSeason} Episode={showEpisode}")
|
|
|
|
|
|
|
|
|
@ -624,13 +629,23 @@ def convert(ctx,
|
|
|
|
|
indicatorEpisodeDigits = currentShowDescriptor.getIndicatorEpisodeDigits() if not currentPattern is None else ShowDescriptor.DEFAULT_INDICATOR_EPISODE_DIGITS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Shift season and episode if defined for this show
|
|
|
|
|
if ('tmdb' not in cliOverrides.keys() and showId != -1
|
|
|
|
|
and showSeason != -1 and showEpisode != -1):
|
|
|
|
|
shiftedShowSeason, shiftedShowEpisode = ssc.shiftSeason(showId,
|
|
|
|
|
season=showSeason,
|
|
|
|
|
episode=showEpisode)
|
|
|
|
|
else:
|
|
|
|
|
shiftedShowSeason = showSeason
|
|
|
|
|
shiftedShowEpisode = showEpisode
|
|
|
|
|
|
|
|
|
|
# Assemble target filename accordingly depending on TMDB lookup is enabled
|
|
|
|
|
#HINT: -1 if not set
|
|
|
|
|
showId = cliOverrides['tmdb']['show'] if 'tmdb' in cliOverrides.keys() and 'show' in cliOverrides['tmdb'] else (-1 if currentShowDescriptor is None else currentShowDescriptor.getId())
|
|
|
|
|
|
|
|
|
|
if context['use_tmdb'] and showId != -1 and showSeason != -1 and showEpisode != -1:
|
|
|
|
|
if context['use_tmdb'] and showId != -1 and shiftedShowSeason != -1 and shiftedShowEpisode != -1:
|
|
|
|
|
|
|
|
|
|
ctx.obj['logger'].debug(f"Querying TMDB for show_id={showId} season={showSeason} episode{showEpisode}")
|
|
|
|
|
ctx.obj['logger'].debug(f"Querying TMDB for show_id={showId} season={shiftedShowSeason} episode{shiftedShowEpisode}")
|
|
|
|
|
|
|
|
|
|
if currentPattern is None:
|
|
|
|
|
sName, showYear = tc.getShowNameAndYear(showId)
|
|
|
|
@ -639,7 +654,7 @@ def convert(ctx,
|
|
|
|
|
else:
|
|
|
|
|
showFilenamePrefix = currentShowDescriptor.getFilenamePrefix()
|
|
|
|
|
|
|
|
|
|
tmdbEpisodeResult = tc.queryEpisode(showId, showSeason, showEpisode)
|
|
|
|
|
tmdbEpisodeResult = tc.queryEpisode(showId, shiftedShowSeason, shiftedShowEpisode)
|
|
|
|
|
|
|
|
|
|
ctx.obj['logger'].debug(f"tmdbEpisodeResult={tmdbEpisodeResult}")
|
|
|
|
|
|
|
|
|
@ -647,19 +662,18 @@ def convert(ctx,
|
|
|
|
|
filteredEpisodeName = filterFilename(tmdbEpisodeResult['name'])
|
|
|
|
|
sourceFileBasename = TmdbController.getEpisodeFileBasename(showFilenamePrefix,
|
|
|
|
|
filteredEpisodeName,
|
|
|
|
|
showSeason,
|
|
|
|
|
showEpisode,
|
|
|
|
|
shiftedShowSeason,
|
|
|
|
|
shiftedShowEpisode,
|
|
|
|
|
indexSeasonDigits,
|
|
|
|
|
indexEpisodeDigits,
|
|
|
|
|
indicatorSeasonDigits,
|
|
|
|
|
indicatorEpisodeDigits)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if label:
|
|
|
|
|
if showSeason > -1 and showEpisode > -1:
|
|
|
|
|
targetSuffices['se'] = f"S{showSeason:0{indicatorSeasonDigits}d}E{showEpisode:0{indicatorEpisodeDigits}d}"
|
|
|
|
|
elif showEpisode > -1:
|
|
|
|
|
targetSuffices['se'] = f"E{showEpisode:0{indicatorEpisodeDigits}d}"
|
|
|
|
|
if shiftedShowSeason > -1 and shiftedShowEpisode > -1:
|
|
|
|
|
targetSuffices['se'] = f"S{shiftedShowSeason:0{indicatorSeasonDigits}d}E{shiftedShowEpisode:0{indicatorEpisodeDigits}d}"
|
|
|
|
|
elif shiftedShowEpisode > -1:
|
|
|
|
|
targetSuffices['se'] = f"E{shiftedShowEpisode:0{indicatorEpisodeDigits}d}"
|
|
|
|
|
else:
|
|
|
|
|
if 'se' in targetSuffices.keys():
|
|
|
|
|
del targetSuffices['se']
|
|
|
|
|