音声や動画の処理といえば、ffmpegっていうオープンソースツールは外せないよね。前から使ってはいたんだけど、メモもバラバラだったし、たまにしか使わないから記事にしようとは思ってなかったんだ。でも、今回は溜まってたメモをまとめてみようと思うよ(記録してなかったのも多いから、自分で補足しながらね)。
動画のフォーマット変換
| |
動画を音声に変換
| |
-vn:出力ファイルで動画の記録を無効にするっていう意味。
動画の再エンコード
たまに動画のエンコード形式が壊れてて、一部のデバイスで再生するとカクつくことがあるんだ。そういう時は再エンコードが必要になるよ。
| |
これで、動画を x264、音声を aac で再エンコードできる。
音なしの webm 動画に変換
| |
各パラメータの意味はこんな感じ:
-an:音を消すための重要なパラメータ。-c:v libvpx-vp9:動画エンコード形式を指定(vp9 は汎用性が高い形式。爆速で変換したいならlibvpxを使ってもいいよ)。-crf 30:画質をコントロールする。普通は 0-63 の間で、数字が小さいほど高画質でファイルが大きくなるよ。-b:v 0:vp9 エンコードの時は、普通ビットレートを 0 にして-crfパラメータに画質を任せるんだ。
GIF に変換
-loop 0 パラメータを使うとループ再生になるよ。
| |
もし背景を透明にしたいなら、2つのパターンがあるんだ。
1つ目は、元の動画にすでに透過チャネル(ProRes 4444.mov とか)がある場合。そのまま変換するとノイズが出ることがあるから、パレット(Palette)フィルタを使って透明色が正しくマッピングされるようにするのが一般的だよ。
| |
パラメータの詳細はこれ:
fps=15:フレームレートの設定。書かなければ元の動画と同じになる。split[s0][s1]:動画を2系統に分ける。ここではs0をパレット作成に、s1を画像出力に使うんだ。[s0]palettegen[p]:s0ストリームから専用の 256 色パレットを作ってpと命名。デフォルトでパレット生成時に透明色は自動で維持されるよ。[s1][p]paletteuse:作ったパレットpを動画ストリームs1に適用する。
2つ目は、元の動画が単色背景の場合。colorkey フィルタを使って背景を抜くことができるよ。
| |
colorkey=0x00FF00:0.1:0.1 の具体的な意味は:
0x00FF00:抜きたい色。これは純粋な緑。黒なら0x000000だね。- 最初の
0.1:近似度(Similarity)。0.01-1.0 で、一致度を完全一致から広範囲まで設定できる。だいたい 0.1-0.3 くらいに設定するのが一般的。 - 2番目の
0.1:混合度(Blend)。境界線をなめらかにするために使うよ。
動画と音声を合成
まずは音声エンコードの互換性があるか確認しよう(AAC とか)。
| |
互換性があるなら、そのままコピーして合成すればOK。
| |
もし音声に互換性がないなら、音声形式を変換する必要があるよ。
| |
画像フォーマット
ffmpeg は画像のフォーマット変換にも使えるんだ。一番簡単なのはこれ。
| |
ちょっと形式を変えたい時にすごく便利だよ。