mp3ファイルをoggに変換したい。次のコードを試しました
exec("/usr/local/bin/ffmpeg -i 1.mp4 -vcodec libtheora -acodec libvorbis testjohn4545454.ogg",$output);
var_dump($output);
ただし、ファイルを変換せずに返すarray(0) { }
だけで、実行時間はわずかです。
しかし、ssh コマンドを使用すると、変換は成功します。
解決策を教えてください。
ここで面白いことに、これを独自のプロセスとバックグラウンドで実行したいと考えています。そうしないと、変換が完了するのを待っている間に PHP スクリプトがハングします。
コード:
passthru("nohup /usr/local/bin/ffmpeg -i 1.mp4 -vcodec libtheora -acodec libvorbistestjohn4545454.ogg 1> /path/to/logfile.txt 2>&1 &");
最後の「nohup」とアンパサンドに注意してください。これらは、必要なものを提供するはずです。また、ログファイルを定期的にチェックして、意図したとおりに動作していることを確認できるようになりました。
最後に、プログレス バーの作成に関するこの質問を確認してください。
PHP の disabled_functions 構成を確認して、exec が存在しないかどうかを確認できますか? また、すべてのエラー報告を有効にしてから、単純な bash echo で exec() を試して、その様子を確認することもできます。すべてがうまくいった場合は、Jamie が指摘したように、正しいファイルを使用しているかどうかを確認してください。作業ディレクトリが間違っている可能性があるため、最も便利な絶対パスまたは相対パスを使用してください。現在の作業ディレクトリを確認する Unix コマンドはpwd
.
編集:また、execには別の注意事項があるため、他の問題についてはマニュアルWhen safe mode is enabled, you can only execute files within the safe_mode_exec_dir
をよく読んでください。
私はかつて同様の問題を抱えていましたが、ファイル(入力ファイルと出力変換ファイル)をapacheの書き込み可能なフォルダーに保存して読み取ることを選択しました。そのディレクトリを読み取ることで、変換がすでに完了しているかどうかを確認することもできます。
返信ありがとうございます。passthru()
の代わりに使用しましたがexec()
、正常に動作します。