iPhone8音楽を取り込もうと思ったらflacに対応してなかったから自分で変換する

古い`walkman F880`シリーズ端末のデータを手持ちの`iPhone8`に取り込もうとしたらうまく行かなかった件。
ネイティブで`flac`には対応していないのかな？
ということでとりあえず`aac`に変換してみる。

# `FFmpeg`をダウンロード
[FFmpegダウンロードページ](https://ffmpeg.zeranoe.com/builds/) 
今回ダウンロードしたバージョンは`ffmpeg-20200628-4cfcfb3-win64-static.zip`。
使うファイルは`ffmpeg.exe`と`ffprobe.exe`。

# `qaac`をダウンロード
[qaacダウンロードページ](https://sites.google.com/site/qaacpage/cabinet)
今回ダウンロードしたバージョンは`qaac_2.69.zip`
使うファイルは`qaac64.exe`。
`qaac`を使うためには他にも必要なファイルがあるので[こちら](https://ch.nicovideo.jp/tall/blomaga/ar1856570)のサイトを参考に揃えてください。
ちなみに僕の環境では`icudt55.dll`ではなく`icudt62.dll`となっていますので臨機応変に。
[【AviUtl】Win10・拡張 x264 出力(GUI) Exでのqaac設定について](https://ch.nicovideo.jp/tall/blomaga/ar1856570)

# `FFprobe`を使ってメタデータを抽出する

```bash:
> ffprobe 入力ファイル.flac
```

こんな感じで出力されるので欲しいデータを取っておく。
<details><summary>実行ログ</summary><div>

```bash
D:\ffmpeg>ffprobe "D:\Users\XXX\Music\シド\SID ALL SINGLES BEST\DISC1\09 モノクロのキス.flac"
ffprobe version git-2020-06-28-4cfcfb3 Copyright (c) 2007-2020 the FFmpeg developers
  built with gcc 9.3.1 (GCC) 20200621
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 55.100 / 56. 55.100
  libavcodec     58. 93.100 / 58. 93.100
  libavformat    58. 47.100 / 58. 47.100
  libavdevice    58. 11.100 / 58. 11.100
  libavfilter     7. 86.100 /  7. 86.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Input #0, flac, from 'D:\Users\XXX\Music\シド\SID ALL SINGLES BEST\DISC1\09 モノクロのキス.flac':
  Metadata:
    Title           : モノクロのキス
    Album           : SID ALL SINGLES BEST
    Artist          : シド
    disc            : 1/2
    DATE            : 2016
    ORGANIZATION    : KRE
    track           : 9/14
  Duration: 00:04:00.08, start: 0.000000, bitrate: 1048 kb/s
    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    Stream #0:1: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 500x500 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn, 90k tbc (attached pic)
    Metadata:
      comment         : Cover (front)
```
</div></details>
`ffprobe `についてはファイルパスを指定してもいいし、環境変数に設定してもいい。

# `FFmpeg`を使ってアートワークを取り出す
コマンドはこちら。

```bash:
> ffmpeg -i 入力ファイル.flac 出力ファイル.jpg
```
`取り出す`というより`画像に変換する`イメージ。
`ffmpeg `についてはファイルパスを指定してもいいし、環境変数に設定してもいい。

# `FFmpeg`を使って`flac`を`wav`に変換する
コマンドはこちら。

```bash:
> ffmpeg -i 入力ファイル.flac 出力ファイル.wav
```
`ffmpeg`についてはファイルパスを指定してもいいし、環境変数に設定してもいい。

# `qaac`を使って`wav`を`aac`に変換する
コマンドはこちら。

```bash
> qaac64 入力ファイル.wav -o 出力ファイル.m4a
```

変換と同時に楽曲情報も設定したかったので追加でパラメータを指定。
今回指定したパラメータは`ビットレート` `タイトル` `アーティスト` `アルバム` `リリース年` `ディスク番号` `トラック番号` `アートワーク`。
`ffprobe`で抽出したメタデータを設定する。

```bash
> qaac64 入力ファイル.wav
  -o 出力ファイル.m4a
  -c 0
  --title 楽曲のタイトル
  --artist アーティスト名
  --album アルバム名
  --date リリース年
  --disk ディスク番号（2枚組とかじゃなきゃ不要）
  --track トラック番号（曲順）
  --artwork アートワーク（サムネの画像のパス）
```

# なんかうまく行かないぞ？
`"入力ファイル.wav"`や`--title "楽曲のタイトル"`のように各パラメータをダブルクオーテーションで囲ってやるといいかもしれない。

# 最後に
`C#`で実装したやつを投稿したい（願望）。