我正在开发一个项目,在该项目中,用户有时会上传视频,而在后端我必须为该视频生成缩略图。为此,我更喜欢 ffmpeg,并且系统处于 django 环境中。
这是我的 View 功能
def upload(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile=request.FILES['docfile'])
filename = str(request.FILES['docfile'].name)
newdoc.save()
op = subprocess.call(['ffmpeg', '-i',"media/private/"+up, '-ss', '00:00:03.000', '-vframes', '1', 'abc.jpg']) // Generates thumbnail
newdoc.thumbnail = op
newdoc.save()
return HttpResponseRedirect(reverse('list'))
else:
form = DocumentForm()
文档具有缩略图字段。我知道 subprocess.call() 返回的返回码不是任何对象,所以使用 op 变量是没用的。所以我的查询是如何在模型中保存生成的缩略图。
最佳答案
如 django documentation 中所述的 FieldFile
您可以从保存文件的路径打开文件并将其包装成 File
目的。
另一个考虑是不要调用子进程,而是使用 python 库。还有用于 ffmpeg 的 python 绑定(bind),例如ffmpeg-python .
关于django - 处理子进程文件输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54186142/