【FFmpeg】動画サイズ(解像度)を変更する方法

【FFmpeg】動画サイズ(解像度)を変更する方法 ツール

「完全無料で動画サイズの変更を行いたい」
「高速に動画の解像度を変更したい」

このような場合には、この記事の内容が参考になります。
この記事では、FFmpegによる動画サイズの変更方法について解説しています。

本記事の内容

  • FFmpegの基本的な使い方
  • FFmpegによる動画サイズの変更
  • 「not divisible by 2」エラーへの対応

それでは、上記に沿って解説していきます。

FFmpegの基本的な使い方

FFmpegのインストールについては、以下のどれかが参考になるでしょう。

FFmpegの使い方は、実は非常に簡単です。
一見すると、コマンドラインツールであるから難しそうに見えます。

しかし、ちゃんと理解すればなんて事はありません。
動画に関しては、以下の形を覚えるだけでも十分です。

ffmpeg -i input.mp4 -vf "フィルタ名=パラメータ" output.mp4

「-i」は、入力動画の前に付けるオプションです。
複数の入力動画がある場合は、次のように記述します。

-i 動画1 -i 動画2 -i 動画3 ・・・

「-vf」は、「video filter」の略称です。
動画ストリームにフィルタを適用するために使用されます。

動画のサイズ変更、クロッピング、回転、色調整など、さまざまな動画編集タスクを実行できます。
「-vf」のフィルタだけでも、その数は300個近く存在しています。

複数のパラメータを設定する場合は、「:」で区切ります。

-vf "フィルタ名=パラメータ1:パラメータ2:..."

そして、複数のフィルタを適用する場合は「,」でフィルタを区切ります。

-vf "フィルタ1=パラメータ,フィルタ2=パラメータ"

音声編集を行う場合は、「-af」オプションとするだけです。
これらを理解すれば、基本はクリアと言ってもよいでしょう。

最後にちょっと出力ファイルの指定について説明しておきます。
「output.mp4」が出力ファイルになります。

ここで「あれ?」と感じる人がいるかもしれません。
通常、出力ファイルには「-o」などのオプションが存在することがあります。
そのようなコマンド形式は多いですね。

FFmpegでは、何もオプションは付けずにコマンドの最後に記述します。
慣れていない場合は、違和感を感じるかもしれません。
ここは、慣れていきましょう。

以上、FFmpegの基本的な使い方を説明しました。
次は、FFmpegによる動画サイズの変更を説明します。

FFmpegによる動画サイズの変更

FFmpegを用いた動画サイズの変更を説明します。

動画サイズを変更するコマンドは、以下となります。

ffmpeg -i input.mp4 -vf "scale=WIDTH:HEIGHT" output.mp4

「scale」が、適用するフィルタということです。
パラメータが複数ある場合は、「:」で区切りましたね。

WIDTHやHEIGHTには、数値を設定します。
アスペクト比を維持したい場合は、「-1」を設定することになります。

幅を600にしてアスペクト比を維持したい場合は「600:-1」と設定します。
逆に、縦を400にしてアスペクト比を維持したい場合は「-1:400」と設定します。

では、実際に動画の解像度を変更してみましょう。
次のページの動画を利用します。
https://www.pexels.com/ja-jp/video/7975468/

上記サイズの動画をダウンロードして、ファイル名を「input.mp4」に変更します。
この動画のアスペクト比は、「16:9」です。

まず、この動画を400×400の動画に変更してみましょう。

ffmpeg -i input.mp4 -vf "scale=400:400" output_1.mp4

大体予想は出来ていると思いますが、次のような正方形の動画にサイズ変更されます。
元動画のアスペクト比が維持されていません。

次は、アスペクト比は維持して幅402の動画に変更してみましょう。

ffmpeg -i input.mp4 -vf "scale=402:-1" output_2.mp4

結果は、402 x 226のサイズの動画に変更されます。
アスペクト比は、維持されています。

最後は、アスペクト比は維持して縦404の動画に変更してみましょう。

ffmpeg -i input.mp4 -vf "scale=-1:404" output_3.mp4

結果は、718 x 404のサイズの動画に変更されます。
アスペクト比は、維持されています。

FFmpegによる動画サイズの変更は、簡単ですね。
ただ、途中で疑問に思った人がいたかもしれません。

アスペクト比を維持する場合に、なぜ「幅402」や「縦404」という中途半端な値なのだと。
結論から言うと、「400」にするとエラーが出るのです。
そのエラーについては、次で説明します。

以上、FFmpegによる動画サイズの変更を説明しました。
次は、「not divisible by 2」エラーへの対応を説明します。

「not divisible by 2」エラーへの対応

「幅400」でアスペクト比を維持させるために、次のコマンドを実行するとします。

ffmpeg -i input.mp4 -vf "scale=400:-1" output_4.mp4

そうすると、次のようなエラーが表示されます。

height not divisible by 2 (400x225)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

これは、動画のエンコード時に高さや幅が2で割り切れない値になっているために発生しています。
一部のコーデック(例:H.264)では、動画の幅や高さが2で割り切れる値でなければならないという制約があります。

このような場合は、まず「225」を割り切れる数字に変更します。
ここでは、「226」としましょう。

割り切れる値に変更して、次のように指定し直します。

ffmpeg -i input.mp4 -vf "scale=400:226" output_5.mp4

そうすると、400 x 226の動画が作成されます。
でも、これはわずかにアスペクト比が元動画とは異なります。
(※見た目だけでは認識できない差異です)

正しいアスペクト比にするには、「幅402」にするべきです。
自動的に「幅402」に変更するコマンドは、以下となります。

ffmpeg -i input.mp4 -vf "scale=-2:226" output_6.mp4

結果は、402 x 226のサイズの動画に変更されます。
アスペクト比は、維持されています。

「-2」を幅に指定しています。
そうすることにより、自動的に「縦226」に適した「幅402」が算出されています。

この考え方をベースにして、次のコマンドでエラーが出る場合の対応を考えてみてください。

ffmpeg -i input.mp4 -vf "scale=-1:400" output_7.mp4

上記コマンドを実行すると、次のようなエラーが出ます。

width not divisible by 2 (711x400)
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

この場合は、次のようなコマンドを実行して対応します。

ffmpeg -i input.mp4 -vf "scale=712:-2" output_8.mp4

結果は、712 x 400のサイズの動画に変更されます。
正確には、誤差レベルでアスペクト比は異なります。

まあ、でも人間の感覚ではわからないレベルです。

以上、「not divisible by 2」エラーへの対応を説明しました。

タイトルとURLをコピーしました