同じ形式でビデオサイズを縮小し、フレームサイズを縮小する
-
11-10-2019 - |
質問
この質問は非常に基本的なものかもしれません
同じ形式で、より少ないサイズのビデオを取得するために、損失圧縮(WMV、MPEG)形式のフレームサイズ/レートを削減する方法はありますか?
これにはオープンソースまたは独自のAPIがありますか?
解決
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>
入力ビデオファイルを640 x 480のサイズと512キロビット/秒のビットレートのビデオに変換し、MPEG 1ビデオコーデックを使用して元のオーディオストリームをコピーします。もちろん、必要な値をプラグインして、サイズとビットレートで遊んで、探している品質/サイズのトレードオフを実現できます。で説明されている他のオプションもたくさんあります ドキュメンテーション
走る ffmpeg -formats
また ffmpeg -codecs
利用可能なすべての形式とコーデックのリスト。最終出力のために特定のコーデックをターゲットにする必要がない場合は、H.264のような最先端のコーデックを使用して、最小限の品質損失でより良い圧縮比を達成できます。
他のヒント
同じ画面サイズを保持したい場合は、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
H.264コーデックで固定ビットレートを選択する代わりに、で説明されているように別のプリセットを選択することもできます https://trac.ffmpeg.org/wiki/x264EncodingGuide. 。私も見つけました KeyJのブログでのビデオエンコーダーの比較 (アーカイブバージョン)興味深い読み物、それはH.264とテオラなどと比較します。
以下は、私が試したさまざまなオプションの比較です。録音されたビデオのサイズは元々673mで、iPadで撮影されました RecordMyscreen. 。 1024x768の解像度で約20分かかります(ビデオの半分が空白であるため、768x768にトリミングしました)。サイズを縮めるために、解像度を480x480に下げました。オーディオはありません。
結果は、ベースと同じ1024x768を採用しています(およびトリミング、スケーリング、および フィルター):
- 特別なオプションなし:95m(エンコード時間:1M19)。
- だけで
-b 512k
追加すると、サイズは77mに低下しました(エンコード時間:1M17S)。 - だけで
-preset veryslow
(そしていいえ-b
)、それは70mになりました(エンコーディング時間:6M14S) - 双方と
-b 512k
と-preset veryslow
, 、サイズは77mになります(単なるよりも100k小さくなります-b 512k
). - と
-preset veryslow -crf 28
, 、39mのファイルを取得し、5m47sが必要でした(視覚的な品質の違いはありません)。
n = 1なので、塩の粒で結果を取り、独自のテストを実行してください。
Mac&Windowsコールの両方のHandbrakeの両方にアプリケーションがあります。これはコマンドラインのものではなく、クイックオープンファイルのために - 出力ファイル形式とラフな出力サイズを選択しながら、ビデオについての良いものを保持しながら選択します。 、それは最高のFFMPEGの単なるグラフィカルなビューです...それはそれらのダイハードテクスターのコマンドライン入力をサポートします。https://handbrake.fr/downloads.php
ffmpeg -i <input.mp4> -b:v 2048k -s 1000x600 -fs 2048k -vcodec mpeg4 -acodec copy <output.mp4>
-I入力ファイル
-b:vキロバイトの出力ビデオのvideobitrate(試してみる必要があります)
-S出力ビデオの寸法
-fs ファイルサイズ キロバイトの出力ビデオの
-vcodec videocodec(使用
ffmpeg -codecs
利用可能なすべてのコーデックをリストするには)- - 出力ビデオ用のAcodecオーディオコーデック(オーディオストリームのみをコピーしてください、抑制しないでください)
私はこれを最近やりたいと思ったので、呼ばれるツールを作成しました 収縮包装 それは使用します ffmpeg ビデオをトランスコードするには、可能な限り多くのメタデータを保存しながら(ファイル変更タイムスタンプを含む)。
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/は、ビデオが変換したい場所です
- - 入力拡張は、処理するビデオのタイプです。ここで.mp4
- -ffmpeg-optsは、トランスコードをカスタマイズするために使用する任意のffmpegオプションです
その後、拡張機能に一致するすべてのビデオファイルを再帰的に見つけ、それらをすべて同じ名前のファイルにトランスコードします -tc
サフィックス。
その他の構成オプション、GoProなどのプリセットについては、 readme.
これが誰かを助けることを願っています!