アップロード用にさまざまなビデオ形式を受け入れる Django ベースのメディア サーバーがあります。大きな .wmv ファイルをアップロードしているときに、奇妙な動作に気付きました。動画を初めてアップロードしたときは、変換してアップロードするのに 5 分近くかかりました。その後、なんらかのキャッシュが発生し、ビデオは以前にアップロードしたものを指しているだけでした。なぜこれが起こっているのかわかりません。ビデオがアップロードされると、ファイル名の拡張子が変換目的でチェックされ、次に 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 メソッドを変更する方法はありますか??