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