★Bluetooth搭載、充電可能なFMトランスミッターを紹介★

FFmpegを使用して、簡単に動画のサイズ/スケール/解像度を調整する方法

IT・電化製品
この記事は約6分で読めます。

 

FFmpeg を使用してビデオのサイズ変更/拡大/縮小/解像度を簡単に変更

この FFmpeg チュートリアルでは、FFmpeg のコマンド ライン ツールを使用してビデオの解像度を変更する (またはビデオのサイズ変更/拡大縮小する) 方法を学びます。

ビデオの解像度の変更 (サイズ変更またはスケーリングとも呼ばれます) は、ビデオの編集、処理、圧縮において非常に一般的な操作です。これは、単一のビデオがソースとして取得され、複数の異なるビットレート解像度の組み合わせに圧縮される ABR ビデオ ストリーミングに特に当てはまります。たとえば、入力ビデオ解像度は1920x1080 、ABR ビットストリームは1280x720640x480などにすることができます。

したがって、最初のステップとして、入力ビデオの解像度を調べてみましょう。 FFmpeg バージョンに付属するツールffprobeを使用して、入力ビデオの解像度を決定してみましょう。これはffprobeを使用して行われます。

ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4

このコマンドの出力は、コンソールに表示される1920x1080と一致する必要があります。素晴らしいです。ビデオの解像度がわかり、解像度を拡大縮小したり変更したりできるようになりました。

注:スケールアップ/スケールダウンの操作は損失を伴うプロセスであり、ビデオ品質がある程度低下することに注意する必要があります。

スポンサーリンク

FFmpeg を使用してビデオの解像度を調整/スケーリング/変更するにはどうすればよいですか?

FFmpeg を使用したビデオのスケーリングまたは解像度の変更は、FFmpeg のscaleフィルターによって行われます。 scaleフィルターを使用するには、次のコマンドを使用します。

ffmpeg -i input.mp4 -vf scale=$w:$h <encoding-parameters> output.mp4

このうち$w$h対象動画の必要な幅と高さを表します。たとえば、 -vf scale=640:480を使用してビデオのサイズを480pに変更できます。

それだけです!この簡単なコマンドで、FFmpeg を使用してビデオの解像度を変更できます。

また、FFmpeg はビデオの解像度を変更した後、その解像度で再エンコードします。上記のコマンド ラインでは、FFmpeg にエンコード パラメータを指定し、これらのパラメータを使用してスケーリングされたビデオをエンコードできます。たとえば、高品質の H.264/AVC エンコードを実現するために crf=18 でエンコードするように FFmpeg に指示したり、別のエンコードを選択したりすることができます。

さて、次のトピックに取り組みましょう。ビデオの解像度は変更しますが、そのアスペクト比を保持/維持することです。

FFmpeg を使用して高品質を維持しながらビデオのサイズを変更する方法

サイズを変更すると、出力ビデオの品質が低下したり、期待したものと異なったりする場合があります。この問題は、サイズ変更プロセスの後に使用したいビデオ エンコード パラメータを FFmpeg に伝えることで簡単に解決できます。

ここに例があります –

ffmpeg -i input.mp4 -vf scale=1280:720 -preset slow -crf 18 output.mp4

ここでは、ビデオを 720p にスケールし、 crf=18libx264の低速プリセットを使用してエンコードするように FFmpeg に指示しています。オープンするエンコード ツールの数により、通常は非常に高い品質が得られます。

アスペクト比を維持しながらビデオの解像度を変更するにはどうすればよいですか?

画像のアスペクト比は、Wikipedia で次のように定義されています。画像のアスペクト比は、画像の幅と高さの比です。通常、 16:9のように、コロンで区切られた 2 つの数値として表されます。x x:yアスペクト比では、画像の幅は x 単位、高さは y 単位になります。

ビデオを操作するときに、ビデオの元のアスペクト比を維持または維持しながら、ビデオの解像度を変更 (またはビデオの拡大縮小) する方法についての質問に遭遇することがよくあります。

FFmpeg では、アスペクト比を維持しながらビデオを拡大縮小する場合は、 heightまたはwidthパラメーターのいずれかを設定し、もう一方のパラメーターを-1に設定する必要があります。つまり、 heightを設定した場合は width を-1に設定し、その逆も同様です。

デモンストレーションの目的で、次のコマンドが入力として HD ビデオ ( 1920x1080 ) を受け取ると仮定します。そして、解像度を変更したいとします。これは上で説明した 2 つの方法で行うことができるので、両方の方法を試してみましょう。

1. アスペクト比を維持するために幅を指定します

ffmpeg -i input.mp4 -vf scale=320:-1 output.mp4

結果のビデオの解像度は320x180になります。これは1920 / 320 = 6であるためです。したがって、 height 1080 / 6 = 180ピクセルにスケールされます。

2. アスペクト比を維持するために高さを指定します

ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4

結果のビデオの解像度は1280x720になります。これは、 1080 / 720 = 1.5あるためです。したがって、 width 1920 / 1.5 = 1280ピクセルにスケールされます。

変数を使用して FFmpeg でビデオの解像度をスケーリング/変更する

ビデオパラメータを表す変数を使用して、同じズームコマンドを実装できます。入力ビデオのwidthheightそれぞれiwihで表します。

ビデオの幅を 2 ​​倍 ( 2x ) に拡大するコマンドがどのようなものかを見てみましょう。

ffmpeg -i input.mp4 -vf scale=iw*2:ih output.mp4

高さまたは幅を数値で除算する場合は、 scale=iw/2:ih/2パラメーターを二重引用符で囲む必要があるため、構文が若干変更されます。

ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output.mp4

入力ビデオ サイズに基づいてビデオをアップスケーリングしないようにする

記事の冒頭で述べたように、各アップ/ダウン ズーム操作では、通常、入力ビデオと同じレベルのビデオ品質は生成されません。スケーリング プロセス中には、ある程度の圧縮損失が必ず発生します。 FFmpeg は、入力解像度が低すぎる場合にアップスケーリングを防ぐ賢いトリックを提供します。

ffmpeg -i input.mp4 -vf "scale='min(320,iw)':'min(240,ih)'" output.mp4

上記のコマンド ラインでは、スケーリングを実行するための最小の幅/高さはそれぞれ320240ピクセルに設定されています。これは、低品質のスケーリングを防ぐ非常に簡単な方法です。


FFmpeg を使用してサイズ変更、拡大縮小、解像度を変更する