
以前の記事(ffmpegでyoutube用の動画編集(結合、分割、字幕追加))で
FFMPEGによる撮影・結合・分割・字幕追加・モザイク・音楽と動画の合成
コマンドについて記載しました。
しかし作成する動画によっては、上記のコマンドだけではうまくカバーしきれないことがあります。
今回は、そんな問題に直面した時に利用できそうなFFMPEGコマンドのいくつかを記録していきたいと思います。
FPSレートの調整
形式の違う動画同士を結合する際に、警告メッセージ(※1)が発生することがあります。
作成された動画を見てみると、音声は聞こえるのですが、動画が途中で止まってしまいます。
この問題を解決するために、各動画のFPSレート(※2)を合わせるためのコマンドを利用します。
以下のコマンドは -r 30 の部分でFPSレートが30の動画を作成しています。全ての動画のFPSレートを合わせることで動画結合時の警告メッセージはなくなります。
1 |
ffmpeg -i [変換元の動画パス] -r 30 [変換後の動画パス] |
(※1)例えば次のようなメッセージが出力されます。Non-monotonous DTS in output stream 0:0; previous: 45568, current: 34666; changing to 45569. This may result in incorrect timestamps in the output file.
(※2)「FPS」は、frames per second(コマ/秒)を表します。1秒間の動画で見せる静止画の枚数(コマ数)です。
4分割画面の動画の作成
インパクトのある動画や比較動画を作成するために、いくつかの動画を一つの画面に組み合わせる必要があります。
コマンドは以下を利用します。
1 |
ffmpeg -i [動画1のパス] -i [動画2のパス] -i [動画3のパス] -i [動画4のパス] -filter_complex "nullsrc=size=1280x720 [base];[0:v]scale=640:360[scaled0];[1:v]scale=640:360[scaled1];[2:v]scale=640:360[scaled2];[3:v]scale=640:360[scaled3];[base][scaled0]overlay=x=0:y=0[out0];[out0][scaled1]overlay=x=640:y=0[out1];[out1][scaled2]overlay=x=0:y=360[out2];[out2][scaled3]overlay=x=640:y=360" -t 12 -vcodec libx265 [変換後の動画パス] |
作成した動画は例えば以下の様になります。
容量節約
作成する容量を節約すれば、YouTubeへの動画アップロード時間などを
節約することができます。
ここでは、 H.265エンコーダ(※1)による動画圧縮で容量の節約を行います。-vcodec libx265で指定します。
1 |
ffmpeg -i [変換元の動画パス] -vcodec libx265 [変換後の動画パス] |
(※1) H.265エンコーダについては、 FFMPEGの公式HPに説明があります。H.264に比べて圧縮率が50-75%上がっています。
スレッド数指定
FFmpeg は自動的に使用する CPU スレッドの数を決定します。
ただし -threads <number>
パラメータを使うことで明示的にスレッド数を指定することも可能です。
通常、CPUコア数と同数を指定します。
-threads 0 でコア数の1.5倍のスレッド数が指定されます。
※CPU負荷が100%付近で推移してFFmpegが落ちてしまう場合は、-threadsをコア数より少なくするといいかもしれません。
1 |
ffmpeg -i [変換元の動画パス] -threads 0 -vcodec libx265 [変換後の動画パス] |
音声の抜き出し
ある動画の音声だけを利用したい場合に利用します。
-vn -acodec copy の部分で指定します。
1 |
ffmpeg -i [変換元の動画パス] -vn -acodec copy [変換後の動画パス] |
2つの音声を合成
2つ以上の音声を重ね合わせて一つの音声にする場合に利用します。
-filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 のオプションで指定します。
1 2 |
ffmpeg -i [音声1のパス] -i [音声2 のパス] -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 [合成後のパス] |
サイズ変更
動画をアップロードするサイトで動画のサイズ 限度 が指定されている場合に利用します。
-s [横サイズ]x[縦サイズ] のオプションで指定します。
1 |
ffmpeg -i [変換元の動画パス] -s [横サイズ]x[縦サイズ] [変換後の動画パス] |
90度傾ける
撮影時にカメラを90度傾けていた動画を元に戻した状態とする場合に利用します。
-vf “transpose=[数値]”のオプションで指定します。
[数値]部分には、次の値を設定します。
値 | 意味 |
0 | 90度反時計回りに回転したのち上下反転 |
1 | 90度時計回り |
2 | 90度反時計回り |
3 | 90度時計回りののち上下反転 |
1 |
ffmpeg -i [変換元の動画パス] -vf "transpose=1" [変換元の動画パス] |
コメント