我有一个基于 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 方法吗?