обработка вывода файла подпроцесса - PullRequest
0 голосов
/ 14 января 2019

Я работаю над проектом, в котором в какой-то момент пользователь загружает видео, а в бэкэнде мне нужно создать миниатюру для этого видео. Я предпочел ffmpeg для этой цели, и система находится в среде django. Это моя функция просмотра

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 бесполезно. Так что мой запрос - как сохранить созданный эскиз в модели.

1 Ответ

0 голосов
/ 14 января 2019

Как описано в документации django из FieldFile, вы можете открыть файл по пути, по которому вы его сохранили, и обернуть его в File объект.

Еще одним соображением было бы отказаться от вызова подпроцессов и вместо этого использовать библиотеку python. Есть также привязки к Python для ffmpeg, например. FFmpeg-питон .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...