0

用户添加视频,水印会自动应用于视频。原来是处理用户的视频加水印,但是不知道怎么把这个视频附加到模型上,这样以后这个带水印的视频就会显示在网站上。只需将 obj.video_uploaded = final_ 附加到模型 - 它不起作用,写入错误对象没有属性 '_committed' model.py

class Video(models.Model):
    title = models.CharField(max_length=100)
    slug = AutoSlugField(populate_from='title')
    photo = models.ImageField(upload_to='photo/%Y/%m/%d')
    video_uploaded = models.FileField(upload_to='video/%Y/%m/%d',blank=True,null=True)

视图.py

def add_video(request):
    if request.method == "POST":
        form = VideoUploaderForm(
            data=request.POST,
            files=request.FILES,
        )
        if form.is_valid():
            obj = form.save(commit=False)
            vid = request.FILES['video_uploaded']
            clip = VideoFileClip(vid.temporary_file_path())
            # watermark
            video = VideoFileClip(clip.filename)
            logo = (ImageClip('faiklogo.png')
                    .set_duration(video.duration)
                    .resize(height=50)
                    .margin(right=8, top=8, opacity=0)
                    .set_pos(("center", "bottom")))
            final_ = CompositeVideoClip([video, logo])
            final_.write_videofile('media/video/videwithwatermark.mp4')
            obj.save()
    else:
        form=VideoUploaderForm()
    return render(request, 'firstapp/add_video.html', {"foenter code hererm": form})

表格.py

class VideoUploaderForm(forms.ModelForm):
    class Meta:
        model = Video
        fields = '__all__'
4

1 回答 1

0

保存到 FileField 时,FieldFile 的实例将允许您使用 instance.save(file_name,file_contents) 保存它,其中内容必须是django.core.files.Filedjango.core.files.base 的实例。内容文件 尝试:

from django.core.files.base import ContentFile

obj.video_uploaded.save(final_.name, ContentFile(final_.read()))
于 2021-07-14T12:25:52.260 回答