とりあえずの記録

はじめは同学科の人向けのナレッジまとめでした

動画ファイルの再エンコード(ffmpeg)

(注) 本記事は,私が某組織内Wikiに作成した記事のアーカイブです.

はじめに

映像ファイルをあまり技術に明るくない方々から集めると,まぁカオスな状況になります.

例1) 2分の動画なのに400MB
例2) movにmkvにwmvにと多種多様なファイルタイプ

通常の環境では再生さえできればよいですが,イベント時など一定の信頼性を要する環境ではトラブルの原因になりえます.
(ビットレートが高すぎて再生端末が耐えられずコマ落ちしたり,ファイルタイプが特殊で一部環境で再生できなかったり.)

そのため,受け取った側で一旦エンコードし直すことをおすすめします.

PremiereやAviutl等で読み込んで書き出し直すという方法もありますが,設定次第では画質が著しく落ちたり,むしろファイルサイズが大きくなってしまったりといった可能性もあります.

そこで,”ffmpeg”というフリーのソフトウェアを使用します.コマンドラインで操作する必要がありますが,かんたんなのでとりあえず読み進めてください.
(有志がGUIをくっつけたバージョンを公開していることもありますが,含まれるffmpeg本体が最新版でない可能性などを考慮しておすすめしません.)

ffmpegのインストール

Macの人は,Homebrewをインストールして,ターミナル.appで「brew install ffmpeg」と入力すればインストールされます.
CentOSの人は,「sudo dnf install ffmpegUbuntuの人は,「sudo apt install ffmpeg」で同様にできます.

Windowsを使っている人は,少々面倒です.2パターンあります.
[方法A] Chocolateyをインストールし,PowerShell.exeで「choco install ffmpeg」と入力してインストールする方法
[方法B] 自力で頑張ってffmpegをインストールして,PATH(環境変数)を通す方法
方法Aはすぐできると思います.ちょろっと調べてみてください.

ffmpegを使用したエンコード

インストールが終わったら,実際にffmpegを使用してエンコードしてみます.

Windowsの場合はPowerShell.exe(もとから入ってます.),それ以外の場合はTerminalを開いて,とりあえず
ffmpeg -i
といれます.(まだEnterは押さない)
半角ハイフンの前と,iの後半角の空白を忘れないように.

そこまでできたら,エクスプローラーやデスクトップなどからエンコードしたい動画をドラッグドロップします.すると自動でファイルパス・ファイル名が入力されて以下のような状態になったのではないでしょうか.
ffmpeg -i /xxx/xxx/hogehoge.mov」
※ファイルパスやファイル名,拡張子は状況によって変わります.

これで,

  1. ffmpeg」→ffmpegというソフトを使用すること
  2. 「-i」→これから入力ファイルの指定を行うこと
  3. 「/xxx/xxx/hogehoge.mov」→実際の入力ファイル

までが指定できました.最後に,書き出し時のファイル名と拡張子を指定します.
ffmpeg -i /xxx/xxx/hogehoge.mov output.mp4」
入力ファイルの後ろに半角の空白を入れて,ファイル名+拡張子を書きます.
これで,ここに書いた拡張子に合わせて自動で変換してくれます.

なお,入力ファイルと出力ファイルの拡張子が同じでも問題ありません.ちゃんと最適化して書き出してくれます.

あとはEnterキーを押せば実行されます.実行中はCPU使用率が100%に張り付くので,しばらくそのPCは使用しないでください.
新たなコマンドが入力できるようになっていたら,実行終了です.

保存場所ですが,特に指定せずファイル名だけしか入力していないのでホームディレクトリ(ユーザ名のフォルダ)直下に置かれています.
嫌だったら,書き出し用のファイル名の前にファイルパスをくっつけてあげればよいです.
基本的にはvimやcp,mvコマンドと同じようにコマンドを入力できます.

応用編

あとはひたすら繰り返していくだけですが,ffmpegには他にも便利な機能があります.それに,コマンドラインで操作できるということはシェルスクリプト(bashスクリプト)なんかも使えます.

例えば,
指定したフォルダの中のファイルを全部変換して別のフォルダに入れさせたり,
自動で変換するようにしたり,
解像度を変更したり,
エンコードでカット編集したり,
動画から音声データだけ取り出したり,
逆に音声データだけ除去したり,
変換が何%終わっているのか表示できるようにしたり,
マルチスレッドで処理できるようにしたり,
GPUを使えるようにしたり,
CPU使用率の上限値を制限したり...
インターネット上にたくさん情報はありますので,気になったら調べてみてください.

それでは.