0

数百のビデオ ファイルを含む 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 台目のマシンだけでプロセスを再度実行したところ、目的の結果が得られました。

4

1 に答える 1

0

出力ファイルの「mpeg4」は、ffmpeg がビデオ ストリームをコピーするのではなく、再エンコードしていることを示している可能性があります。あなたがその情報を提供しなかったので、私はオーディオについて同じことを言うことはできません. 古い ffmpeg は、MP4 コンテナーを使用する出力のデフォルトとして「mpeg4」ビデオ エンコーダーを使用します。ffmpeg を手動で呼び出すと、すべてが期待どおりに機能するため、スクリプトまたはライブラリを確認してください。

-vsync 2 -async 1を使用する際に無視される可能性が高いことは、それほど心配ではありません-vcodec copy -acodec copy

qt-faststartまた、カット出力を(ffmpeg ソースに含まれています) または代わりに実行することもできますMP4Box。これにより、クライアントが完全にダウンロードする前にビデオの再生を開始できるように、一部のデータがファイルの先頭に移動されます。

最後に、-ss問題の配置。入力オプション ( before -i) としては、目的の時刻をすぐにシークしてからデコードを開始するため、はるかに高速ですが、-ss目的の時刻の前にすべてを完全にデコードする出力オプションほど正確ではありません。速度よりも正確さが重要な場合は-ss、出力オプションとしてテストを検討してください。

于 2012-05-01T02:39:39.043 に答える