0

我有一个基于 Django 的媒体服务器,它接受各种视频格式的上传。在上传大型 .wmv 文件时,我注意到一些奇怪的行为。我第一次上传视频时,转换和上传花了将近五分钟。此后,发生了某种缓存,视频只会指向我之前上传的视频。我不明白为什么会这样。上传视频时,会检查文件扩展名以进行转换,然后执行 ffmpeg 命令进行转换。这一切都是异步运行的,使用 django-celery 和 RabbitMQ 作为消息代理。我看不出 ffmpeg 转换命令不会再次执行的任何原因。这是我处理上传的芹菜任务的代码。(这是我最初的推理,

@celery.task
def handleFileUploadAsync(update, m, file_type, video_types):
    filename = m.file.name.replace(' ', '\\ ')
    if video_types[file_type] == 'wmv':
        os.system(
            "ffmpeg -i " + MEDIA_ROOT + filename + " -strict experimental -vcodec libx264    -profile:v baseline " + MEDIA_ROOT + filename.replace(video_types[file_type],'mp4')
    )
        m.file.name = m.file.name.replace(video_types[file_type], 'mp4')
        m.save() 
        os.remove(m.file.path.replace('mp4', 'wmv'))
    elif file_type in video_types.keys():
        os.system(
         "ffmpeg -i " + MEDIA_ROOT + filename + " -vcodec libx264 -profile:v baseline -s 672x576 " + MEDIA_ROOT + filename.replace(video_types[file_type],'mp4')
        )
        m.file.name = m.file.name.replace(video_types[file_type], 'mp4')
        m.save()
        if video_types[file_type] != 'mp4':
            os.remove(m.file.path.replace('mp4', video_types[file_type])) 

编辑:

这就是问题所在。当我转换视频时,我只想要转换后的 .mp4 文件,而不是原始上传。Django 从文件上传字段生成文件名,自动将数字附加到现有文件的末尾(即 test.mp4、test_1.mp4、test_2.mp4 等)。但是,当我上传像test.wmv这样的视频时,转换完成后将没有名为test.wmv的文件(我删除了未转换的文件)。有什么办法可以修改生成这些文件名的 Django 方法吗?

4

1 回答 1

0

声明 FileField 时使用upload_to。也许使用对象的主键作为文件名?

于 2013-08-19T21:17:52.627 回答