问题描述
目标
我正在使用 AWS Lambda 制作视频转换工具,可以使用网页将视频上传到 S3 存储桶。当所有视频(1 个或更多)上传到存储桶时,将最后上传 done.json 文件。每次上传时都会调用 Lambda 函数,并且只有在上传最终的 done.json 时才会执行某些操作。
代码演练
done.json 上传后,它将获取当前文件夹中的所有视频,并使用 Ffmpeg 进行转换,如下所示:
i = 0
ts_video_paths = []
for video in video_paths:
video_ts = os.path.splitext(video)[0] + '.ts'
s3_source_signed_url = s3_client.generate_presigned_url('get_object',Params={'Bucket': S3_SOURCE_BUCKET,'Key': video},ExpiresIn=SIGNED_URL_TIMEOUT)
ts_video_paths.append(f'/tmp/{rnd}/ts_video{i}.ts')
ffmpeg_ts_cmd = f'/opt/bin/ffmpeg -i {s3_source_signed_url} -c:v copy -copyts -bsf:v h264_mp4toannexb -f mpegts -flags -global_header -af aresample=async=1:first_pts=0 /tmp/{rnd}/ts_video{i}.ts'
command = shlex.split(ffmpeg_ts_cmd)
subprocess.run(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
i += 1
制作完所有 .ts 文件后,它们将合并为一个文件(看到某处可以添加 .ts 文件)
data = b''
for video in ts_video_paths:
f = open(video,'rb')
data += f.read()
f = open(f'/tmp/{rnd}/all.ts','wb')
f.write(data)
f.close()
最后一步是将 all.ts 转换为 .mp4 视频。在这一步我有时不能出错。它只发生在某些视频中,我找不到解决方案。
ffmpeg_combine_cmd = f'/opt/bin/ffmpeg -i /tmp/{rnd}/all.ts -acodec copy -vcodec copy -f mp4 /tmp/{rnd}/video.mp4'
command_final = shlex.split(ffmpeg_combine_cmd)
p2 = subprocess.run(command_final,check=True) # Sometimes gives an error videos
我在转换视频时遇到的错误:
Command '['/opt/bin/ffmpeg','-i','/tmp/CLZHC/all.ts','-acodec','copy','-vcodec','-f','mp4','/tmp/CLZHC/video.mp4']' returned non-zero exit status 1.
我想问你的问题
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)