Add initial suport for reencod OGG

This commit is contained in:
pabloalcantara
2011-08-18 17:03:08 -03:00
parent 776f67bd46
commit 33be00a827
2 changed files with 28 additions and 17 deletions
+6 -3
View File
@@ -119,6 +119,7 @@ BITRATE = None
SAMPLINGFREQUENCY = None SAMPLINGFREQUENCY = None
ADVANCEDENCODER = None ADVANCEDENCODER = None
ENCODEROUTPUTFORMAT = None ENCODEROUTPUTFORMAT = None
VORBISQUALITY = None
def CheckSection(sec): def CheckSection(sec):
""" Check if INI section exists, if not create it """ """ Check if INI section exists, if not create it """
@@ -178,7 +179,7 @@ def initialize():
LIBRARYSCAN_INTERVAL, DOWNLOAD_SCAN_INTERVAL, SAB_HOST, SAB_USERNAME, SAB_PASSWORD, SAB_APIKEY, SAB_CATEGORY, \ LIBRARYSCAN_INTERVAL, DOWNLOAD_SCAN_INTERVAL, SAB_HOST, SAB_USERNAME, SAB_PASSWORD, SAB_APIKEY, SAB_CATEGORY, \
NZBMATRIX, NZBMATRIX_USERNAME, NZBMATRIX_APIKEY, NEWZNAB, NEWZNAB_HOST, NEWZNAB_APIKEY, \ NZBMATRIX, NZBMATRIX_USERNAME, NZBMATRIX_APIKEY, NEWZNAB, NEWZNAB_HOST, NEWZNAB_APIKEY, \
NZBSORG, NZBSORG_UID, NZBSORG_HASH, NEWZBIN, NEWZBIN_UID, NEWZBIN_PASSWORD, LASTFM_USERNAME, INTERFACE, FOLDER_PERMISSIONS, \ NZBSORG, NZBSORG_UID, NZBSORG_HASH, NEWZBIN, NEWZBIN_UID, NEWZBIN_PASSWORD, LASTFM_USERNAME, INTERFACE, FOLDER_PERMISSIONS, \
ENCODERFOLDER, ENCODER, BITRATE, SAMPLINGFREQUENCY, ENCODE, ADVANCEDENCODER, ENCODEROUTPUTFORMAT ENCODERFOLDER, ENCODER, BITRATE, SAMPLINGFREQUENCY, ENCODE, ADVANCEDENCODER, ENCODEROUTPUTFORMAT, VORBISQUALITY
if __INITIALIZED__: if __INITIALIZED__:
return False return False
@@ -264,8 +265,9 @@ def initialize():
BITRATE = check_setting_int(CFG, 'General', 'bitrate', 192) BITRATE = check_setting_int(CFG, 'General', 'bitrate', 192)
SAMPLINGFREQUENCY= check_setting_int(CFG, 'General', 'samplingfrequency', 44100) SAMPLINGFREQUENCY= check_setting_int(CFG, 'General', 'samplingfrequency', 44100)
ENCODE = bool(check_setting_int(CFG, 'General', 'encode', 0)) ENCODE = bool(check_setting_int(CFG, 'General', 'encode', 0))
ADVANCEDENCODER = check_setting_int(CFG, 'General', 'advancedencoder', '') ADVANCEDENCODER = check_setting_str(CFG, 'General', 'advancedencoder', '')
ENCODEROUTPUTFORMAT = check_setting_int(CFG, 'General', 'encoderoutputformat', 'mp3') ENCODEROUTPUTFORMAT = check_setting_str(CFG, 'General', 'encoderoutputformat', 'mp3')
VORBISQUALITY = check_setting_int(CFG, 'General', 'vorbisquality', 60)
if not LOG_DIR: if not LOG_DIR:
LOG_DIR = os.path.join(DATA_DIR, 'logs') LOG_DIR = os.path.join(DATA_DIR, 'logs')
@@ -447,6 +449,7 @@ def config_write():
new_config['General']['encoderfolder'] = ENCODERFOLDER new_config['General']['encoderfolder'] = ENCODERFOLDER
new_config['General']['advancedencoder'] = ADVANCEDENCODER new_config['General']['advancedencoder'] = ADVANCEDENCODER
new_config['General']['encoderoutputformat'] = ENCODEROUTPUTFORMAT new_config['General']['encoderoutputformat'] = ENCODEROUTPUTFORMAT
new_config['General']['vorbisquality'] = VORBISQUALITY
new_config.write() new_config.write()
+22 -14
View File
@@ -28,7 +28,7 @@ def encode(albumPath):
for r,d,f in os.walk(albumPath): for r,d,f in os.walk(albumPath):
for music in f: for music in f:
if any(music.endswith('.' + x) for x in ["mp3", "flac", "m4a", "wav"]): if any(music.endswith('.' + x) for x in headphones.MEDIA_FORMATS):
musicFiles.append(os.path.join(r, music)) musicFiles.append(os.path.join(r, music))
musicTemp = os.path.splitext(music)[0]+'.'+headphones.ENCODEROUTPUTFORMAT musicTemp = os.path.splitext(music)[0]+'.'+headphones.ENCODEROUTPUTFORMAT
musicTempFiles.append(os.path.join(tempDirEncode, musicTemp)) musicTempFiles.append(os.path.join(tempDirEncode, musicTemp))
@@ -40,6 +40,7 @@ def encode(albumPath):
i=0 i=0
for music in musicFiles: for music in musicFiles:
infoMusic=MediaFile(music) infoMusic=MediaFile(music)
if headphones.ENCODER == 'lame': if headphones.ENCODER == 'lame':
if not any(music.endswith('.' +headphones.ENCODEROUTPUTFORMAT) for x in ["mp3", "wav"]): if not any(music.endswith('.' +headphones.ENCODEROUTPUTFORMAT) for x in ["mp3", "wav"]):
logger.warn('Lame cant encode "%s" format for "%s", use ffmpeg' % (os.path.splitext(music)[1],music)) logger.warn('Lame cant encode "%s" format for "%s", use ffmpeg' % (os.path.splitext(music)[1],music))
@@ -48,11 +49,17 @@ def encode(albumPath):
logger.warn('Music "%s" has bitrate<="%skbit" will not be reencoded' % (music,headphones.BITRATE)) logger.warn('Music "%s" has bitrate<="%skbit" will not be reencoded' % (music,headphones.BITRATE))
else: else:
command(encoder,music,musicTempFiles[i],albumPath) command(encoder,music,musicTempFiles[i],albumPath)
elif headphones.ENCODER == 'ffmpeg': else:
if (music.endswith('.'+headphones.ENCODEROUTPUTFORMAT) and (infoMusic.bitrate/1000<=headphones.BITRATE)): if headphones.ENCODEROUTPUTFORMAT=='ogg':
logger.warn('Music "%s" has bitrate<="%skbit" will not be reencoded' % (music,headphones.BITRATE)) if music.endswith('.ogg'):
else: logger.warn('Can not reencode .ogg music "%s"' % (music))
command(encoder,music,musicTempFiles[i],albumPath) else:
command(encoder,music,musicTempFiles[i],albumPath)
elif (headphones.ENCODEROUTPUTFORMAT=='mp3'):
if (music.endswith('.mp3') and (infoMusic.bitrate/1000<=headphones.BITRATE)):
logger.warn('Music "%s" has bitrate<="%skbit" will not be reencoded' % (music,headphones.BITRATE))
else:
command(encoder,music,musicTempFiles[i],albumPath)
i=i+1 i=i+1
shutil.rmtree(tempDirEncode) shutil.rmtree(tempDirEncode)
@@ -66,20 +73,21 @@ def encode(albumPath):
def command(encoder,musicSource,musicDest,albumPath): def command(encoder,musicSource,musicDest,albumPath):
return_code=1 return_code=1
cmd=''
if headphones.ENCODER == 'lame': if headphones.ENCODER == 'lame':
cmd=encoder + ' -h --resample ' + str(headphones.SAMPLINGFREQUENCY) + ' -b ' + str(headphones.BITRATE) cmd=encoder + ' -h --resample ' + str(headphones.SAMPLINGFREQUENCY) + ' -b ' + str(headphones.BITRATE)
cmd=cmd+ ' ' + headphones.ADVANCEDENCODER cmd=cmd+ ' ' + headphones.ADVANCEDENCODER
cmd=cmd+ ' "' + musicSource + '"' cmd=cmd+ ' "' + musicSource + '"'
cmd=cmd+ ' "' + musicDest +'"' cmd=cmd+ ' "' + musicDest +'"'
elif headphones.ENCODER == 'ffmpeg': elif headphones.ENCODER == 'ffmpeg':
if headphones.ENCODEROUTPUTFORMAT=='mp3': cmd=encoder+ ' -i'
cmd=encoder+ ' -i' cmd=cmd+ ' "' + musicSource + '"'
cmd=cmd+ ' "' + musicSource + '"' if headphones.ENCODEROUTPUTFORMAT=='ogg':
cmd=cmd+ ' -ac 2 -map_metadata 0:0,s0 -vn -ar ' + str(headphones.SAMPLINGFREQUENCY) + ' -ab ' + str(headphones.BITRATE) + 'k' cmd=cmd+ ' -acodec vorbis -strict experimental'
cmd=cmd+ ' ' + headphones.ADVANCEDENCODER cmd=cmd+ ' -ac 2 -map_metadata 0:0,s0 -vn -ar ' + str(headphones.SAMPLINGFREQUENCY) + ' -ab ' + str(headphones.BITRATE) + 'k'
cmd=cmd+ ' "' + musicDest + '"' cmd=cmd+ ' ' + headphones.ADVANCEDENCODER
cmd=cmd+ ' "' + musicDest + '"'
return_code = call(cmd, shell=True) return_code = call(cmd, shell=True)
if return_code==0: if (return_code==0) and (os.path.exists(musicDest)):
os.remove(musicSource) os.remove(musicSource)
shutil.move(musicDest,albumPath) shutil.move(musicDest,albumPath)