From 1b25bc3773947d9fe53c23daff4ac81a89ad6156 Mon Sep 17 00:00:00 2001 From: clinton-hall Date: Fri, 11 Jul 2014 11:25:54 +0930 Subject: [PATCH] add Audio Channels. #474 --- autoProcessMedia.cfg.spec | 5 +- nzbToMedia.py | 55 +++++++++++---------- nzbtomedia/__init__.py | 77 +++++++++++++++++------------ nzbtomedia/nzbToMediaConfig.py | 6 ++- nzbtomedia/transcoder/transcoder.py | 27 +++++++++- 5 files changed, 109 insertions(+), 61 deletions(-) diff --git a/autoProcessMedia.cfg.spec b/autoProcessMedia.cfg.spec index 8f4dda18..d4ba5747 100644 --- a/autoProcessMedia.cfg.spec +++ b/autoProcessMedia.cfg.spec @@ -280,12 +280,15 @@ outputVideoBitrate = 800000 outputAudioCodec = ac3 AudioCodecAllow = - outputAudioBitrate = 160000 + outputAudioChannels = 6 + outputAudioBitrate = 640k outputAudioTrack2Codec = libfaac AudioCodec2Allow = + outputAudioTrack2Channels = 2 outputAudioTrack2Bitrate = 128000 outputAudioOtherCodec = libmp3lame AudioOtherCodecAllow = + outputAudioOtherChannels = outputAudioOtherBitrate = 128000 outputSubtitleCodec = diff --git a/nzbToMedia.py b/nzbToMedia.py index 3296e1e5..f8aed879 100755 --- a/nzbToMedia.py +++ b/nzbToMedia.py @@ -296,12 +296,12 @@ # getSubs (0, 1). # # set to 1 to download subtitles. -#getSubs = 0 +#getSubs=0 # subLanguages. # # subLanguages. create a list of languages in the order you want them in your subtitles. -#subLanguages = eng,spa,fra +#subLanguages=eng,spa,fra # Transcode (0, 1). # @@ -316,7 +316,7 @@ # set niceness level. # # Only works on Linux. Highest priority is -20, lowest priority is 19. -#niceness = 0 +#niceness=0 # ignore extensions. # @@ -326,77 +326,80 @@ # outputFastStart (0,1). # # outputFastStart. 1 will use -movflags + faststart. 0 will disable this from being used. -#outputFastStart = 0 +#outputFastStart=0 # outputVideoPath. # # outputVideoPath. Set path you want transcoded videos moved to. Leave blank to disable. -#outputVideoPath = +#outputVideoPath= # processOutput (0,1). # # processOutput. 1 will send the outputVideoPath to SickBeard/CouchPotato. 0 will send original files. -#processOutput = 0 +#processOutput=0 # audioLanguage. # # audioLanguage. set the 3 letter language code you want as your primary audio track. -#audioLanguage = eng +#audioLanguage=eng # allAudioLanguages (0,1). # # allAudioLanguages. 1 will keep all audio tracks (uses AudioCodec3) where available. -#allAudioLanguages = 0 +#allAudioLanguages=0 # allSubLanguages (0,1). # # allSubLanguages. 1 will keep all exisiting sub languages. 0 will discare those not in your list above. -#allSubLanguages = 0 +#allSubLanguages=0 # embedSubs (0,1). # # embedSubs. 1 will embded external sub/srt subs into your video if this is supported. -#embedSubs = 1 +#embedSubs=1 # burnInSubtitle (0,1). # # burnInSubtitle. burns the default sub language into your video (needed for players that don't support subs) -#burnInSubtitle = 0 +#burnInSubtitle=0 # extractSubs (0,1). # # extractSubs. 1 will extract subs from the video file and save these as external srt files. -#extractSubs = 0 +#extractSubs=0 # externalSubDir. # # externalSubDir. set the directory where subs should be saved (if not the same directory as the video) -#externalSubDir = +#externalSubDir= # outputDefault (None, iPad, iPad-1080p, iPad-720p, Apple-TV2, iPod, iPhone, PS3, Roku-1080p, Roku-720p, Roku-480p). # # outputDefault. Loads default configs for the selected device. The remaining options below are ignored. # If you want to use your own profile, set None and set the remaining options below. -#outputDefault = None +#outputDefault=None # ffmpeg output settings. #outputVideoExtension=.mp4 #outputVideoCodec=libx264 -#VideoCodecAllow = +#VideoCodecAllow= #outputVideoPreset=medium #outputVideoFramerate=24 #outputVideoBitrate=800k -#outputAudioCodec=libmp3lame -#AudioCodecAllow = -#outputAudioBitrate=128k -#outputQualityPercent = 0 -#outputAudioTrack2Codec = libfaac -#AudioCodec2Allow = -#outputAudioTrack2Bitrate = 128k -#outputAudioOtherCodec = libmp3lame -#AudioOtherCodecAllow = -#outputAudioOtherBitrate = 128k -#outputSubtitleCodec = +#outputAudioCodec=ac3 +#AudioCodecAllow= +#outputAudioChannels=6 +#outputAudioBitrate=640k +#outputQualityPercent= +#outputAudioTrack2Codec=libfaac +#AudioCodec2Allow= +#outputAudioTrack2Channels=2 +#outputAudioTrack2Bitrate=160k +#outputAudioOtherCodec=libmp3lame +#AudioOtherCodecAllow= +#outputAudioOtherChannels=2 +#outputAudioOtherBitrate=128k +#outputSubtitleCodec= ## WakeOnLan diff --git a/nzbtomedia/__init__.py b/nzbtomedia/__init__.py index 295c9c01..45038f77 100644 --- a/nzbtomedia/__init__.py +++ b/nzbtomedia/__init__.py @@ -146,12 +146,15 @@ VBITRATE = None VRESOLUTION = None ACODEC = None ACODEC_ALLOW = [] +ACHANNELS = None ABITRATE = None ACODEC2 = None ACODEC2_ALLOW = [] +ACHANNELS2 = None ABITRATE2 = None ACODEC3 = None ACODEC3_ALLOW = [] +ACHANNELS3 = None ABITRATE3 = None SCODEC = None OUTPUTFASTSTART = None @@ -191,7 +194,7 @@ def initialize(section=None): NICENESS, LOG_DEBUG, FORCE_CLEAN, FFMPEG_PATH, FFMPEG, FFPROBE, AUDIOCONTAINER, EXTCONTAINER, TORRENT_CLASS, \ DELETE_ORIGINAL, PASSWORDSFILE, USER_DELAY, USER_SCRIPT, USER_SCRIPT_CLEAN, USER_SCRIPT_MEDIAEXTENSIONS, \ USER_SCRIPT_PARAM, USER_SCRIPT_RUNONCE, USER_SCRIPT_SUCCESSCODES, DOWNLOADINFO, CHECK_MEDIA, SAFE_MODE, \ - TORRENT_DEFAULTDIR, NZB_DEFAULTDIR, REMOTEPATHS, LOG_ENV, PID_FILE, MYAPP + TORRENT_DEFAULTDIR, NZB_DEFAULTDIR, REMOTEPATHS, LOG_ENV, PID_FILE, MYAPP, ACHANNELS, ACHANNELS2, ACHANNELS3 if __INITIALIZED__: return False @@ -376,18 +379,27 @@ def initialize(section=None): ACODEC = CFG["Transcoder"]["outputAudioCodec"].strip() ACODEC_ALLOW = CFG["Transcoder"]["AudioCodecAllow"].strip() if isinstance(ACODEC_ALLOW, str): ACODEC_ALLOW = ACODEC_ALLOW.split(',') + try: + ACHANNELS = int(CFG["Transcoder"]["outputAudioChannels"].strip()) + except: pass try: ABITRATE = int((CFG["Transcoder"]["outputAudioBitrate"].strip()).replace('k','000')) except: pass ACODEC2 = CFG["Transcoder"]["outputAudioTrack2Codec"].strip() ACODEC2_ALLOW = CFG["Transcoder"]["AudioCodec2Allow"].strip() if isinstance(ACODEC2_ALLOW, str): ACODEC2_ALLOW = ACODEC2_ALLOW.split(',') + try: + ACHANNELS2 = int(CFG["Transcoder"]["outputAudioTrack2Channels"].strip()) + except: pass try: ABITRATE2 = int((CFG["Transcoder"]["outputAudioTrack2Bitrate"].strip()).replace('k','000')) except: pass ACODEC3 = CFG["Transcoder"]["outputAudioOtherCodec"].strip() ACODEC3_ALLOW = CFG["Transcoder"]["AudioOtherCodecAllow"].strip() if isinstance(ACODEC3_ALLOW, str): ACODEC3_ALLOW = ACODEC3_ALLOW.split(',') + try: + ACHANNELS3 = int(CFG["Transcoder"]["outputAudioOtherChannels"].strip()) + except: pass try: ABITRATE3 = int((CFG["Transcoder"]["outputAudioOtherBitrate"].strip()).replace('k','000')) except: pass @@ -405,81 +417,81 @@ def initialize(section=None): 'iPad':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, - 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, 'ACHANNELS':2, + 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS':None, 'SCODEC':'mov_text' }, 'iPad-1080p':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':'1920:1080','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, - 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, 'ACHANNELS':2, + 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' }, 'iPad-720p':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':'1280:720','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, - 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':None, 'ACHANNELS':2, + 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' }, 'Apple-TV':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':'1280:720','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'ac3','ACODEC_ALLOW':['ac3'],'ABITRATE':None, - 'ACODEC2':'aac','ACODEC2_ALLOW':['libfaac'],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'ac3','ACODEC_ALLOW':['ac3'],'ABITRATE':None, 'ACHANNELS':6, + 'ACODEC2':'aac','ACODEC2_ALLOW':['libfaac'],'ABITRATE2':None, 'ACHANNELS2':2, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' }, 'iPod':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':'1280:720','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, - 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, 'ACHANNELS':2, + 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, 'ACHANNELS2':None, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' }, 'iPhone':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':'460:320','VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, - 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, 'ACHANNELS':2, + 'ACODEC2':None,'ACODEC2_ALLOW':[],'ABITRATE2':None, 'ACHANNELS2':None, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' }, 'PS3':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'ac3','ACODEC_ALLOW':['ac3'],'ABITRATE':None, - 'ACODEC2':'aac','ACODEC2_ALLOW':['libfaac'],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'ac3','ACODEC_ALLOW':['ac3'],'ABITRATE':None, 'ACHANNELS':6, + 'ACODEC2':'aac','ACODEC2_ALLOW':['libfaac'],'ABITRATE2':None, 'ACHANNELS2':2, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' }, 'Roku-480p':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, - 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, 'ACHANNELS':2, + 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' }, 'Roku-720p':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, - 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':128000, 'ACHANNELS':2, + 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' }, 'Roku-1080p':{ 'VEXTENSION':'.mp4','VCODEC':'libx264','VPRESET':None,'VFRAMERATE':None,'VBITRATE':None, 'VRESOLUTION':None,'VCODEC_ALLOW':['libx264', 'h264', 'h.264', 'AVC', 'avc', 'mpeg4', 'msmpeg4', 'MPEG-4'], - 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':160000, - 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, - 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, + 'ACODEC':'aac','ACODEC_ALLOW':['libfaac'],'ABITRATE':160000, 'ACHANNELS':2, + 'ACODEC2':'ac3','ACODEC2_ALLOW':['ac3'],'ABITRATE2':None, 'ACHANNELS2':6, + 'ACODEC3':None,'ACODEC3_ALLOW':[],'ABITRATE3':None, 'ACHANNELS3':None, 'SCODEC':'mov_text' } } @@ -493,12 +505,15 @@ def initialize(section=None): VCODEC_ALLOW = transcode_defaults[DEFAULTS]['VCODEC_ALLOW'] ACODEC = transcode_defaults[DEFAULTS]['ACODEC'] ACODEC_ALLOW = transcode_defaults[DEFAULTS]['ACODEC_ALLOW'] + ACHANNELS = transcode_defaults[DEFAULTS]['ACHANNELS'] ABITRATE = transcode_defaults[DEFAULTS]['ABITRATE'] ACODEC2 = transcode_defaults[DEFAULTS]['ACODEC2'] ACODEC2_ALLOW = transcode_defaults[DEFAULTS]['ACODEC2_ALLOW'] + ACHANNELS2 = transcode_defaults[DEFAULTS]['ACHANNELS2'] ABITRATE2 = transcode_defaults[DEFAULTS]['ABITRATE2'] ACODEC3 = transcode_defaults[DEFAULTS]['ACODEC3'] ACODEC3_ALLOW = transcode_defaults[DEFAULTS]['ACODEC3_ALLOW'] + ACHANNELS3 = transcode_defaults[DEFAULTS]['ACHANNELS3'] ABITRATE3 = transcode_defaults[DEFAULTS]['ABITRATE3'] SCODEC = transcode_defaults[DEFAULTS]['SCODEC'] transcode_defaults = {} # clear memory diff --git a/nzbtomedia/nzbToMediaConfig.py b/nzbtomedia/nzbToMediaConfig.py index 2785ac80..2f245b68 100644 --- a/nzbtomedia/nzbToMediaConfig.py +++ b/nzbtomedia/nzbToMediaConfig.py @@ -373,11 +373,13 @@ class ConfigObj(configobj.ConfigObj, Section): envKeys = ['TRANSCODE', 'DUPLICATE', 'NICENESS', 'IGNOREEXTENSIONS', 'OUTPUTFASTSTART', 'OUTPUTVIDEOPATH', 'PROCESSOUTPUT', 'AUDIOLANGUAGE', 'ALLAUDIOLANGUAGES', 'SUBLANGUAGES', 'ALLSUBLANGUAGES', 'EMBEDSUBS', 'BURNINSUBTITLE', 'EXTRACTSUBS', 'EXTERNALSUBDIR', 'OUTPUTDEFAULT', 'OUTPUTVIDEOEXTENSION', 'OUTPUTVIDEOCODEC', 'VIDEOCODECALLOW', 'OUTPUTVIDEOPRESET', 'OUTPUTVIDEOFRAMERATE', 'OUTPUTVIDEOBITRATE', 'OUTPUTAUDIOCODEC', 'AUDIOCODECALLOW', 'OUTPUTAUDIOBITRATE', 'OUTPUTQUALITYPERCENT', 'GETSUBS', - 'OUTPUTAUDIOTRACK2CODEC', 'AUDIOCODEC2ALLOW', 'OUTPUTAUDIOTRACK2BITRATE', 'OUTPUTAUDIOOTHERCODEC', 'AUDIOOTHERCODECALLOW', 'OUTPUTAUDIOOTHERBITRATE', 'OUTPUTSUBTITLECODEC'] + 'OUTPUTAUDIOTRACK2CODEC', 'AUDIOCODEC2ALLOW', 'OUTPUTAUDIOTRACK2BITRATE', 'OUTPUTAUDIOOTHERCODEC', 'AUDIOOTHERCODECALLOW', 'OUTPUTAUDIOOTHERBITRATE', + 'OUTPUTSUBTITLECODEC', 'OUTPUTAUDIOCHANNELS', 'OUTPUTAUDIOTRACK2CHANNELS', 'OUTPUTAUDIOOTHERCHANNELS'] cfgKeys = ['transcode', 'duplicate', 'niceness', 'ignoreExtensions', 'outputFastStart', 'outputVideoPath', 'processOutput', 'audioLanguage', 'allAudioLanguages', 'subLanguages', 'allSubLanguages', 'embedSubs', 'burnInSubtitle', 'extractSubs', 'externalSubDir', 'outputDefault', 'outputVideoExtension', 'outputVideoCodec', 'VideoCodecAllow', 'outputVideoPreset', 'outputVideoFramerate', 'outputVideoBitrate', 'outputAudioCodec', 'AudioCodecAllow', 'outputAudioBitrate', 'outputQualityPercent', 'getSubs', - 'outputAudioTrack2Codec', 'AudioCodec2Allow', 'outputAudioTrack2Bitrate', 'outputAudioOtherCodec', 'AudioOtherCodecAllow', 'outputAudioOtherBitrate', 'outputSubtitleCodec'] + 'outputAudioTrack2Codec', 'AudioCodec2Allow', 'outputAudioTrack2Bitrate', 'outputAudioOtherCodec', 'AudioOtherCodecAllow', 'outputAudioOtherBitrate', + 'outputSubtitleCodec', 'outputAudioChannels', 'outputAudioTrack2Channels', 'outputAudioOtherChannels'] for index in range(len(envKeys)): key = 'NZBPO_' + envKeys[index] if os.environ.has_key(key): diff --git a/nzbtomedia/transcoder/transcoder.py b/nzbtomedia/transcoder/transcoder.py index 3c3d2d61..186fc8ac 100644 --- a/nzbtomedia/transcoder/transcoder.py +++ b/nzbtomedia/transcoder/transcoder.py @@ -93,6 +93,8 @@ def buildCommands(file, newDir): audio_cmd.extend(['-strict', '-2']) else: audio_cmd.extend(['-c:a', 'copy']) + if nzbtomedia.ACHANNELS: + audio_cmd.extend(['-ac', str(nzbtomedia.ACHANNELS)]) if nzbtomedia.ABITRATE: audio_cmd.extend(['-b:a', str(nzbtomedia.ABITRATE)]) if nzbtomedia.OUTPUTQUALITYPERCENT: @@ -163,7 +165,10 @@ def buildCommands(file, newDir): map_cmd.extend(['-map', '0:' + str(audio2[0]["index"])]) a_mapped.extend([audio2[0]["index"]]) bitrate = int(audio2[0]["bit_rate"])/1000 - audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + channels = int(audio2[0]["channels"]) + audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + if nzbtomedia.ACHANNELS and channels > nzbtomedia.ACHANNELS: + audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS)]) 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 nzbtomedia.OUTPUTQUALITYPERCENT: @@ -171,12 +176,15 @@ def buildCommands(file, newDir): elif audio1: # right language wrong codec. map_cmd.extend(['-map', '0:' + str(audio1[0]["index"])]) a_mapped.extend([audio1[0]["index"]]) + channels = int(audio1[0]["channels"]) if nzbtomedia.ACODEC: audio_cmd.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC]) else: audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) if nzbtomedia.ACODEC == 'aac': audio_cmd.extend(['-strict', '-2']) + if nzbtomedia.ACHANNELS and channels > nzbtomedia.ACHANNELS: + audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS)]) if nzbtomedia.ABITRATE: audio_cmd.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE)]) if nzbtomedia.OUTPUTQUALITYPERCENT: @@ -184,12 +192,15 @@ def buildCommands(file, newDir): elif audio3: # just pick the default audio track map_cmd.extend(['-map', '0:' + str(audio3[0]["index"])]) a_mapped.extend([audio3[0]["index"]]) + channels = int(audio3[0]["channels"]) if nzbtomedia.ACODEC: audio_cmd.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC]) else: audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) if nzbtomedia.ACODEC == 'aac': audio_cmd.extend(['-strict', '-2']) + if nzbtomedia.ACHANNELS and channels > nzbtomedia.ACHANNELS: + audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS)]) if nzbtomedia.ABITRATE: audio_cmd.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE)]) if nzbtomedia.OUTPUTQUALITYPERCENT: @@ -202,7 +213,10 @@ def buildCommands(file, newDir): map_cmd.extend(['-map', '0:' + str(audio4[0]["index"])]) a_mapped.extend([audio4[0]["index"]]) bitrate = int(audio4[0]["bit_rate"])/1000 + channels = int(audio4[0]["channels"]) audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + if nzbtomedia.ACHANNELS2 and channels > nzbtomedia.ACHANNELS2: + audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS2)]) 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)]) if nzbtomedia.OUTPUTQUALITYPERCENT: @@ -210,12 +224,15 @@ def buildCommands(file, newDir): elif audio1: # right language wrong codec. map_cmd.extend(['-map', '0:' + str(audio1[0]["index"])]) a_mapped.extend([audio1[0]["index"]]) + channels = int(audio1[0]["channels"]) if nzbtomedia.ACODEC2: audio_cmd.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC2]) else: audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) if nzbtomedia.ACODEC2 == 'aac': audio_cmd.extend(['-strict', '-2']) + if nzbtomedia.ACHANNELS2 and channels > nzbtomedia.ACHANNELS2: + audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS2)]) if nzbtomedia.ABITRATE2: audio_cmd.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE2)]) if nzbtomedia.OUTPUTQUALITYPERCENT: @@ -223,12 +240,15 @@ def buildCommands(file, newDir): elif audio3: # just pick the default audio track map_cmd.extend(['-map', '0:' + str(audio3[0]["index"])]) a_mapped.extend([audio3[0]["index"]]) + channels = int(audio3[0]["channels"]) if nzbtomedia.ACODEC2: audio_cmd.extend(['-c:a:' + str(used_audio), nzbtomedia.ACODEC2]) else: audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) if nzbtomedia.ACODEC2 == 'aac': audio_cmd.extend(['-strict', '-2']) + if nzbtomedia.ACHANNELS2 and channels > nzbtomedia.ACHANNELS2: + audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS2)]) if nzbtomedia.ABITRATE2: audio_cmd.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE2)]) if nzbtomedia.OUTPUTQUALITYPERCENT: @@ -242,8 +262,11 @@ def buildCommands(file, newDir): map_cmd.extend(['-map', '0:' + str(audio["index"])]) codec = audio["codec_name"] bitrate = int(audio3[0]["bit_rate"])/1000 + channels = int(audio3[0]["channels"]) if audio["codec_name"] in nzbtomedia.ACODEC3_ALLOW: audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) + if nzbtomedia.ACHANNELS3 and channels > nzbtomedia.ACHANNELS3: + audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS3)]) 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)]) else: @@ -253,6 +276,8 @@ def buildCommands(file, newDir): audio_cmd.extend(['-c:a:' + str(used_audio), 'copy']) if nzbtomedia.ACODEC3 == 'aac': audio_cmd.extend(['-strict', '-2']) + if nzbtomedia.ACHANNELS3 and channels > nzbtomedia.ACHANNELS3: + audio_cmd.extend(['-ac:' + str(used_audio), str(nzbtomedia.ACHANNELS3)]) if nzbtomedia.ABITRATE3: audio_cmd.extend(['-b:a:' + str(used_audio), str(nzbtomedia.ABITRATE3)]) if nzbtomedia.OUTPUTQUALITYPERCENT > 0: