1

私はlaravelプロジェクトでphp ffmpegを使用して、複数のことをプローブし、フレームを抽出し、エンコードします。アップロードしたビデオ ファイルからフレームを作成するときに問題が発生します。フレームの作成方法は次のとおりです。

    $video = $ffmpeg->open($destinationPath.'/'.$filename);

    $video
        ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
        ->save(public_path().$frame_path);

これは時々機能してフレームを作成しますが、そうでない場合もあります。.mov ファイルを開こうとすると、このバグが発生することに気付きました。

4

3 に答える 3

0

PHP-FFMpeg ライブラリは、フレームを取得するために正確なタイムスタンプを必要とする入力ファイルの前に、デフォルトで -ss 引数を追加します。mkv ファイルの場合、この問題が発生しました。mkv や mov などのファイルは正確にシークできません。

https://github.com/PHP-FFMpeg/PHP-FFMpeg/blob/master/src/FFMpeg/Media/Frame.php#L79

true指定されたポイントに最も近い Frame を提供するには、save 関数の 2 番目の引数として渡す必要があります。ffmpeg コマンドの -ss 引数の位置を変更します。

-ss 位置 (入力/出力)

入力オプションとして (-i の前に) 使用すると、この入力ファイル内の位置をシークします。ほとんどの形式では、正確にシークすることはできないため、ffmpeg は位置の前にある最も近いシーク ポイントをシークすることに注意してください。トランスコーディングと -accurate_seek が有効 (デフォルト) の場合、シーク ポイントと位置の間のこの余分なセグメントはデコードされ、破棄されます。ストリーム コピーを実行する場合、または -noaccurate_seek を使用する場合は保持されます。

出力オプションとして (出力ファイル名の前に) 使用すると、タイムスタンプが position に達するまで、入力をデコードしますが破棄します。

position は期間の指定である必要があります。ffmpeg-utils(1) マニュアルの (ffmpeg-utils) 期間のセクションを参照してください。

于 2016-02-26T08:44:45.137 に答える