0

私はウェブサイト www.goploom.com を所有しており、YouTube と同様に、ユーザーは動画をアップロードして表示できます。アップロードされたビデオは、サイトの html5 ビデオ プレーヤーとの互換性のために mp4 形式に変換されます。私の問題は、FFmpeg がアップロードされたビデオからビデオ サムネイルを正常に生成し、画像を適切なディレクトリに保存する一方で、コードのビデオ変換の側面で出力が生成されないことです。数時間コードを微調整しましたが、この問題を解決できませんでしたが、html、php、および ffmpeg でビデオ変換を実行できると言われました。

サムネイルの生成が完全に機能するため、ffmpeg へのパスは正しいです。

**アップロード時にアップロードされたビデオから収集された情報。$name = $_FILES['ビデオ']['名前']; $title = $_POST['videotitle']; $type = expand('.', $name);
$type = end($type); $size = $_FILES['ビデオ']['サイズ']; $random_name = rand(); $tmp = $_FILES['video']['tmp_name'];

                if($type != 'mp4' && $type != 'MP4' && $type != 'flv' && $type != 'FLV' && $type != 'mov' && $type != 'MOV'){
                    $message = "Video Format Not Supported<br>";
                } else {
            $username_query = mysql_query("SELECT `username` FROM `users` WHERE `user_id` = $session_user_id");
                    $username = mysql_fetch_assoc($username_query); 
                    $username = $username['username'];

**完全に機能するサムネイル生成。$ffmpeg = "/usr/local/bin/ffmpeg"; $videoFile = $_FILES['video']['tmp_name']; $imageFile = "uploads/".$username."/thumbnails/".$random_name.".jpg"; $size = "160x90"; $getFromSecond = 5; $cmd = "$ffmpeg -i $videoFile -an -ss $getFromSecond -s $size $imageFile"; if(!shell_exec($cmd)){ echo "サムネイルを作成しました!
";
} else { echo "サムネイルの作成中にエラーが発生しました!"; }

**アップロードされたファイルを動画変換用の永続ディレクトリに移動します。$newFileLocation = "uploads/".$username."/temp".$random_name.".".$type; move_uploaded_file($tmp, $newFileLocation);

*ビデオ変換コード。$outputFile = "uploads/".$username."/".$random_name.".mp4"; $databaseStoredVideoUrl = "uploads/".$username."/".$random_name.".mp4"; $video_cmd = "$ffmpeg -i $newFileLocation $outputFile"; echo $video_cmd; if(!shell_exec($video_cmd)){ echo "ビデオが変換されました!
"; } else { echo "サムネイルの作成中にエラーが発生しました!";
}

**出力 src リンクをデータベースに適切に保存しますが、ビデオが存在しないため、ビデオを表示できません。// 正しいユーザー名とユーザー ディレクトリの下のデータベースへのビデオvideosストレージ"); $message = "動画のアップロードに成功しました。
";

どんな助けや洞察も素晴らしいでしょう。ありがとう。

**編集: 次の行を使用して修正しました。$video_cmd = "$ffmpeg -i $newFileLocation -vcodec libx264 -vpre normal -acodec libfaac $outputFile";

そして $video_cmd を shell_exec に入力します

4

1 に答える 1

0

わからない。FFMPEG と PHP を数回使用しましたが、次のような問題が発生する可能性があります。

  1. ビデオエンコーディングサーバー側を実行しているように見えるため、メモリ制限があります。これはお勧めしません。
  2. 次に、ffmpeg プロセス自体に時間がかかりすぎる可能性があります。これは、ビデオ エンコンディングの実行に、Web サーバー Apache/Nginx で許可されている最大スクリプト実行よりも長い時間がかかる可能性があるためです。

エンコードを Web リクエストとして実行している場合は、これを控えて、代わりに cron ジョブを作成するか、処理してエンコードする必要がある新しいビデオがあるかどうかを確認する別のサービス (ビデオ キュー サービス) を作成する必要があります。

これを大まかに確認する手順は次のとおりです。

  1. まず、コマンドラインからエンコーディングを直接テストします。
  2. ビデオ テーブルを更新し、処理する必要があるものにフラグを付けるか、ビデオ キュー テーブルを作成します。
  3. 処理する新しいビデオをチェックする cron ジョブまたはサービスを用意し、それらを 1 つずつ処理します。

PHP に慣れている場合は、ini_set("set_time_limit", 0) を使用して php スクリプトを作成し、スクリプトがタイムアウトしないようにしてください。他のオプションは、bash スクリプトである可能性があります。たとえば、node.js を ffmpeg ライブラリと一緒に使用処理サービスを作成します。

于 2013-07-12T23:13:54.500 に答える