inc handling dispositions
This commit is contained in:
23
bin/ffx.py
23
bin/ffx.py
@@ -409,8 +409,8 @@ def streams(filename):
|
||||
@click.option('-dts', '--dts-bitrate', type=int, default=DEFAULT_DTS_BANDWIDTH, help=f"Bitrate in kbit/s to be used to encode 6.1 audio streams (default: {DEFAULT_DTS_BANDWIDTH})")
|
||||
|
||||
@click.option('-ds', '--default-subtitle', type=int, default=-1, help='Index of default subtitle stream')
|
||||
@click.option('-fa', '--forced-subtitle', type=int, default=-1, help='Index of forced subtitle stream') # (including default audio stream tag)
|
||||
|
||||
@click.option('-fa', '--forced-audio', type=int, default=-1, help='Index of forced audio stream (including default audio stream tag)')
|
||||
@click.option('-da', '--default-audio', type=int, default=-1, help='Index of default audio stream')
|
||||
|
||||
|
||||
@@ -427,7 +427,7 @@ def streams(filename):
|
||||
@click.option("--dry-run", is_flag=True, default=False)
|
||||
|
||||
|
||||
def convert(ctx, paths, label, video_encoder, quality, preset, stereo_bitrate, ac3_bitrate, dts_bitrate, default_subtitle, forced_audio, default_audio, crop, output_directory, clear_metadata, denoise, no_jellyfin_tweaks, dry_run):
|
||||
def convert(ctx, paths, label, video_encoder, quality, preset, stereo_bitrate, ac3_bitrate, dts_bitrate, default_subtitle, forced_subtitle, default_audio, crop, output_directory, clear_metadata, denoise, no_jellyfin_tweaks, dry_run):
|
||||
"""Batch conversion of audiovideo files in format suitable for web playback, e.g. jellyfin
|
||||
|
||||
Files found under PATHS will be converted according to parameters.
|
||||
@@ -569,19 +569,30 @@ def convert(ctx, paths, label, video_encoder, quality, preset, stereo_bitrate, a
|
||||
|
||||
audioTokens = []
|
||||
|
||||
audioStreams = streamDescriptor[STREAM_TYPE_AUDIO]
|
||||
subtitleStreams = streamDescriptor[STREAM_TYPE_SUBTITLE]
|
||||
|
||||
if default_audio == -1:
|
||||
sourceAudioStreams = streamDescriptor[STREAM_TYPE_AUDIO]
|
||||
sourceAudioStreams = audioStreams
|
||||
else:
|
||||
sourceAudioStreams = getReorderedSubstreams(streamDescriptor[STREAM_TYPE_AUDIO], default_audio)
|
||||
for streamIndex in range(len(audioStreams)):
|
||||
audioStreams[streamIndex]['disposition']['default'] = 1 if streamIndex == default_audio else 0
|
||||
sourceAudioStreams = getReorderedSubstreams(audioStreams, default_audio)
|
||||
dispositionTokens += generateDispositionTokens(sourceAudioStreams)
|
||||
|
||||
if forced_subtitle != -1:
|
||||
for streamIndex in range(len(subtitleStreams)):
|
||||
subtitleStreams[streamIndex]['disposition']['forced'] = 1 if streamIndex == forced_subtitle else 0
|
||||
|
||||
if default_subtitle == -1:
|
||||
sourceSubtitleStreams = streamDescriptor[STREAM_TYPE_SUBTITLE]
|
||||
sourceSubtitleStreams = subtitleStreams
|
||||
else:
|
||||
sourceSubtitleStreams = getReorderedSubstreams(streamDescriptor[STREAM_TYPE_SUBTITLE], default_subtitle)
|
||||
for streamIndex in range(len(subtitleStreams)):
|
||||
subtitleStreams[streamIndex]['disposition']['default'] = 1 if streamIndex == default_subtitle else 0
|
||||
sourceSubtitleStreams = getReorderedSubstreams(subtitleStreams, default_subtitle)
|
||||
dispositionTokens += generateDispositionTokens(sourceSubtitleStreams)
|
||||
|
||||
|
||||
for audioStream in sourceAudioStreams:
|
||||
mappingTokens += ['-map', f"a:{audioStream['src_sub_index']}"]
|
||||
audioTokens += generateAudioTokens(context, audioStream['src_sub_index'], audioStream['layout'])
|
||||
|
||||
Reference in New Issue
Block a user