From 3b6c9dd5426b77e6f5f79fbba6cf0617fc4499c1 Mon Sep 17 00:00:00 2001 From: clinton-hall Date: Wed, 5 Nov 2014 16:51:32 +1030 Subject: [PATCH] add mp4-scene-release Defaults. Fixes #606 #545 --- autoProcessMedia.cfg.spec | 4 +- nzbtomedia/__init__.py | 48 ++++++++++++------ nzbtomedia/transcoder/transcoder.py | 75 ++++++++++++++++++++++------- 3 files changed, 94 insertions(+), 33 deletions(-) diff --git a/autoProcessMedia.cfg.spec b/autoProcessMedia.cfg.spec index f59e1cf6..550a4366 100644 --- a/autoProcessMedia.cfg.spec +++ b/autoProcessMedia.cfg.spec @@ -286,7 +286,7 @@ generalOptions = # outputDefault. Loads default configs for the selected device. The remaining options below are ignored. # If you want to use your own profile, leave this blank and set the remaining options below. - # outputDefault profiles allowed: iPad, iPad-1080p, iPad-720p, Apple-TV2, iPod, iPhone, PS3, xbox, Roku-1080p, Roku-720p, Roku-480p, mkv + # outputDefault profiles allowed: iPad, iPad-1080p, iPad-720p, Apple-TV2, iPod, iPhone, PS3, xbox, Roku-1080p, Roku-720p, Roku-480p, mkv, mp4-scene-release outputDefault = #### Define custom settings below. outputVideoExtension = .mp4 @@ -296,6 +296,8 @@ outputVideoResolution = 1920:1080 outputVideoFramerate = 24 outputVideoBitrate = 800000 + outputVideoCRF = 19 + outputVideoLevel = 3.1 outputAudioCodec = ac3 AudioCodecAllow = outputAudioChannels = 6 diff --git a/nzbtomedia/__init__.py b/nzbtomedia/__init__.py index ad91a637..d0e8112e 100644 --- a/nzbtomedia/__init__.py +++ b/nzbtomedia/__init__.py @@ -150,6 +150,8 @@ VCODEC_ALLOW = [] VPRESET = None VFRAMERATE = None VBITRATE = None +VLEVEL = None +VCRF = None VRESOLUTION = None ACODEC = None ACODEC_ALLOW = [] @@ -192,9 +194,9 @@ def initialize(section=None): NZBTOMEDIA_TIMEOUT, FORKS, FORK_DEFAULT, FORK_FAILED_TORRENT, FORK_FAILED, SICKBEARD_TORRENT, SICKBEARD_FAILED, \ NZBTOMEDIA_BRANCH, NZBTOMEDIA_VERSION, NEWEST_VERSION, NEWEST_VERSION_STRING, VERSION_NOTIFY, SYS_ARGV, CFG, \ SABNZB_NO_OF_ARGUMENTS, SABNZB_0717_NO_OF_ARGUMENTS, CATEGORIES, TORRENT_CLIENTAGENT, USELINK, OUTPUTDIRECTORY, \ - NOFLATTEN, UTORRENTPWD, UTORRENTUSR, UTORRENTWEBUI, DELUGEHOST, DELUGEPORT, DELUGEUSR, DELUGEPWD, \ + NOFLATTEN, UTORRENTPWD, UTORRENTUSR, UTORRENTWEBUI, DELUGEHOST, DELUGEPORT, DELUGEUSR, DELUGEPWD, VLEVEL, \ TRANSMISSIONHOST, TRANSMISSIONPORT, TRANSMISSIONPWD, TRANSMISSIONUSR, COMPRESSEDCONTAINER, MEDIACONTAINER, \ - METACONTAINER, SECTIONS, ALL_FORKS, TEST_FILE, GENERALOPTS, LOG_GIT, GROUPS, SEVENZIP, CONCAT, \ + METACONTAINER, SECTIONS, ALL_FORKS, TEST_FILE, GENERALOPTS, LOG_GIT, GROUPS, SEVENZIP, CONCAT, VCRF, \ __INITIALIZED__, AUTO_UPDATE, APP_FILENAME, USER_DELAY, APP_NAME, TRANSCODE, DEFAULTS, GIT_PATH, GIT_USER, \ GIT_BRANCH, GIT_REPO, SYS_ENCODING, NZB_CLIENTAGENT, SABNZBDHOST, SABNZBDPORT, SABNZBDAPIKEY, \ DUPLICATE, IGNOREEXTENSIONS, VEXTENSION, OUTPUTVIDEOPATH, PROCESSOUTPUT, VCODEC, VCODEC_ALLOW, VPRESET, \ @@ -413,6 +415,12 @@ def initialize(section=None): try: VFRAMERATE = float(CFG["Transcoder"]["outputVideoFramerate"].strip()) except: pass + try: + VCRF = int(CFG["Transcoder"]["outputVideoCRF"].strip()) + except: pass + try: + VLEVEL = CFG["Transcoder"]["outputVideoLevel"].strip() + except: pass try: VBITRATE = int((CFG["Transcoder"]["outputVideoBitrate"].strip()).replace('k','000')) except: pass @@ -460,7 +468,7 @@ def initialize(section=None): } transcode_defaults = { 'iPad':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, 'ACHANNELS':2, 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, @@ -468,7 +476,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'iPad-1080p':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':'1920:1080','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, 'ACHANNELS':2, 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, @@ -476,7 +484,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'iPad-720p':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':'1280:720','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, 'ACHANNELS':2, 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, @@ -484,7 +492,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'Apple-TV':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':'1280:720','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'ac3','ACODEC_ALLOW':['ac3'],'ABITRATE':None, 'ACHANNELS':6, 'ACODEC2':'aac','ACODEC2_ALLOW':['libfaac'],'ABITRATE2':None, 'ACHANNELS2':2, @@ -492,7 +500,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'iPod':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':'1280:720','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, 'ACHANNELS':2, 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, 'ACHANNELS2':None, @@ -500,7 +508,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'iPhone':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':'460:320','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, 'ACHANNELS':2, 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, 'ACHANNELS2':None, @@ -508,7 +516,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'PS3':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'ac3','ACODEC_ALLOW':['ac3'],'ABITRATE':None, 'ACHANNELS':6, 'ACODEC2':'aac','ACODEC2_ALLOW':['libfaac'],'ABITRATE2':None, 'ACHANNELS2':2, @@ -516,7 +524,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'xbox':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'ac3','ACODEC_ALLOW':['ac3'],'ABITRATE':None, 'ACHANNELS':6, 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, 'ACHANNELS2':None, @@ -524,7 +532,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'Roku-480p':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, 'ACHANNELS':2, 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, @@ -532,7 +540,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'Roku-720p':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, 'ACHANNELS':2, 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, @@ -540,7 +548,7 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'Roku-1080p':{ - 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':160000, 'ACHANNELS':2, 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, @@ -548,7 +556,15 @@ def initialize(section=None): 'SCODEC':'mov_text' }, 'mkv':{ - 'VEXTENSION':'.mkv','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, + 'VEXTENSION':'.mkv','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':None,'VLEVEL':None, + 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4', 'mpeg2video'], + 'ACODEC':'dts','ACODEC_ALLOW':['libfaac', 'dts', 'ac3', 'mp2', 'mp3'],'ABITRATE':None, 'ACHANNELS':8, + 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, 'ACHANNELS2':None, + 'ACODEC3':'ac3','ACODEC3_ALLOW':['libfaac', 'dts', 'ac3', 'mp2', 'mp3'],'ABITRATE3':None, 'ACHANNELS3':8, + 'SCODEC':'mov_text' + }, + 'mp4-scene-release':{ + 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None,'VCRF':19,'VLEVEL':'3.1', 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4', 'mpeg2video'], 'ACODEC':'dts','ACODEC_ALLOW':['libfaac', 'dts', 'ac3', 'mp2', 'mp3'],'ABITRATE':None, 'ACHANNELS':8, 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, 'ACHANNELS2':None, @@ -563,6 +579,8 @@ def initialize(section=None): VFRAMERATE = transcode_defaults[DEFAULTS]['VFRAMERATE'] VBITRATE = transcode_defaults[DEFAULTS]['VBITRATE'] VRESOLUTION = transcode_defaults[DEFAULTS]['VRESOLUTION'] + VCRF = transcode_defaults[DEFAULTS]['VCFR'] + VLEVEL = transcode_defaults[DEFAULTS]['VLEVEL'] VCODEC_ALLOW = transcode_defaults[DEFAULTS]['VCODEC_ALLOW'] ACODEC = transcode_defaults[DEFAULTS]['ACODEC'] ACODEC_ALLOW = transcode_defaults[DEFAULTS]['ACODEC_ALLOW'] @@ -578,6 +596,8 @@ def initialize(section=None): ABITRATE3 = transcode_defaults[DEFAULTS]['ABITRATE3'] SCODEC = transcode_defaults[DEFAULTS]['SCODEC'] transcode_defaults = {} # clear memory + if transcode_defaults in ['mp4-scene-release'] and not OUTPUTQUALITYPERCENT: + OUTPUTQUALITYPERCENT = 100 if VEXTENSION in allow_subs: ALLOWSUBS = 1 diff --git a/nzbtomedia/transcoder/transcoder.py b/nzbtomedia/transcoder/transcoder.py index 04324691..8ad60498 100644 --- a/nzbtomedia/transcoder/transcoder.py +++ b/nzbtomedia/transcoder/transcoder.py @@ -133,6 +133,8 @@ def buildCommands(file, newDir, movieName, bitbucket): map_cmd = [] video_cmd = [] audio_cmd = [] + audio_cmd2 = [] + audio_cmd3 = [] sub_cmd = [] other_cmd = [] @@ -154,6 +156,12 @@ def buildCommands(file, newDir, movieName, bitbucket): video_cmd.extend(['-b:v', str(nzbtomedia.VBITRATE)]) if nzbtomedia.VRESOLUTION: video_cmd.extend(['-vf', 'scale=' + nzbtomedia.VRESOLUTION]) + if nzbtomedia.VPRESET: + video_cmd.extend(['-preset', nzbtomedia.VPRESET]) + if nzbtomedia.VCRF: + video_cmd.extend(['-crf', str(nzbtomedia.VCRF)]) + if nzbtomedia.VLEVEL: + video_cmd.extend(['-level', str(nzbtomedia.VLEVEL)]) if nzbtomedia.ACODEC: audio_cmd.extend(['-c:a', nzbtomedia.ACODEC]) @@ -217,7 +225,16 @@ def buildCommands(file, newDir, movieName, bitbucket): scale = "-1:" + scale.split(':')[1] if h_scale != 1: video_cmd.extend(['-vf', 'scale=' + scale]) - if ('-vf' in video_cmd or '-r' in video_cmd) and video_cmd[1] == 'copy': + if nzbtomedia.VBITRATE: + video_cmd.extend(['-b:v', str(nzbtomedia.VBITRATE)]) + if nzbtomedia.VPRESET: + video_cmd.extend(['-preset', nzbtomedia.VPRESET]) + if nzbtomedia.VCRF: + video_cmd.extend(['-crf', str(nzbtomedia.VCRF)]) + if nzbtomedia.VLEVEL: + video_cmd.extend(['-level', str(nzbtomedia.VLEVEL)]) + no_copy = ['-vf', '-r', '-crf', '-level', '-preset', '-b:v'] + if video_cmd[1] == 'copy' and any(i in video_cmd for i in no_copy): video_cmd[1] = nzbtomedia.VCODEC if nzbtomedia.VCODEC == 'copy': # force copy. therefore ignore all other video transcoding. video_cmd = ['-c:v', 'copy'] @@ -280,10 +297,16 @@ def buildCommands(file, newDir, movieName, bitbucket): if nzbtomedia.ACHANNELS and channels and channels > nzbtomedia.ACHANNELS: audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS)]) + if audio_cmd[1] == 'copy': + audio_cmd[1] = nzbtomedia.ACODEC if nzbtomedia.ABITRATE and not (nzbtomedia.ABITRATE * 0.9 < bitrate < nzbtomedia.ABITRATE * 1.1): audio_cmd.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE)]) + if audio_cmd[1] == 'copy': + audio_cmd[1] = nzbtomedia.ACODEC if nzbtomedia.OUTPUTQUALITYPERCENT: audio_cmd.extend(['-q:a:' + str(used_audio), str(nzbtomedia.OUTPUTQUALITYPERCENT)]) + if audio_cmd[1] == 'copy': + audio_cmd[1] = nzbtomedia.ACODEC if nzbtomedia.ACODEC2_ALLOW: used_audio += 1 @@ -297,7 +320,7 @@ def buildCommands(file, newDir, movieName, bitbucket): try: channels = int(audio4[0]["channels"]) except: channels = 0 - audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + audio_cmd2.extend(['-c:a:' + str(used_audio), 'copy']) elif audio1: # right language wrong codec. map_cmd.extend(['-map', '0:' + str(audio1[0]["index"])]) a_mapped.extend([audio1[0]["index"]]) @@ -308,11 +331,11 @@ def buildCommands(file, newDir, movieName, bitbucket): channels = int(audio1[0]["channels"]) except: channels = 0 if nzbtomedia.ACODEC2: - audio_cmd.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC2]) + audio_cmd2.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC2]) else: - audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + audio_cmd2.extend(['-c:a:' + str(used_audio), 'copy']) if nzbtomedia.ACODEC2 == 'aac': - audio_cmd.extend(['-strict', '-2']) + audio_cmd2.extend(['-strict', '-2']) elif audio3: # just pick the default audio track map_cmd.extend(['-map', '0:' + str(audio3[0]["index"])]) a_mapped.extend([audio3[0]["index"]]) @@ -323,18 +346,25 @@ def buildCommands(file, newDir, movieName, bitbucket): channels = int(audio3[0]["channels"]) except: channels = 0 if nzbtomedia.ACODEC2: - audio_cmd.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC2]) + audio_cmd2.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC2]) else: - audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + audio_cmd2.extend(['-c:a:' + str(used_audio), 'copy']) if nzbtomedia.ACODEC2 == 'aac': - audio_cmd.extend(['-strict', '-2']) + audio_cmd2.extend(['-strict', '-2']) if nzbtomedia.ACHANNELS2 and channels and channels > nzbtomedia.ACHANNELS2: - audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS2)]) + audio_cmd2.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS2)]) + if audio_cmd2[1] == 'copy': + audio_cmd2[1] = nzbtomedia.ACODEC2 if nzbtomedia.ABITRATE2 and not (nzbtomedia.ABITRATE2 * 0.9 < bitrate < nzbtomedia.ABITRATE2 * 1.1): - audio_cmd.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE2)]) + audio_cmd2.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE2)]) + if audio_cmd2[1] == 'copy': + audio_cmd2[1] = nzbtomedia.ACODEC2 if nzbtomedia.OUTPUTQUALITYPERCENT: - audio_cmd.extend(['-q:a:' + str(used_audio), str(nzbtomedia.OUTPUTQUALITYPERCENT)]) + audio_cmd2.extend(['-q:a:' + str(used_audio), str(nzbtomedia.OUTPUTQUALITYPERCENT)]) + if audio_cmd2[1] == 'copy': + audio_cmd2[1] = nzbtomedia.ACODEC2 + audio_cmd.extend(audio_cmd2) if nzbtomedia.AINCLUDE and audio3 and nzbtomedia.ACODEC3: for audio in audioStreams: @@ -342,6 +372,7 @@ def buildCommands(file, newDir, movieName, bitbucket): continue used_audio += 1 map_cmd.extend(['-map', '0:' + str(audio["index"])]) + audio_cmd3 = [] try: bitrate = int(audio["bit_rate"])/1000 except: bitrate = 0 @@ -349,20 +380,28 @@ def buildCommands(file, newDir, movieName, bitbucket): channels = int(audio["channels"]) except: channels = 0 if audio["codec_name"] in nzbtomedia.ACODEC3_ALLOW: - audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + audio_cmd3.extend(['-c:a:' + str(used_audio), 'copy']) else: if nzbtomedia.ACODEC3: - audio_cmd.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC3]) + audio_cmd3.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC3]) else: - audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + audio_cmd3.extend(['-c:a:' + str(used_audio), 'copy']) if nzbtomedia.ACODEC3 == 'aac': - audio_cmd.extend(['-strict', '-2']) + audio_cmd3.extend(['-strict', '-2']) + if nzbtomedia.ACHANNELS3 and channels and channels > nzbtomedia.ACHANNELS3: - audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS3)]) + audio_cmd3.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS3)]) + if audio_cmd3[1] == 'copy': + audio_cmd3[1] = nzbtomedia.ACODEC3 if nzbtomedia.ABITRATE3 and not (nzbtomedia.ABITRATE3 * 0.9 < bitrate < nzbtomedia.ABITRATE3 * 1.1): - audio_cmd.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE3)]) + audio_cmd3.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE3)]) + if audio_cmd3[1] == 'copy': + audio_cmd3[1] = nzbtomedia.ACODEC3 if nzbtomedia.OUTPUTQUALITYPERCENT > 0: - audio_cmd.extend(['-q:a:' + str(used_audio), str(nzbtomedia.OUTPUTQUALITYPERCENT)]) + audio_cmd3.extend(['-q:a:' + str(used_audio), str(nzbtomedia.OUTPUTQUALITYPERCENT)]) + if audio_cmd3[1] == 'copy': + audio_cmd3[1] = nzbtomedia.ACODEC3 + audio_cmd.extend(audio_cmd3) s_mapped = [] subs1 = []