web-dev-qa-db-ja.com

同じフォーマットでビデオサイズを縮小し、フレームサイズを縮小する

この質問は非常に基本的なものかもしれません

Lossy圧縮(WMV、MPEG)形式のフレームサイズ/レートを削減して、同じ形式でより小さなサイズの小さなビデオを取得する方法はありますか。

このためのオープンソースまたは独自のAPIはありますか?

68
Vignesh

ffmpeg は、この機能を提供します。あなたがする必要があるのは、次のように実行することです

ffmpeg -i <inputfilename> -s 640x480 -b 512k -vcodec mpeg1video -acodec copy <outputfilename>

Ffmpegの新しいバージョンでは、-bから-b:v

ffmpeg -i <inputfilename> -s 640x480 -b:v 512k -vcodec mpeg1video -acodec copy <outputfilename>

入力ビデオファイルを、MPEG 1ビデオコーデックを使用して元のオーディオストリームをコピーするだけで、サイズ640 x 480、ビットレート512キロビット/秒のビデオに変換します。もちろん、必要な値をプラグインし、サイズとビットレートを調整して、目的の品質とサイズのトレードオフを実現できます。 documentation で説明されている他のオプションもたくさんあります

実行ffmpeg -formats または ffmpeg -codecs使用可能なすべての形式とコーデックのリスト。最終出力の特定のコーデックをターゲットにする必要がない場合は、H.264などの最先端のコーデックを使用して、品質の低下を最小限に抑えながら、より良い圧縮率を実現できます。

83
Jason B

同じ画面サイズを維持したい場合は、crfファクターの使用を検討できます。 https://trac.ffmpeg.org/wiki/Encode/H.264

ここに私のために働くコマンドがあります:(Macでは-strict -2 aacオーディオコーデックを使用できるようにします。

ffmpeg -i input.mp4 -c:v libx264 -crf 24 -b:v 1M -c:a aac output.mp4
37
rebe100x

H.264コーデックで固定ビットレートを選択する代わりに、 https://trac.ffmpeg.org/wiki/x264EncodingGuide で説明されているように、異なるプリセットを選択することもできます。また、 KeyJのブログでのビデオエンコーダーの比較アーカイブバージョン )は興味深い読み物で、H.264とTheoraなどを比較しています。

以下は、私が試したさまざまなオプションの比較です。録画されたビデオは元々673Mのサイズで、iPadで RecordMyScreen を使用して撮影されました。解像度は1024x768(ビデオの半分は空白であるため、768x768にトリミングしました)で約20分の持続時間を持ちます。サイズを小さくするために、解像度を480x480に下げました。音声はありません。

結果は、ベースと同じ1024x768を使用します(トリミング、スケーリング、および フィルター を適用します):

  • 特別なオプションなし:95M(エンコード時間:1m19s)。
  • -b 512kのみを追加すると、サイズは77M(エンコード時間:1m17s)に低下しました。
  • -preset veryslowのみ(-bなし)で、70Mになりました(エンコード時間:6分14秒)
  • -b 512k-preset veryslowの両方で、サイズは77M(単なる-b 512kよりも100K小さくなります)になります。
  • -preset veryslow -crf 28を使用すると、5M47秒かかった39Mのファイルが表示されます(視覚的な品質の違いはありません)。

N = 1なので、一粒の塩で結果を取得し、独自のテストを実行します。

29
Lekensteyn
ffmpeg -i <input.mp4> -b:v 2048k -s 1000x600 -fs 2048k -vcodec mpeg4 -acodec copy <output.mp4>
  • -i入力ファイル

  • -b:v出力ビデオのキロビット単位のビデオビットレート(試してみる必要があります)

  • -s出力ビデオの寸法

  • -fs [〜#〜] filesize [〜#〜]キロバイト単位の出力ビデオ

  • -vcodec videocodec(ffmpeg -codecsを使用して、使用可能なすべてのコーデックをリストします)

  • -出力ビデオ用のacodecオーディオコーデック(オーディオストリームのみをコピーし、気化しないでください)
4
Rumroedeln

あまりにも最近これをやりたいと思ったので、 FFmpeg を使用してビデオをトランスコードする Shrinkwrap というツールを作成しました。可能な限り元のメタデータ(ファイル変更タイムスタンプを含む)。

Dockerコンテナとして実行できます:

docker run -v /path/to/your/videos:/vids bennetimo/shrinkwrap \
--input-extension mp4 --ffmpeg-opts crf=22,preset=fast /vids

どこ:

  • / path/to/your/videos /は、変換したいビデオがある場所です。
  • --input-extensionは、処理するビデオのタイプです。ここでは.mp4です
  • --ffmpeg-optsは、トランスコードのカスタマイズに使用する任意のFFmpegオプションです。

次に、拡張子に一致するすべてのビデオファイルを再帰的に検索し、-tcサフィックスを持つ同じ名前のファイルにすべてトランスコードします。

その他の構成オプション、GoProなどのプリセットについては、 readme を参照してください。

これが誰かを助けることを願っています!

3
bennetimo

MacとWindowsの両方にHandbrakeを呼び出すためのアプリケーションがあります。これはコマンドラインのものではなく、クイックオープンファイルです。出力ファイル形式と大まかな出力サイズを選択します。 、それは最高のffmpegの単なるグラフィカルビューです...これらのダイハードテクスターのコマンドライン入力をサポートします。 https://handbrake.fr/downloads.php

3
Jimbo Bryant