0

アップロード用にさまざまなビデオ形式を受け入れる 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 メソッドを変更する方法はありますか??

4

1 に答える 1

0

FileField を宣言するときは、 upload_toを使用します。オブジェクトの主キーをファイル名として使用することはできますか?

于 2013-08-19T21:17:52.627 に答える