広告 MP3、AAC音質関連

FFmpegを使用して音声ファイルのアートワーク含めメタデータを操作するオプションのこと

スポンサーリンク

 

FFmpegのオプションは多岐に渡り、オプションの選択は非常に難解です。そこで、ChatGPTの力を借りて、音声ファイルのアートワークやメタデータを操作するためのFFmpegのオプションを調べてみました。 ただし、ChatGPTの回答に従うとエラーを出てしまう場合があり、その場合は試行錯誤しながら最適と思われるオプションを選択しました。

音声ファイルのメタ情報について
音声データそのものとは直接関係のない情報で曲名、アーティスト名、アルバム名、ジャンル、発行年などのようなデータを言います。
音声ファイルのメタ情報は通常、ID3タグ(MP3ファイルの場合)、Vorbisコメント(OGGファイルの場合)、APEタグ(APEファイルの場合)、またはiTunesメタデータ(M4AやAACファイルの場合)などの形式で保存されます。
また、メタ情報にはアートワーク(アルバムアート)も含まれることがあります。 アートワークは、一般的にJPEGやPNGなどの一般的な画像形式で保存され、多くの音声ファイル形式(たとえばMP3、AAC、FLAC、ALACなど)では、アートワークがメタ情報の一部として埋め込まれることがあります。

 

元の音声ファイルのアートワークを継承してAAC変換するには

音声ファイル変換のコーディックは多種類あります。 ここではAAC-LCの libfdk_aac AACエンコーダを代表例として、アートワーク含めメタデータ情報を操作するオプションについて説明します。 他のエンコーダーもこの例に倣えば同様の結果が得られると思います。

-acodec libfdk_aacエンコーダーで、-c:v copy オプションを使うと、アートワーク含めメタデータ情報が引き継がれたAAC変換ファイルが "変換後のファイル名.m4a" に保存されます。

アートワークを継承してAAC変換

 libfdk_aacのCLI
ffmpeg -i "変換元ファイル.wav" -acodec libfdk_aac -c:v copy -ar 48000 -ab 320k -cutoff 20000 "変換後のファイル名.m4a"

 

備 考

以前紹介した記事では、ビデオを除外するため赤字の  -vn オプションを付けていました。 この場合、アートワーク以外のメタデータ情報のみが引き継がれます。 

 libfdk_aacのCLI
ffmpeg -i "変換元ファイル.wav" -acodec libfdk_aac -vn -ar 48000 -ab 320k -cutoff 20000 "変換後のファイル名.m4a"

以前の記事(ここをクリック)で、アートワークを引継ぐため、AACファイルに変換した後に、AtomicParsley CLI を使ってアートワークを付加していました。 -vn の代わりに、-c:v copy オプションにすれば、AtomicParsley を使う必要は無いと考えられます。 

 

音声ファイルにアートワークや他のメタデータを付加するには

元の音声ファイルにアートワークが無い場合、下の -i に続く artwork画像.jpg を指定し 赤字オプションと 緑字のメタ情報オプションを記述しすると、黄文字の音声ファイルにアートワークとメタ情報が付加された "音声ファイル+メタ情報.m4a" に保存されます。

 libfdk_aacのCLI
ffmpeg -i "音声ファイル.m4a" -i "artwork画像.jpg" -map 0:a -map 1:v -c copy -disposition:1 attached_pic -id3v2_version 3  -metadata title="Title_data" -metadata artist="Artist_data" -metadata album="Album_data"  "音声ファイル+メタ情報.m4a"
オプションの意味
-map 0 -map 1: 入力ファイルとアートワーク画像の両方をマッピングします。
-c copy: 音声ストリームを再エンコードせずにそのままコピーします。 
-id3v2_version 3:出力されるID3タグのバージョンを指定します。ID3v2.3は、アートワークを含めるのに適したバージョンです。 なお、このオプションを付けなくても特段問題ありませんでした。
-disposition:1 attached_pic:ビデオファイルのストリームに関連付けられた画像(アートワーク)を指定します。 具体的には、-disposition:1はビデオストリーム(1番目のストリーム)の属性を設定し、attached_picはその属性の一部として、ビデオストリームにアートワークが関連付けられていることを示します。
ーーーー
-metadata title="Title" -metadata artist="Artist" -metadata album="Album": 出力ファイルにタイトル、アーティスト、アルバム名を追加します。これにより、メタデータが埋め込まれます。

 

備 考

音声ファイルにアートワークや他のメタデータを付加する手段として、Tag Editor Liteアプリ があります。 このアプリを使えば簡単にメタ情報の編集ができます。

 

注意ポイント

ffprobeで「アートワーク画像が付いたm4aファイル」を確認すると[mov,mp4,m4a,3gp,3g2,mj2 @ 0x13ee04ca0] stream 0, timescale not setと警告が表示されます。 (MP3ファイルの場合はこの警告はでません。)

ChatGPTの回答
"stream 0, timescale not set"というエラーメッセージは、メディアコンテナ内の動画ストリームのタイムスケールが設定されていないことを示しています。ただし、m4aファイルは通常、音声データを格納するためのファイル形式であり、動画ストリームは含まれていません。そのため、このエラーメッセージは無視しても構いません。

アートワーク画像が含まれたm4aファイルには、通常、音声ストリームとアートワーク画像のメタデータが含まれています。このエラーメッセージは、ffprobeが内部的に動画ファイルとして扱っているために発生する可能性があります。しかし、m4aファイルの場合、動画ストリームは存在しないため、タイムスケールが設定されていないという警告が表示されます。

したがって、このエラーメッセージはファイルの問題ではなく、ffprobeの動作上の仕様です。アートワーク画像が含まれたm4aファイルのメタデータやストリーム情報は正しく表示されるはずです。

以上から、このアートワーク画像が付いたm4aファイルの警告は、ffprobe特有の問題で、実害は無い様です。

 

音声ファイルのアートワークを取得するには

FFmpegは本来的に、音声ファイルのアートワーク取得できない様ですが、元の音声ファイルにアートワークが存在している場合、下の赤字オプションと黄字アートワーク用画像ファイルを指定すると、音声ファイルのアートワークが "artwork画像ファイル.jpg" に保存されます。

 アートワーク画像を取得するCLI
ffmpeg -i "音声ファイル.wav" -an -c:v copy -update 1 "artwork画像ファイル.jpg"
このコマンドは、music.m4aという音声ファイルから音声を除外し (-an)、ビデオストリームをそのままコピーする (-c:v copy) という意味です。
-update 1 オプションは、artwork画像.jpgという名前の画像ファイルに動的に更新される画像を保存するよう指示しています。 -update 1 オプションを付けないとステータスにframes:v 1 を要求される(警告)

 

 

以上、音声ファイルのアートワーク含めメタデータ情報を操作するオプションでした。 音声ファイルをFFmpegでエンコードするときの参考にして頂ければと思います。

 

スポンサーリンク

 

スポンサーリンク

 

t