###### tags: `デジタル信号処理` `FFmpeg`
FFmpeg 基本
===
# 基本
## 入出力
入力や出力を指定する時に、パスの代わりに`pipe:(パイプ識別子)`とするとファイルと読み書きする代わりに*パイプ*に入出力できる
パイプ識別子: `0`は標準入力、`1`は標準出力、`2`はエラー出力、`-`と書くか何も書かなかったら自動判定
例: 自動判定で受け取り、標準出力へ出す
`ffmpeg -i pipe: pipe:1`
## コーデック
`-c`
: コーデックを指定する
: これだけだとすべてのコーデックを一括指定する
: コーデックとして`copy`を指定すると、再エンコードをせずロスレスかつ高速に出力してくれる(素通しエンコとも言われる)
: このオプションだと映像と音声両方を同時に指定するため、指定する値は`copy`が多い
`-c:v`
: 映像のコーデックを指定する
`-c:a`
: 音声のコーデックを指定する
`ffmpeg -codecs`
: 使用可能なコーデックの一覧を表示する
: コーデックを指定する時の参考になる
`ffmpeg -h encoder=<コーデック名>`
: 使えるエンコードオプションとその説明を得られる
`ffmpeg -formats`
: 使用可能なフォーマットの一覧を表示する
### x264
```
ffmpeg -i input.mkv -vcodec libx264 -crf 20 -preset fastdecode -x264opts ref=6:keyint=600 output.mp4
```
コーデックの名前は`libx264`
使える基本的なオプションは`ffmpeg -h encoder=libx264`で確認できる
しかしx264の一部のオプションのみ指定できる
`-x264opts`ですべてのx264のオプションを直接使える
ただし始めのハイフンは抜き、オプション名と値は`=`で繋げ、オプションとオプションは`:`で繋げる
`-x264opts <オプション名=数字:オプション名>`
`-x264opts ref=6:bframes=6:keyint=600:min-keyint=60`
# フィルター
`-filter`で指定する
複数のフィルターはカンマ`,`で区切り、フィルターへの引数はコロン`:`で区切る
: `hogefilter=1:2,fugafilter=1:2`
## 映像
`-s 横x縦`
: 映像のリサイズを行う
: 画素数(解像度と呼ばれることが多い)を指定する
: 横のピクセル数を書き、アルファベットの`x`を挟んで、縦のピクセル数を書く
: キーワードを指定することもできる、[キーワードとそれが示す画素数の一覧]()
`-sws_flags`
: リサイズを行う際の、オプションを指定できる
: 複数のオプションは`+`を使って表す 例:`-sws_flags accurate_rnd+bicubic`
`-g`
: キーフレームの間隔
: `-g 1` はすべてキーフレーム
`-pix_fmt`
: ピクセルフォーマット(クロマサブサンプリング)を指定する
: `yuv420p` `nv12` など
: 使える値は `-pix_fmts` で一覧できる
### vfフィルター
`-vf <映像フィルタの識別子>=<指定する値>,<2つ目の映像フィルタの識別子>=<指定する値>` って指定するフィルター
`-filter:v`か`-vf`で映像へフィルターを指定する
`-filter:1:v`で2つ目の入力ファイルの映像に対する指定となる
`scale=<横>:<縦>`
: リサイズを行う
: 片方の値を`-1`にすると自動的にアスペクト比を維持する値にしてくれる
: `-2`にするとさらに奇数にである場合に偶数に繰り上げてくれる
: `flags=<値>`でsws_flagを指定できる(`-filter:v scale=1280:-2:flags=lanczos:accurate_rnd`)
`subtitles=<ファイル名.srt>`
: srtファイルから字幕を焼き込む
: ファイル名に空白が含まれてたらどうするか不明
## 音声
### afフィルター
`-af <音声フィルタの識別子>=<指定する値>,<2つ目の音声フィルタの識別子>=<指定する値>` ってやって指定するフィルター
`volume=<倍率>`
: 音量を変える、倍率かデシベルを指定する
: `1`でそのまま、`2`で2倍、`0.5`で半分
: `+1db`で1db大きくする、`-2db`で2db小さくする
## 資料
1. https://nyanshiba.hatenablog.com/entry/2018/02/03/071256
2. https://nico-lab.net/scale_with_ffmpeg/
3. https://ffmpeg.org/ffmpeg-filters.html#scale-1
4. https://ffmpeg.org/ffmpeg-scaler.html