質問: こんばんは。 ffmpegという動画のエンコードを行うアプリケーションをサーバーに組み込んで mov→mp4に動画をエンコーディングする処理を書いています。 その上で、以下の要件で、動画の変換を行い、サーバーに保存するイメージとなります。 <サーバーリレーション> ・動画を保存しているサーバーとffmpegがインストールされているサーバーが別々のサーバー A→動画を保存するサーバー B→ffmpegがインストールされている動画のエンコード処理をするサーバー <処理フロー> 1ユーザーがmov形式の動画をアップロード 2PHPで構築したウェブアプリケーション上でPOSTされた動画をGETし、`curl`コマンドで動画をBサーバーに送る。 3Bサーバー上で動画を受け取ったら、それをffmpegでエンコードし エンコードが終了したら変換されたmp4動画ファイルをAサーバーに保存する 現在、上記フローの2までは処理が実装できているのですが、詰まっているのが3の処理になります。 具体的には、動画の変換処理をffmpegにより行うため、`shell_exec()`を使用して変換処理を行っているのですが その変換されたファイルデータの取得方法がわからず困っています。 ``` ``` そもそもの`shell_exec()`の使い方自体あまりわかっておりませんが、リファレンスをみると 返り値が文字列とのことみたいで、このようにメディアデータは返り値として帰ってこないのではないかと思います。 どなたか上記解決する方法をご存じの方いましたら、ぜひご教授頂きたく思います。 よろしくお願いいたします。
回答: PHPではなく ffmpeg の使い方の話ですが、`$rawFileName.'.mp4'` という名前のMPEG4ファイルができあがっているはずですので、それをサーバーAにFTPなりSCPなりで転送してあげればよいと思います。 もし、shell_exec() でエンコードされたMPEG4のバイナリデータを受け取りたいのであれば、ffmepg の pipe オプションを使ってエンコード結果を標準出力に出力させることで、データを直接受け取ることができます。 ``` shell_exec('ffmpeg -i '.$rawVideo.' -vcodec libx264 -vpre default -movflags frag_keyframe+empty_moov pipe:1'); ```