FFmpegでよく使う例、コーデックをまとめてみた（2023年版）

FFmpegは、動画形式変換、動画ダウンロードなどで大変助かります。
しかし、パラメータをたまに忘れてしまうのでここにばっと書いていきます。

> 2021/02/06 コーデック追加、項目を追加しました。
> 2023/01/19 コーデック追加、内容を一部修正しました。

# コーデックの変換
input.mp4を映像コーデックlibx264で、音声コーデックlibmp3lameでoutput.mp4に出力するとき

```
ffmpeg -i ./input.mp4 -c:v libx264 -c:a libmp3lame output.mp4
```
# 映像のビットレートを変える
映像ビットレート変更は`-b:v [ビットレート(数字の後にk,m)]`

- 600kbpsに下げるとき
 
```
ffmpeg -i ./input.mp4 -b:v 600k output.mp4
```

# 音声のサンプリングレートを変える
音声のサンプリングレート変更は`-ar [周波数(Hz単位)]`

- 44100Hzに変更するとき

```
ffmpeg -i ./input.mp4 -c:v copy -ar 44100 output.mp4
```

# 音声のビットレートを変える
音声のビットレート変更は`-b:a [ビットレート(数字の後にk,m)]`

- 128kbpsに変更するとき

```
ffmpeg -i ./input.mp4 -c:v copy -b:a 128k output.mp4
```

# ハードウェアアクセラレーションを使う
FFmpegは様々なハードウェアアクセラレーション機能を使うことができます。
対応するハードウェアがある場合は専用の回路などで高速に動画処理を行います。画質はトレードオフとなる場合があります。(最近は向上しているようです)

## Intel CPUの場合
Intel CPUの場合は、[QSV](https://ja.wikipedia.org/wiki/Intel_Quick_Sync_Video)というハードウェアアクセラレーションが使えます。
H.264はSandy Bridge以降、H.265とVP9はKaby Lake以降、AV1はTiger Lake以降の世代でQSVを使うことができます。
通常に比べてエンコード速度がそこそこ上がります。
アクセラレーション名は ```qsv```です。

## NVIDIA GeForceの場合
GeForceを装着しているパソコンなら、CUDAコアを使ったアクセラレーションが使えます。
GeForce 8シリーズ以降なら使えるので、最近のGeForceは100%使えます。
アクセラレーション名は ```cuda```です。

## Windows Vista以降の場合
CPUに関係なく、Vista以降なら[DXVA](https://ja.wikipedia.org/wiki/DirectX_Video_Acceleration)(DirectX Video Acceleration)が使えます。
アクセラレーション名は ```dxva2```です。

## macOSの場合
VideoToolboxが使えます。
H264、HEVC、ProRes(Apple Siliconのみ)で利用できます。
アクセラレーション名は `videotoolbox` です。

## Linuxの場合
ほとんどの環境で「vaapi」(Video-Acceleraion API)が利用可能です。
QSVなどと同等のパフォーマンスが得られます。
アクセラレーション名は ```vaapi```です。

# 動画を逆にする
逆再生をするのには、動画編集ソフトが必要かなと思うと思いますが、実はFFmpegでも処理できます。
-filter_complexオプションに`reverse;areverse`をつけるだけです。
input.mp4を逆にしてoutput.mp4に保存する場合です。

```
ffmpeg -i ./input.mp4 -filter_complex "reverse;areverse" output.mp4
```
これで逆再生になります。

ただし、**メモリの消費が大きい**ので、メモリ搭載量が多い環境での実行をおすすめします。
# AACなのに、サイズが小さいのに、音質を良くする方法
## ビルトイン AACエンコーダー
FFmpegには独自実装のAACエンコーダーがあります。 `aac` で利用できます。
Star.flacというファイルがあって、これをAAC 192kbpsに変換します。

普通は192kbpsは音質が多少悪くなりますが、エンコーダーの設定を変えることで品質を上げられます。

```
ffmpeg -i Star.flac -b:a 192k -aac_coder twoloop Star.m4a
```
これだけです。
「**-aac_coder twoloop**」がポイントです。デフォルトではこの設定が**fast**になっています。

## AudioToolbox AACエンコーダー (macOSのみ)
macOSにはAudioToolboxが提供するエンコーダーが搭載されています。中身はあのqAACと同じです。
`aac_at` で利用できます。

```
ffmpeg -i example.wav -c:a aac_at -b:a 128k example.m4a
```

# おまけ２
## 主な映像コーデック一覧
これらは`-c:v`オプションで指定できます。

|コーデック名|形式(拡張子)|
|:---------:|:--:|
|libx264|MPEG-4,H.264(.mp4)|
|h264|MPEG-4,H.264(.mp4)|
|h264_qsv|H.264(Intel Quick Sync Video)|
|h264_nvenc|H.264(NVIDIA CUDA)|
|h264_vaapi|H.264(vaapi)|
|h264_videotoolbox|H.264(VideoToolbox、macOSのみ)|
|hevc|H.265(.mp4)|
|hevc_qsv|H.265(Intel Quick Sync Video, Kaby Lake以降)|
|hevc_nvenc|H.265(NVIDIA CUDA)|
|hevc_videotoolbox|H.265(VideoToolbox)|
|flv1|Flashムービー(.flv)|
|mjpeg|Motion JPEG(.jpeg)|
|mjpeg_qsv|JPEG(Intel Quick Sync Video)|
|mpeg1video|MPEG-1 Video(.mpg)|
|mpeg2video|MPEG-2 Video(.m2ts、.vob)|
|mpeg2_qsv|MPEG-2 Video(Intel Quick Sync Video)|
|vp9|VP9 (.webm)|
|vp9_qsv|VP9 (Intel Quick Sync Video, Kaby Lake以降)|
|libaom-av1|AV1 (AOMedia版)|
|librav1e-av1|AV1 (rav1e版)|
|av1_qsv|AV1 (Intel Quick Sync Video, Tiger Lake以降)|
|wmv1|Windows Media Player 7向け|
|wmv2|Windows Media Player 8向け|
|wmv3|Windows Media Player 9向け|

## 主な音声コーデック一覧
これらは`-c:a`オプションで指定できます。

|コーデック名|形式|
|:---------:|:--:|
|libmp3lame|MPEG audio layer 3|
|aac|Advanced Audio Coding|
|aac_at|AAC (AudioToolbox、macOSのみ)|
|alac|Apple Lossless|
|flac|Free Lossless Audio Codec|
|mp3|MPEG audio layer 3|
|libopus|Opus (libopus)|
|pcm_s16le|PCM 16bit(WAVファイル)|
|pcm_s24le|PCM 24bit(WAVファイル)|
|vorbis|Vorbis(OGGファイル)|
|wmav1|Windows Media Audio 1(WMAファイル)|
|wmav2|Windows Media Audio 2(WMAファイル)|