Compare commits

...

2 Commits

Author SHA1 Message Date
Derek a7520a05b8
Add explicit overwrite option 2020-01-01 18:18:58 -07:00
Derek 6cab95e962
Correct handling of streams in some circumstances 2020-01-01 18:18:23 -07:00
1 changed files with 15 additions and 8 deletions

23
main.py
View File

@ -6,10 +6,13 @@ import os
@click.command() @click.command()
@click.argument('infile') @click.argument('infile')
@click.argument('outdir') @click.argument('outdir')
@click.option('--audio-lang') @click.option('--audio', help="Audio language or stream number")
@click.option('--hardcode') @click.option('--hardcode', help="Hardcode target sub stream (language or stream number)")
def main(infile, outdir, hardcode=None, audio_lang='eng'): @click.option('--overwrite/--no-overwrite', default=True)
def main(infile, outdir, hardcode=None, audio='eng', overwrite=True):
outfile = os.path.join(outdir, os.path.splitext(os.path.split(infile)[1])[0]+'.mp4') outfile = os.path.join(outdir, os.path.splitext(os.path.split(infile)[1])[0]+'.mp4')
if os.path.exists(outfile) and not overwrite:
click.abort(0)
probe = ffmpeg.probe(infile) probe = ffmpeg.probe(infile)
audio_streams, sub_streams = [], [] audio_streams, sub_streams = [], []
@ -19,16 +22,20 @@ def main(infile, outdir, hardcode=None, audio_lang='eng'):
elif stream['codec_type'] == 'subtitle': elif stream['codec_type'] == 'subtitle':
sub_streams.append(stream) sub_streams.append(stream)
if len(audio_streams) == 1: if audio.isdigit():
audio_index = audio
elif len(audio_streams) == 1:
audio_index = str(audio_streams[0]['index']) audio_index = str(audio_streams[0]['index'])
else: else:
audio_index = next(str(stream['index']) for stream in audio_streams if stream['tags'].get('language') == audio_lang) audio_index = next(str(stream['index']) for stream in audio_streams if stream['tags'].get('language') == audio)
if hardcode: if hardcode:
if len(sub_streams) == 1: if hardcode.isdigit():
sub_stream = hardcode
elif len(sub_streams) == 1:
sub_stream = sub_streams[0] sub_stream = sub_streams[0]
else: else:
sub = next(stream['index'] for stream in sub_streams if stream['tags'].get('language') == hardcode) sub_stream = next(stream for stream in sub_streams if stream['tags'].get('language') == hardcode)
raw = ffmpeg.input(infile) raw = ffmpeg.input(infile)
if hardcode: if hardcode:
@ -40,7 +47,7 @@ def main(infile, outdir, hardcode=None, audio_lang='eng'):
else: else:
video = raw.video video = raw.video
ffmpeg.output(video, raw[audio_index], outfile, acodec='aac', vcodec='libx264', crf='18', preset='slow').run() ffmpeg.output(video, raw[audio_index], outfile, acodec='aac', vcodec='libx264', crf='18', preset='slow').run(overwrite_output=True)
if __name__ == '__main__': if __name__ == '__main__':
main() main()