数百のビデオ ファイルを含む s3 バケットがあります。
これらのファイルは、ffmpeg を使用して大きなビデオ ファイルの一部を切り取って作成されました。
別のバケットから元のビデオ ファイルをダウンロードし、ffmpeg を実行してファイルをカットし、新しいファイルをそのバケットにアップロードするスクリプトを作成しました。s3 との間でダウンロードおよびアップロードするために、この php ライブラリを使用しました。
私が使用したffmpeg構文:
ffmpeg -y -vsync 2 -async 1 -ss [time-in] -t [duration] -i [large-input-video.mp4] -vcodec copy -acodec copy [short-output-video.mp4]
a / vコーデックを変更せずに、指定された時間の間で元のファイルをカットするだけです。
元のビデオ ファイルはすべて h.264 でエンコードされます。これは、新しいファイル (CDN を介してクライアントのフラッシュ プレーヤーにストリーミングされる) にも必要なエンコードです。
私の問題は、新しいファイルのごく一部だけが h.264 でエンコードされて出力されることですが、それらのほとんどはそうではありません (h.264 は必須です。そうしないと、ファイルはクライアント側で再生されません)。
同じパラメーターと同じファイルで同じffmpegコマンドを手動で使用すると、出力ファイルが正常に出力されるため、問題を元のビデオまで追跡することはできません。任意のようです。
ファイルのコーデックに関する情報を取得するには、ffprobe を使用します。
例:
大きな (元の) ビデオ ファイルのいずれかの ffprobe:
...
ストリーム #0.0(und): ビデオ: h264、yuv420p、640x352、499 kb/s、25 fps、25 tbr、90k tbn、50 tbc
...
対応する新しいカット ファイルの ffprobe:
...
ストリーム #0.0(und): ビデオ: mpeg4、yuv420p、640x352 [PAR 1:1 DAR 20:11]、227 kb/s、25 fps、25 tbr、25 tbn、25 tbc
...
ご覧のとおり、違いは「mpeg4」と「h264」にあります。
新しいファイルが間違ったエンコーディングで出力される原因についての洞察をいただければ幸いです。
ありがとう!
編集: 問題は解決
しまし
た すべてのファイルを分析した後、それらの約 3 分の 2 が間違ったコーデックで出力されていることに気付きました。
切断プロセスに3台のマシン(3台の別々のEC2サーバー)を使用したため、そのうちの2台でffmpegのインストールが不適切であることがわかりました(@LordNeckbeardが彼の回答で示唆したように)。
無効なファイルに対してのみ、3 台目のマシンだけでプロセスを再度実行したところ、目的の結果が得られました。