---
# System prepended metadata

title: FFmpeg 基本
tags: [デジタル信号処理, FFmpeg]

---

###### 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
