使用 `ffmpeg` 将专辑封面艺术添加到 FLAC 音频文件

问题描述

我从刚购买的音频 CD 中翻录了文件。我在我的 Macbook Pro 上使用 Music 应用程序进行了翻录,Catalina 10.15.6 - 输出格式为 .wav,因为没有 FLAC 选项。我的计划是使用 ffmpeg 更改格式:

% ffmpeg -v
ffmpeg version 4.4 copyright (c) 2000-2021 the FFmpeg developers

除了“专辑封面插图”之外,在下面的简短 .wav-to-.flac 脚本中实现的 bash 转换似乎按预期工作:

#!/bin/bash
for file in *.wav
do
echo $file 
ffmpeg -loglevel quiet -i "$file" -ar 48000 -c:a flac -disposition:v AnotherLand.png -vsync 0 -c:v png "${file/%.wav/.flac}"
done

一个与此非常相似的脚本前段时间在一系列 FLAC-to-FLAC 转换中起作用,我必须执行这些转换以减少位深度。但是,在这种情况下,原始 FLAC 文件已经嵌入了艺术作品。由于此脚本生成了可用的音频文件,因此我决定尝试使用第二个 ffmpeg 命令添加插图。

我做了一些研究,结果告诉我在添加相册时 ffmpeg (1,2,3,4) 存在问题艺术品到 FLAC文件

我已经尝试了以上参考文献中给出的几个命令,但仍然没有找到将专辑插图添加到我的 FLAC 文件方法。下面的命令是一个 highly upvoted answer,我觉得它可以工作,但没有:

% ffmpeg -i "01 Grave Walker.flac" -i ./AnotherLand.png -map 0:0 -map 1:0 -codec copy -id3v2_version 3 -Metadata:s:v title="Album cover" -Metadata:s:v comment="Cover (front)" output.flac

...


Input #0,flac,from '01 Grave Walker.flac':
  Metadata:
    encoder         : Lavf58.76.100
  Duration: 00:06:59.93,start: 0.000000,bitrate: 746 kb/s
  Stream #0:0: Audio: flac,48000 Hz,stereo,s16
Input #1,png_pipe,from './AnotherLand.png':
  Duration: N/A,bitrate: N/A
  Stream #1:0: Video: png,rgba(pc),522x522,25 fps,25 tbr,25 tbn,25 tbc
File 'output.flac' already exists. Overwrite? [y/N] y
[flac @ 0x7fb4d701e800] Video stream #1 is not an attached picture. Ignoring
Output #0,to 'output.flac':
  Metadata:
    encoder         : Lavf58.76.100
  Stream #0:0: Audio: flac,s16
  Stream #0:1: Video: png,q=2-31,25 tbc
    Metadata:
      title           : Album cover
      comment         : Cover (front)
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (copy)

...

我不明白错误信息:Video stream #1 is not an attached picture.似乎暗示艺术品被“附加”(嵌入 ???)在输入文件,但正如我指定的艺术品是一个单独的文件,这对我来说没有意义。

感谢任何启发。

解决方法

添加-disposition:v attached_pic

ffmpeg -i audio.flac -i image.png -map 0:a -map 1 -codec copy -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (front)" -disposition:v attached_pic output.flac