入力ファイルがあります:infile.mp3このファイルにはメタデータ(アーティスト、ジャンルなど)が含まれています。出力wavファイルのすべてのメタデータを削除してみます。
はい!私はオプションを見つけました:
-map_metadata -1
しかし、出力は予想外です...
$ ffmpeg -i infile.mp3 -acodec pcm_s16le -ac 2 -ar 44100 -map_metadata -1 ./outfile.wav
OK!
$ ffprobe outfile.wav
Input #0, wav, from 'inp.wav':
Metadata:
encoder : Lavf56.25.101
Duration: 00:04:00.47, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 2 channels, s16, 1411 kb/s
分かりますか?エンコーダメタデータが存在します!
そして、「subchunk1_id」と「fmt」値の後ろのwavヘッダーで、「subchunk2_id」と「data」値を期待します(期待される例をクリア):
$ strings outfile.wav | more
RIFFFB
WAVEfmt
data
しかし、そうではありません(LIST、INFOISFTなど)。
$ strings outfile.wav | more
RIFFFB
WAVEfmt
LIST
INFOISFT
Lavf56.25.101
data
さて..出力ファイルのすべてのメタデータを本当に削除する方法は?
-fflags +bitexact -flags:v +bitexact -flags:a +bitexact
ffmpeg.org から:
It is also possible to delete metadata by using an empty value.
最初にそれを.wavファイルにコピーして(メタデータをサポートしていません)、次に.mp3にコピーして戻しますか?
```
ffmpeg -i in.mp3 tmp.wav
ffmpeg -i tmp.wav out.mp3
```