15

PHPでこのコマンドを使用して1080pビデオをMP4に変換するためにffmpegを使用しています。

$command = FFMPEG.' -i ' . $src . ' -sameq -strict -2 -vcodec libx264 -ar 22050 -y ' . $dest.'.mp4 2>&1'; 
exec($command,$output,$status);

問題は、プロセスが1600MBまでの大量のメモリを使用することです。これは私のサーバーでは許可されていないため、ffmpegが終了します。ffmpegのメモリ使用量を約600-700MBに制限できますか?

どんな助けでも大歓迎です...

4

3 に答える 3

4

PHPについてではありません。それはFFMPEGメモリ使用量を制限する方法についてです。

短い答えはありません!

ここを見てください:http://hwdmediashare.co.uk/forum/27-development-customisation/54700-limit-ffmpeg-memory-usage

于 2012-09-12T14:50:43.017 に答える
3

主に高メモリ使用の原因となるのはビデオコーデックです。

したがって、FFmpegを直接処理するのではなく、メモリ使用量に対処する必要があるのはエンコーダです。のメモリ使用量を修正する方法はわかりませんx264が、新しいx26 5を試しましたが、私の場合は1.6 GBしか使用していませんが、libx264は2 GBを超えるメモリ制限を要求して失敗していました(プロセスごと、32で)ビットシステム)。

だから、私のために働いたのは使用することでした:

ffmpeg -i input -pix_fmt yuv420p -c:v hevc -x265-params crf=23 out.mp4

(オーディオを処理するためのパラメーターを省略します。)

しかし、一般的なアプローチは、他のエンコーダーを試すことです。x265が機能しない場合は、mpeg4とvp9を試してみました。それでもうまくいかない場合は、エンコーダーの設定を確認するなどのオプションがあります(ただし、メモリの使用に直接関連する明白なものは何も表示されません)。

ffmpeg -h encoder=mpeg4

更新:実際、YouTubeはまだHEVC(別名H.265)を受け入れていないことが判明しました(アップロードが完了した後にのみ通知されます)。それで、上で提案したように、私はVP9に行き、今回は最初の50フレームでパイロットランを行いました。私が見つけたガイドと同様の設定を使用しました(一定の品質設定ですが、提案されたパラメーターをもっと使用する必要がありました)。

ffmpeg.exe -i <input> -pix_fmt yuv420p -c:v libvpx-vp9 -pass 1 -b:v 0 -crf 20 -f webm pass1.webm

ffmpeg.exe -i <input> -pix_fmt yuv420p -c:v libvpx-vp9 -pass 2 -b:v 0 -crf 20 -f webm pass2.webm

pass1.webmほとんど空になることに注意してください。)

また、可能な限り2つのパスが推奨されることに注意してください。全体的に高速なエンコーディングを含め、すべての面で優れています。

これらの設定では、4K解像度で73秒のクリップをエンコードするのに約16時間かかりました。これは、指定するのを忘れたため、1つのコアを使用しています-threads。遅いですが、FFmpegのメモリ使用量は約0.6GBまでしか増えませんでした。結果のファイルは300MBであり、非圧縮フレームと比較して品質の低下は見られません(したがって-crf 20、少し低すぎた可能性があります)。

于 2016-07-28T03:37:02.180 に答える
0

真実は、CPUとメモリを大量に消費するジョブをビデオエンコーディングすることです。あなたがそれをしたいのなら、あなたはそれに必要な記憶を与える必要があります。

1080p .movを同じ品質の.mp4に変換したいので、ファイルの形式を変更し、再エンコードしたくないと想定しています。

ffmpeg -i input.mov -acodec copy -vcodec copy out.mp4

簡単に、メモリのオーバーヘッドなしでそれを行います

オーディオコーデックのみを変更したい場合は、コーデック部分を指定しないでください。

入力ビデオコーデックが機能しない場合[したがって、コピーはオプションではありません]、vcodecに対してmpeg4エンコーディングを実行してみてください。そこでエンコードする方が安価ですが、常にメモリ要件に適合することを保証することはできません。

于 2012-09-12T18:52:40.090 に答える