in 9-MediainfoLambda/mediainfo.py [0:0]
def lambda_handler(event, context):
print(json.dumps(event))
tsevent = int(datetime.datetime.strptime(event["time"], "%Y-%m-%dT%H:%M:%SZ").timestamp())
try:
# Get environment variables set on the CloudFormation stack
MEDIAINFOTABLE = os.environ['MediainfoTable']
MEDIAINFOTABLETTL = os.environ['MediainfoTableTTL']
MEDIAINFO_RETENTION_PERIOD = (3600 * 24 * int(MEDIAINFOTABLETTL))
# Loop through input videos in the event
for input in event['detail']['inputDetails']:
s3_path = input['uri']
urlp = urlparse(s3_path)
# Extract the Key and Bucket names for the inputs
key = urlp[2]
key = key.lstrip('/')
bucket = urlp[1]
signed_url = get_signed_url(SIGNED_URL_EXPIRATION, bucket, key)
logger .info("Signed URL: {}".format(signed_url))
print ("bucket and key "+bucket+" "+key)
# Launch MediaInfo
# Pass the signed URL of the uploaded asset to MediaInfo as an input
# MediaInfo will extract the technical metadata from the asset
# The extracted metadata will be outputted in XML format and
# stored in the variable xml_output
xml_output = subprocess.check_output(["./mediainfo", "--full", "--output=XML", signed_url])
print(xml_output)
json_output = xmltodict.parse(xml_output)
input['mediainfo'] = json_output['Mediainfo']
#print(json.dumps(json_output, indent=4, cls=DecimalEncoder))
# add expirtation timestamp for dynamo and save the event in dynamo
job_input_info = event['detail']
job_input_info["timestamp"] = tsevent
job_input_info["timestampTTL"] = tsevent + MEDIAINFO_RETENTION_PERIOD
s = json.dumps(job_input_info, cls=DecimalEncoder)
job_input_info = json.loads(s, parse_float=decimal.Decimal)
table = DYNAMO_CLIENT.Table(MEDIAINFOTABLE)
response = table.put_item(Item = job_input_info)
print(json.dumps(response, cls=DecimalEncoder))
except Exception as e:
print('An error occured {}'.format(e))
traceback.print_stack()
raise
else:
return True