diff options
-rw-r--r-- | mediagoblin/media_types/audio/processing.py | 142 |
1 files changed, 6 insertions, 136 deletions
diff --git a/mediagoblin/media_types/audio/processing.py b/mediagoblin/media_types/audio/processing.py index 74167ace..f6d0cc03 100644 --- a/mediagoblin/media_types/audio/processing.py +++ b/mediagoblin/media_types/audio/processing.py @@ -16,18 +16,17 @@ import argparse import logging -from tempfile import NamedTemporaryFile import os from mediagoblin import mg_globals as mgg from mediagoblin.processing import ( - create_pub_filepath, BadMediaFail, FilenameBuilder, + BadMediaFail, FilenameBuilder, ProgressCallback, MediaProcessor, ProcessingManager, request_from_args, get_orig_filename, store_public, copy_original) from mediagoblin.media_types.audio.transcoders import ( - AudioTranscoder,AudioThumbnailer) + AudioTranscoder, AudioThumbnailer) _log = logging.getLogger(__name__) @@ -43,126 +42,12 @@ def sniff_handler(media_file, **kw): _log.debug('Audio discovery raised BadMediaFail') return None - if data.is_audio == True and data.is_video == False: + if data.is_audio is True and data.is_video is False: return MEDIA_TYPE return None -def process_audio(proc_state): - """Code to process uploaded audio. Will be run by celery. - - A Workbench() represents a local tempory dir. It is automatically - cleaned up when this function exits. - """ - entry = proc_state.entry - workbench = proc_state.workbench - audio_config = mgg.global_config['media_type:mediagoblin.media_types.audio'] - - queued_filepath = entry.queued_media_file - queued_filename = workbench.localized_file( - mgg.queue_store, queued_filepath, - 'source') - name_builder = FilenameBuilder(queued_filename) - - webm_audio_filepath = create_pub_filepath( - entry, - '{original}.webm'.format( - original=os.path.splitext( - queued_filepath[-1])[0])) - - if audio_config['keep_original']: - with open(queued_filename, 'rb') as queued_file: - original_filepath = create_pub_filepath( - entry, name_builder.fill('{basename}{ext}')) - - with mgg.public_store.get_file(original_filepath, 'wb') as \ - original_file: - _log.debug('Saving original...') - original_file.write(queued_file.read()) - - entry.media_files['original'] = original_filepath - - transcoder = AudioTranscoder() - - with NamedTemporaryFile(dir=workbench.dir) as webm_audio_tmp: - progress_callback = ProgressCallback(entry) - - transcoder.transcode( - queued_filename, - webm_audio_tmp.name, - quality=audio_config['quality'], - progress_callback=progress_callback) - - transcoder.discover(webm_audio_tmp.name) - - _log.debug('Saving medium...') - mgg.public_store.get_file(webm_audio_filepath, 'wb').write( - webm_audio_tmp.read()) - - entry.media_files['webm_audio'] = webm_audio_filepath - - # entry.media_data_init(length=int(data.audiolength)) - - if audio_config['create_spectrogram']: - spectrogram_filepath = create_pub_filepath( - entry, - '{original}-spectrogram.jpg'.format( - original=os.path.splitext( - queued_filepath[-1])[0])) - - with NamedTemporaryFile(dir=workbench.dir, suffix='.ogg') as wav_tmp: - _log.info('Creating OGG source for spectrogram') - transcoder.transcode( - queued_filename, - wav_tmp.name, - mux_string='vorbisenc quality={0} ! oggmux'.format( - audio_config['quality'])) - - thumbnailer = AudioThumbnailer() - - with NamedTemporaryFile(dir=workbench.dir, suffix='.jpg') as spectrogram_tmp: - thumbnailer.spectrogram( - wav_tmp.name, - spectrogram_tmp.name, - width=mgg.global_config['media:medium']['max_width'], - fft_size=audio_config['spectrogram_fft_size']) - - _log.debug('Saving spectrogram...') - mgg.public_store.get_file(spectrogram_filepath, 'wb').write( - spectrogram_tmp.read()) - - entry.media_files['spectrogram'] = spectrogram_filepath - - with NamedTemporaryFile(dir=workbench.dir, suffix='.jpg') as thumb_tmp: - thumbnailer.thumbnail_spectrogram( - spectrogram_tmp.name, - thumb_tmp.name, - (mgg.global_config['media:thumb']['max_width'], - mgg.global_config['media:thumb']['max_height'])) - - thumb_filepath = create_pub_filepath( - entry, - '{original}-thumbnail.jpg'.format( - original=os.path.splitext( - queued_filepath[-1])[0])) - - mgg.public_store.get_file(thumb_filepath, 'wb').write( - thumb_tmp.read()) - - entry.media_files['thumb'] = thumb_filepath - else: - entry.media_files['thumb'] = ['fake', 'thumb', 'path.jpg'] - - # Remove queued media file from storage and database. - # queued_filepath is in the task_id directory which should - # be removed too, but fail if the directory is not empty to be on - # the super-safe side. - mgg.queue_store.delete_file(queued_filepath) # rm file - mgg.queue_store.delete_dir(queued_filepath[:-1]) # rm dir - entry.queued_media_file = [] - - class CommonAudioProcessor(MediaProcessor): """ Provides a base for various audio processing steps @@ -170,6 +55,8 @@ class CommonAudioProcessor(MediaProcessor): def common_setup(self): """ + Setup the workbench directory and pull down the original file, add + the audio_config, transcoder, thumbnailer and spectrogram_tmp path """ self.audio_config = mgg \ .global_config['media_type:mediagoblin.media_types.audio'] @@ -179,6 +66,7 @@ class CommonAudioProcessor(MediaProcessor): self.entry, self.workbench) self.name_builder = FilenameBuilder(self.orig_filename) + # spectrogram_tmp is used for thumbnails and spectograms self.spectrogram_tmp = os.path.join(self.workbench.dir, self.name_builder.fill( '{basename}-spectrogram.jpg')) @@ -201,12 +89,6 @@ class CommonAudioProcessor(MediaProcessor): self.name_builder.fill( '{basename}{ext}')) - #webm_audio_filepath = create_pub_filepath( - # self.entry, - # '{original}.webm'.format( - # original=os.path.splitext( - # self.orig_filename[-1])[0])) - self.transcoder.transcode( self.orig_filename, webm_audio_tmp, @@ -227,12 +109,6 @@ class CommonAudioProcessor(MediaProcessor): if not fft_size: fft_size = self.audio_config['spectrogram_fft_size'] - #spectrogram_filepath = create_pub_filepath( - # self.entry, - # '{original}-spectrogram.jpg'.format( - # original=os.path.splitext( - # self.orig_filename[-1])[0])) - wav_tmp = os.path.join(self.workbench.dir, self.name_builder.fill( '{basename}.ogg')) @@ -266,12 +142,6 @@ class CommonAudioProcessor(MediaProcessor): thumb_tmp, size) - #thumb_filepath = create_pub_filepath( - # self.entry, - # '{original}-thumbnail.jpg'.format( - # original=os.path.splitext( - # self.orig_filename[-1])[0])) - store_public(self.entry, 'thumb', thumb_tmp, self.name_builder.fill('{basename}.thumbnail.jpg')) |