AppleLossless(ALAC)をFLACに変換する

 いろいろ話題になった星野源さんの「うちで踊ろう」の音源が公式から無料ダウンロードできるようになりました。
星野源 「うちで踊ろう」

 以下の注意書きがあるように、Apple Losslessでの提供のみとなっています。

  • 本コンテンツは個人で楽しむためのものです。
  • 音源データの形式はApple Lossless(ALAC)になります。
  • ダウンロードおよび再生方法に関しては、お使いのPCまたはスマートフォンの環境(アプリケーション)に応じて、ご自身でご確認の上ご利用ください。なお、お使いの環境によりダウンロード・再生できない場合があります。
  • ダウンロードに伴うインターネットの接続に必要となる通信料はお客様のご負担となります。

 MP3等の圧縮音源ではないのは嬉しいのですが、Apple Losslessに対応していないソフトウェアやポータブルプレイヤーを使っていたり、Apple Losslessで楽曲管理していない音楽ファンにとっては不便かもしれません。
 Apple Losslesと同様に、可逆圧縮でありつつもオープンなFLAC(Free Lossless Audio Codec)に変換して個人で楽しみたい場合は、以下のようにすれば変換可能です。
※念のためですが、変換したファイルをインターネットに公開したり、他人に配布したりする行為は著作権法に抵触しますのでご注意ください。
 

ffmpegで変換する

 ffmpegを使えばコマンド一発で変換できます。ffmpegOSSですので、WindowsMacなど使用環境に合わせたバイナリをダウンロードして予め実行できるようにしてください。
Download FFmpeg

 以下、「うちで踊ろう」を例にコマンド例を記載していますが、もちろん他の楽曲ファイルでもファイル名が異なる以外は同様です。
 

最も簡単な変換

 まずは単純に以下のように入力ファイルと出力ファイルを指定するだけでも変換できます。

ffmpeg -i genhoshino_dancing_on_the_inside_jp.m4a genhoshino_dancing_on_the_inside_jp.flac

 この場合の入出力ファイルを比較すると以下のようになりました。

I/O FILENAME SIZE[byte]
Input genhoshino_dancing_on_the_inside_jp.m4a 7,314,849
Output genhoshino_dancing_on_the_inside_jp.flac 7,818,496

 FLACの方が約7%ほど大きくなっています。
 

FLACの最高圧縮率を指定した変換

 真面目にオプション指定してみましょう。

ffmpeg -i genhoshino_dancing_on_the_inside_jp.m4a -c:a flac -compression_level 12 genhoshino_dancing_on_the_inside_jp.flac

 「オーディオのエンコードにはFLACを使う」「圧縮レベルは12」。この2点を明示的に指定しているのが先の例との違いです。FLACでは圧縮レベル12が最高の圧縮率(エンコード所要時間は最も遅い)を指定したことになります。これで出力されたファイルサイズは以下のようになりました。

FILENAME SIZE[byte]
genhoshino_dancing_on_the_inside_jp.flac 7,552,430

 まだFLACの方が大きいですが、ALACとの差は約3%まで小さくできました。
 

ジャケット画像を切り捨てて変換

 これまでに紹介したコマンド例では、ジャケット画像も維持されています。
 ジャケット画像は無くてもいいからファイルサイズを小さくしたいという場合には、以下のようにコマンドを叩いてください。

ffmpeg -i genhoshino_dancing_on_the_inside_jp.m4a -vn -c:a flac -compression_level 12 genhoshino_dancing_on_the_inside_jp.flac

 先の例との違いは「映像無し」を指定しているだけです。これで出力ファイルサイズは以下のようになりました。

FILENAME SIZE[byte]
genhoshino_dancing_on_the_inside_jp.flac 5,566,874

 先の例より約2MB程度も小さくなり、元ファイルより約31%も小さいファイルにすることが出来ました。
 

ジャケット画像の解像度を小さくして変換

 ジャケット画像が無くなってしまうのは嫌だけどファイルサイズはできるだけ小さくしたいという場合は、ジャケット画像の解像度を落としましょう。
 「うちで踊ろう」の場合、ジャケット画像はmjpeg形式で解像度1400x1400で記録されています。これは、これまでに紹介したコマンド例で、標準出力に以下のような内容が含まれていることから確認できます。

    Stream #0:1: Video: mjpeg (Baseline), yuvj444p(pc, bt470bg/unknown/unknown), 1400x1400 [SAR 100:100 DAR 1:1], 90k tbr, 90k tbn, 90k tbc (attached pic)

 FLACのジャケット画像にはPNGを使うこともできますが、MotionJPEGをPNGに変換してもデータ量は大きくなってしまいますから、ここでは解像度だけを下げることにします。

ffmpeg -i genhoshino_dancing_on_the_inside_jp.m4a -c:v mjpeg -s 720x720 -c:a flac -compression_level 12 genhoshino_dancing_on_the_inside_jp.flac

 先の例との違いは「映像無し」の代わりに、「映像のエンコードにはMotionJPEGを使う」「解像度を720x720にする」と指定しています。この場合の出力ファイルサイズは以下のようになりました。

FILENAME SIZE[byte]
genhoshino_dancing_on_the_inside_jp.flac 5,665,732

 ジャケット無しの場合より約100KB程度増えていますが、元ファイルより約23%小さいファイルにすることができています。
 なお、解像度指定は720x720に限らずお好みで指定できます。元の1400x1400のままでは、多くのスマートフォンやポータブルプレイヤーでは過剰な解像度と言えるでしょう。例えば、再生に使うスマートフォンの画面解像度が720x1280であれば、ジャケット画像に720x720を超える解像度があっても縮小表示されるだけですので無意味です。同様に、1080x1920なら1080x1080を指定すれば画面表示に最適な解像度を維持したままファイルサイズを小さくすることができます。ジャケット画像が全く無いのは嫌だが画質はどうでもいいような場合には320x320程度まで落としてもいいかもしれません。
 



以上。