"""This lambda responds for audio transcoding.""" import os import boto3 transcoder_client = boto3.client('elastictranscoder') def create_aws_filename(folder, key, extension): """Create path for file on s3. Args: key: (str): Path to file on S3. folder: (str): New folder path. extension: (str): New extension. """ filename = os.path.basename(key).split('.')[0] aws_filename = os.path.join( folder, filename + extension ) return aws_filename def create_job(key, pipeline_id): """Create ElasticTranscoder Job. Args: key: (str): Path to file on S3. pipeline_id: (str): Pipeline arn. """ output = transcoder_client.create_job( PipelineId=pipeline_id, Input={ 'Key': key, 'FrameRate': 'auto', 'Resolution': 'auto', 'AspectRatio': 'auto', 'Interlaced': 'auto', 'Container': 'auto' }, Outputs=[{ 'Key': create_aws_filename('audio/mp3_320', key, '.mp3'), 'PresetId': '1351620000001-100110', }, { 'Key': create_aws_filename('audio/mp3_128', key, '.mp3'), 'PresetId': '1351620000001-300040', }], UserMetadata={ 'extension': 'mp3', 'input_key': key, '320k': '1351620000001-100110', '128k': '1351620000001-300040' } ) return output def handler(event, context): """Lambda handler. Args: event: (dict): Information about uploaded file. context: (dict): Environment state. Returns: dict: Dict with transcoding results. """ key = event['key'] try: pipeline_id = os.environ.get('PIPELINE_ID') result_job = create_job(key, pipeline_id) except Exception as e: print("Can't create transcoding job.") return {'status': 'Error', 'message': str(e.args)} return {'status': result_job['Status'], 'message': ''}