在Django中使用Python将任意格式视频转换为MP4

3 投票
1 回答
6527 浏览
提问于 2025-04-17 18:14

我正在使用Django,还是个新手。目前正在搭建一个基本的上传页面,可以把视频上传到硬盘上(实际上是上传到Django项目里的media文件夹)。

我的代码运行得很好,视频成功上传到了media文件夹。

我在一个单独的HTML页面上展示所有上传的视频,使用的是HTML的video标签。不过,问题是只有MP4格式的视频可以播放,其他格式的视频却不能。

下面是我部分的HTML代码和视图函数。

uploads_list.html

<div style="padding-top:90px;">
  <video id="vid" width="350" height="250" controls="controls">
           <source src="{{MEDIA_URL}}videos/django_cms-_frontend_editing_1280x720.mp4" type="video/mp4" />       
   </video>
  <video id="vid_2" width="350" height="223" controls="controls">
           <source src="{{MEDIA_URL}}videos/1100000.flv" type="video/ogg" />       
   </video>
</div>

所以我最终的想法是,在上传时把所有上传的视频转换成MP4格式,并存储在media文件夹里,这样我们就可以使用html video标签来展示所有这些视频。

views.py

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid() and form.is_multipart():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponseRedirect('/uploads_list')  # which renders `uploads_list.html` page
    else:
        form = UploadFileForm()
    return render_to_response('uploads_form.html', {'form': form,'total_files':os.listdir(settings.MEDIA_ROOT),'path':settings.MEDIA_ROOT},context_instance=RequestContext(request))

def handle_uploaded_file(file,path=''):
    filename = file._get_name()
    destination_file = open('%s/%s' % (settings.MEDIA_ROOT, str(path) + str(filename)), 'wb+')
    for chunk in file.chunks():
        destination_file.write(chunk)
    destination_file.close()

所以,有谁能告诉我,如何在Django中把上传的任何格式的视频(比如flv3gpMXF等)转换成MP4格式,然后再存储到media文件夹里吗?

1 个回答

4

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能会在使用某个函数时,发现它的表现和预期不一样。这种情况可能是因为我们对这个函数的理解不够,或者是因为我们没有正确地使用它。

在这种情况下,查看相关的文档或者在网上搜索解决方案是很有帮助的。很多时候,其他人也遇到过类似的问题,他们可能已经找到了解决办法,并分享在网上。通过这些资源,我们可以更好地理解如何使用这些工具,避免犯同样的错误。

总之,遇到问题时,不要气馁,积极寻找答案和学习的机会,这样才能不断进步。

import subprocess
subprocess.call('ffmpeg -i video.flv video.mp4') 

撰写回答