def transcode_video(video, video_file):
"""
Start a transcode job for a video
Args:
video(ui.models.Video): the video to transcode
video_file(ui.models.Videofile): the s3 file to use for transcoding
"""
video_input = {
'Key': video_file.s3_object_key,
}
# Generate an output video file for each encoding (assumed to be HLS)
outputs = [{
'Key': video.transcode_key(preset),
'PresetId': preset,
'SegmentDuration': '10.0'
} for preset in settings.ET_PRESET_IDS]
playlists = [{
'Format': 'HLSv3',
'Name': video.transcode_key('_index'),
'OutputKeys': [output['Key'] for output in outputs]
}]
# Generate thumbnails for the 1st encoding (no point in doing so for each).
outputs[0]['ThumbnailPattern'] = THUMBNAIL_PATTERN.format(video_file.s3_basename)
transcoder = VideoTranscoder(
settings.ET_PIPELINE_ID,
settings.AWS_REGION,
settings.AWS_ACCESS_KEY_ID,
settings.AWS_SECRET_ACCESS_KEY
)
try:
transcoder.encode(video_input, outputs, Playlists=playlists)
except ClientError as exc:
log.error('Transcode job creation failed for video %s', video.id)
video.update_status(VideoStatus.TRANSCODE_FAILED_INTERNAL)
if hasattr(exc, 'response'):
transcoder.message = exc.response
raise
finally:
transcoder.create_job_for_object(video)
if video.status not in (VideoStatus.TRANSCODE_FAILED_INTERNAL, VideoStatus.TRANSCODE_FAILED_VIDEO, ):
video.update_status(VideoStatus.TRANSCODING)
评论列表
文章目录