Windowsでffmpegを使ってちょっとした動画の加工をする

本格的な動画編集をするわけではないのだが、撮影した動画の一部を切り取ったり、結合させたり、別のフォーマットで再エンコードしたいことがある。

それだけのために有料のソフトを購入するのは馬鹿馬鹿しいし、無料のソフトであっても出所の怪しいものは極力使いたくない。それに無料のものはウォーターマークが入ってしまうなど制限のあるものも多い。

そんなときに、無料で機能も豊富な上、オープンソースである程度実績もあり、コマンドラインから簡単に使えるffmpegが便利なので、インストール手順や個人的によく使うコマンドを備忘録も兼ねてまとめておく。

インストールする

ダウンロード

今回はWindows10にインストールする。

以下のサイトからWindows用のzipファイルをダウンロードする。

https://ffmpeg.zeranoe.com/builds/

VersionとLinkingの選択が迷うところだが、リリースビルド(4.1.3などのバージョン番号が付いているほう)と、Staticなリンクのほうを選んでおくのが確実だと思う。

ダウンロードしたら、適当なフォルダにzipファイルを展開する。後でパスを通すので恒久的にアクセス出来るわかりやすい場所(例えば、D:\Apps\ffmpeg 等)がよい。

環境変数の設定

ダウンロードして展開したフォルダにパスを通す。これをやっておかないと、コマンドプロンプトなりPowerShellなりでffmpegを起動する際にいちいちフルパス指定しなければいけなくなる。

コントロール パネル → システム → システムの詳細設定 → [詳細設定] タブ → [環境変数]を開く。

[ユーザ環境変数]の[Path]を選択し、[編集]を押す。

[新規]を押すと新しい項目が追加されるので、ここに先ほど展開したフォルダの「bin」配下のパスを指定する。

どうでもいいが、Windows10は環境変数の設定がしやすくなっていて地味に便利である。

ffmpegの起動準備

コマンド操作に慣れている人なら何を今更という話だが、念のため。

ffmpegにはGUIが存在しないので、操作は全てコマンドで行う。私は以下の手順でコマンド入力の準備をすることが多い。

動画のあるフォルダを開き、Shiftキーを押しながらフォルダ内の空白を右クリック → [PowerShell ウィンドウをここに開く] を押す。

これで動画のあるフォルダがカレントフォルダになった状態でPowerShellのウィンドウが開き、ffmpegの実行準備は完了。

よく使うコマンド

無劣化で動画の一部分を切り出す

例えば、全体で15分の動画の中から、途中の5分~10分の間を切り出して別ファイルに保存する場合。

コマンドとしては以下のようになる。

ffmpeg -ss 00:05:00 -i input.mp4 -ss 0 -t 300 -c copy output.mp4

重要なのは「無劣化で」というところ。切り出す際に再エンコードが行われてしまうと、画質が劣化する上に処理にかなり時間がかかってしまう。「-c copy」 を指定すると、再エンコードさせずに切り出すことが出来る。

最初の -ss が切り取りの開始時間を指定するオプション。時:分:秒 で指定する。-ss はもう一箇所、0 を指定しているところがあるが、これを指定しないと出力される動画が乱れてしまうため必ず指定する。

切り出す動画の長さは、 -t オプションで指定する。5分間切り出したい場合は、300秒なので 「-t 300」と指定することになる。

あとは、-i オプションで元の動画のファイル名、末尾に出力先のファイル名を指定すれば良い。

ビットレートを指定してH.265(HEVC)でエンコードする

普及しているのかしていないのかイマイチわからないが、H.265はH.264の半分のビットレートで同等の画質が得られるらしい。元の動画の半分のビットレートを指定してエンコードし直す、なんていう場合は以下のようなコマンドで対応出来る。

ffmpeg -i input.mp4 -vcodec libx265 -b:v 1000k output.mp4

-vcodec オプションでエンコード先を指定する。H.265の場合は「libx265」。

ビットレートの指定は、-b オプションで行う。動画部分のビットレートのみ設定する場合は、-b:v に続いてビットレートを指定する。この例では 1000kbpsでエンコードするため「-b:v 1000k」を指定している。

複数の動画ファイルを無劣化で結合する

同じコーデックの動画を複数結合する場合、再エンコードせず無劣化で結合させることが可能。

前準備として、結合したいファイル名を以下の形式で羅列したテキストファイルを用意しておく。

mylist.txt

file 'G:\Temp\movies\input1.mp4'
file 'G:\Temp\movies\input2.mp4'
file 'G:\Temp\movies\input3.mp4'

上記のテキストファイルを動画と同じフォルダに保存したら、以下のようなコマンドを実行する。

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4

「-f concat」が動画の結合の指定で、-i オプションに先に作ったテキストファイルのファイル名を指定する。

https://trac.ffmpeg.org/wiki/Concatenate

コメント

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