3

ちょっとした問題で立ち往生しています:

さまざまなユーザーのビデオファイルを管理する Web サイトがあります。各ユーザーは、別のユーザーからのファイルを混同したくないので、変更したくない個人用フォルダーにビデオをアップロードできます。ビデオ ファイルをアップロードした後subprocess、サムネイルを作成する を呼び出します。のエラーが原因で、サブプロセスが失敗します。これは、ffmpeg書き込み権限がないことに関連していると思われます。アップロードされたファイルとそれを含むフォルダーは、www-data に属します。

コード:

command = ("ffmpeg -ss 00:00:10 -i %s -dframes 1 %s -y" % (video_path, image_path)).split()
subprocess.call(command)

FFMPEG は、ターゲット フォルダーに 777 のアクセス許可がある場合にのみ機能するため、別のユーザーとして実行されているようです。そうしないと、次のメッセージで失敗します。

av_interleaved_write_frame(): I/O error occurred
Usually that means that input file is truncated and/or corrupted.

ffmpeg を介して作成する代わりにtouchイメージ ファイルを作成する場合、フォルダーが 775 か 777 かは関係ありません。結果のファイルも www-data に属します。つまり、サブプロセス自体が www-data として実行されることを意味します。そうじゃない?

777 パーミッションを持つサブフォルダーを作成することを考えましたが、次の 2 つの理由で気に入りません: 新しいユーザーを作成できるようにするため (およびアップロード フォルダーに新しいサブフォルダーが作成されるようにするため)、このフォルダーを動的に作成する必要がありました。 . とにかく、777-パーミッションは良い解決策ではありません。

新しいユーザー/フォルダーを作成するときに、ffmpeg がセキュリティ リークを開くことなくフォルダーに書き込むことができるように、何を変更する必要があるかについて何か提案はありますか?

4

3 に答える 3

2

ここで-vframes 1説明されているように指定してみてください

ただし、ffmpeg 0.9 以降dframesではとは両方とものvframesエイリアスであるためframes、新しいバージョンの ffmpeg を使用している場合、問題は別の場所にあります。

于 2013-11-12T10:56:31.773 に答える
1

Celeryと非同期で変換プロセスを実行できます。ワーカー プロセスは必要なアクセス許可で呼び出される可能性があり、apache には、RabbitMQなどの通信チャネルにアクセスするためのアクセス許可のみが必要です。

于 2013-11-06T09:02:37.200 に答える