ちょっとした問題で立ち往生しています:
さまざまなユーザーのビデオファイルを管理する 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 がセキュリティ リークを開くことなくフォルダーに書き込むことができるように、何を変更する必要があるかについて何か提案はありますか?