【发布时间】:2018-10-19 09:34:37
【问题描述】:
客户端应用上传了一个视频文件,我需要生成一个缩略图并将其转储到 AWS s3 并返回客户端指向缩略图的链接。 我四处搜索,发现 ffmpeg 适合此目的。 以下是我能想出的代码:
from ffmpy import FFmpeg
import tempfile
def generate_thumbnails(file_name):
output_file = tempfile.NamedTemporaryFile(suffix='.jpg', delete=False, prefix=file_name)
output_file_path = output_file.name
try:
# generate the thumbnail using the first frame of the video
ff = FFmpeg(inputs={file_name: None}, outputs={output_file_path: ['-ss', '00:00:1', '-vframes', '1']})
ff.run()
# upload generated thumbnail to s3 logic
# return uploaded s3 path
except:
error = traceback.format_exc()
write_error_log(error)
finally:
os.remove(output_file_path)
return ''
我使用的是 django,但遇到上述问题的权限错误。 我发现 ffmpeg 要求文件在磁盘上并且不只考虑 InMemory 上传的文件(我可能错了,因为我假设了这一点)。
有没有办法像使用 ffmpeg 的普通文件一样读取内存视频文件,或者我应该使用 StringIO 并将其转储到临时文件中。文件? 我不喜欢做上面的,因为这是一个开销。
任何具有更好基准的替代解决方案也将不胜感激。
谢谢。
更新: 将内存上传的文件保存到磁盘:How to copy InMemoryUploadedFile object to disk
【问题讨论】:
标签: django python-3.x ffmpeg