どうやって使うの?ffmpeg
品質を下げてビデオサイズを小さくしますか? (空き容量が少ないモバイルデバイスで実行する必要があるため、当然のことながら可能な限り小さいサイズで)?
動画で字幕(*.srtまたは*.sub)を使用できる場合は、変換した動画ファイルに適したパラメータに変換したいことに注意してください。
答え1
2020年更新:この回答は2009年に作成されました。 2013年以降、H.264よりも優れたビデオフォーマット、つまりH.265が広く使用されています(同じ品質でより多くの圧縮を行うか、同じサイズでより高い品質を提供するという点で優れています)。これを使用するには、libx264コーデックをlibx265に置き換えてCRF値を増やす(4または6の追加など)、圧縮レバーをさらにスライドさせる必要があります。 H.265の合理的な範囲はおそらく24〜30であろうからです。参考にしてください減らすCRF値は次のとおりです。高いビットレートにより高い高品質のビデオ。
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 output.mp4
libx265 を指定することもできます。基本、これはファイルサイズと品質に影響します。
以前のH.264形式を使用して適用されたこの技術については、以下を参照してください。この回答、便宜上、次のように引用されます。
ターゲットサイズ(ビット単位)をビデオ長(秒単位)で割って必要なビットレートを計算します。たとえば、ターゲットサイズは1 GB(1 GB)です。バイト、つまり8GBです。少し)および10,000秒のビデオ(2時間46分40秒)、800,000ビット/秒(800kbit / s)のビットレートを使用する:
ffmpeg -i input.mp4 -b 800k output.mp4
考慮すべき他のオプションは次のとおりです。一定の比率要素、これは平均ビットレートを下げますが、より良い品質を維持します。 CRFを18から24の間に変更します。低いほど、ビットレートは高くなります。
ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4
答え2
モバイルデバイスにさらにビデオを追加するためにファイルサイズを縮小したいと言っていましたが、これが私のユースケースです。ここにあるすべての答えは圧縮品質を減らすことですが、ビデオフレームサイズを減らすことについては誰も言及していません。はるかに高速で、ソースによっては最大数倍速く、エンコードするピクセル数が少ないため、解像度は低くなります。その結果、ファイルサイズを大幅に削減できます。
欠点は、ピクセル数が少ないということは、画像の詳細な描写が少ないことを意味するので、品質も非常に低下することである。ただし、コンパクトなデバイスに変換する場合はこれを許可できます。
FFmpegのドキュメントをご覧くださいズームより多くの情報を知りたいです。
半分のサイズに調整するには:
ffmpeg -i input.mkv -vf "scale=trunc(iw/4)*2:trunc(ih/4)*2" half_the_frame_size.mkv
1/3サイズ:
ffmpeg -i input.mkv -vf "scale=trunc(iw/6)*2:trunc(ih/6)*2" a_third_the_frame_size.mkv
クォーターサイズ:
ffmpeg -i input.mkv -vf "scale=trunc(iw/8)*2:trunc(ih/8)*2" a_fourth_the_frame_size.mkv
5分の1サイズ:
ffmpeg -i input.mkv -vf "scale=trunc(iw/10)*2:trunc(ih/10)*2" a_fifth_the_frame_size.mkv
この例では、ピクセルサイズが一部のコーデック(H265を含む)が必要とする2の倍数になるように、サイズを値の2倍に分割して2を掛けます。
-2
また、あるパラメータから特定のサイズにサイズ変更し、別のパラメータに対して同じサイズを自動的に維持することもできます。たとえば、一方向の360ピクセルは次のようになります。
-vf "scale=-2:360"
解像度の変更に注意してください。いつも録音が必要なため、他の回答のすべてがここにも適用され、これらの例はH265オプションと互換性があります(例:-c:v libx265 -crf 28
。
答え3
この質問に提案されている他の答えのほとんどをテストしました。テストデータの結論は次のとおりです。私がテストした提案の答えは次のとおりです。
(BR)ビットレートを変更するには、次を使用します。
ffmpeg -i $infile -b $bitrate $newoutfile
(CR) 固定率要素を変更するには、次のようにします。
ffmpeg -i $infile -vcodec libx264 -crf 23 $outfile
(SZ)ビデオ画面のサイズを変更するには(たとえば、ピクセルサイズの半分)、次のようにします。
ffmpeg -i $infile -vf "scale=iw/2:ih/2" $outfile
(BL) 次のコマンドを使用して、H.264 プロファイルを「基準」に変更します。
ffmpeg -i $infile -profile:v baseline $outfile
(DF) デフォルトの ffmpeg 処理を使用するには、次のようにします。
ffmpeg -i $infile $outfile
データ
- 「サイズ」 - 元のビデオに基づいて変換されたビデオのピクセルサイズの割合。
- 「ビットレート」 - 元のビデオと変換されたビデオのビットレート。
- 「定義」 - ビデオのピクセルサイズです。
- 「変換」 - ビデオを変換するのにかかる時間(秒単位)。
提案された方法を用いて(BL)の目標ビットレートを計算した。
===ファイルA - ノードがAngular-Fnbixa7Ts6M.mkvに電力を供給する方法===
original BR CR SZ BL DF
-------- --- -- -- -- --
size 64152 kb 214% 76% 40% 83% 76%
bitrate 411 kb/s 883 313 165 342 313
definition 1920x1080 1920x1080 1920x1080 960x540 1920x1080 1920x1080
convert -- 648 509 225 427 510
===ファイルB - AngularでGraphQLを使用_作成者:Lee Costello-OGyFxqt5INw.mkv ===
original BR CR SZ BL DF
-------- --- -- -- -- --
size 410301 kb 33% 109% 28% 143% 109%
bitrate 2687 kb/s 880 2920 764 3843 2920
definition 3840x2160 3840x2160 3840x2160 1920x1080 3840x2160 3840x2160
convert -- 2307 3188 1116 2646 3278
結論として
(SZ)方法は確かに最速の方法です。 2~4倍速いです。他のすべての方法は、ビデオの実際の長さよりも変換するのに時間がかかるため、これはHDビデオの場合に大きな問題になる可能性があります!たとえば、(CR)方式では、21分の動画を変換するのに53分かかりました。
ビデオの解像度がビデオが表示される画面の解像度より大きい場合(SZ)方法が最善の方法です。たとえば、携帯電話が1080pの写真しか表示できない場合、3840x2160のビデオを送信するのは無駄です。サイズを1080pに半分に縮小することをお勧めします。
提案された回答の一部は、実際には一部の動画のサイズを大きくします。例えば、(BR)法は、1080pのサンプルサイズを2倍以上増やす。ただし、2160pサイズは1/3に縮小されます。 HD サンプルの場合、(CR)、(BL)、(DF) 法はすべてビデオサイズを増やします.
正解(または最良)回答
まず、ターゲットモニタがサポートする最大解像度に解像度を下げることをお勧めします。
ファイルサイズをさらに小さくしたい場合は、個人の選択に依存します。情報の内容を減らしたり圧縮を増やしたりできます。
心配しない場合は、解像度をさらに下げることができます。
ビデオにクイックアクションシーンが含まれていない場合は、フレームレートを下げる必要があります。
強力なプロセッサがあり、スペースが唯一の問題である場合は、圧縮率を上げることができます。
ビットレートはいくつかの要因の組み合わせです。したがって、ffmpegにビットレートを下げるように指示するだけでは、望ましい結果が得られない可能性があります。
情報内容を減らす別の方法は、色深度を減らすことである。これを行う方法は議論されていない。