以下捆绑包用于下载和编码音频:
/usr/local/bin/youtube-dl --playlist-reverse -o "%(upload_date)s %(title)s.%(ext)s" --write-annotations --download-archive ".archive" --add-metadata --write-sub --sub-lang en --write-auto-sub -f "bestaudio[ext=m4a]" -i "https://www.youtube.com/channel/CHANNEL_ID"
for name in *.m4a; do
/usr/bin/ffmpeg -y -hide_banner -loglevel info -i "$name" -metadata artist="ArtistName" -metadata album="AlbumName" -acodec libmp3lame -ar 44100 -ac 1 -ab 192k "${name%.*}_192.mp3"
done
在十六进制查看器中查看生成的文件时,可以以二进制形式查看原始视频的描述,但在 Tag&Rename 3.5.5 中加载文件时,标准的“描述”ID3 标记中没有任何内容。
此外,标准的“URL”ID3 标签既不显示在 Tag&Rename 中,也不以二进制形式出现。
如何将描述和 URL 都导入到正确的位置?
使用 webm,而不是 m4a
M4A 多路复用器不包含 URL 元数据,因此您的 MP3 命令一开始就没有它。
改用 WebM。在
youtube-dl
使用-f "bestaudio[ext=webm]"
中代替-f "bestaudio[ext=m4a]"
所以现在将包含 URL 元数据。但是,这只能部分解决 URL 和评论/描述元数据问题。
ffmpeg MP3 元数据很奇怪
出于某种原因,
ffmpeg
使用用户定义的文本信息框架(TXXX) 来表示评论/描述和 URL,而不是正确的标签标识符。因此,尽管元数据在那里,但您的播放器/标记器可能会忽略它。我不知道允许您重新分配现有标签的工具,因此请考虑在softwarerecs.stackexchange.com上询问。
否则,您必须使用工具手动执行此操作,例如使用 WebM 文件中的元数据
eyeD3
对 MP3 进行编码后:ffmpeg
更新
在 eyeD3 命令行参数中,冒号应正确转义,否则将被识别为分隔符:
更新 2
如果描述文本为空
eyeD3
会引发异常,并且不会执行任何应在此步骤之后执行的任务。我查看了它的源代码 - 这种行为是设计使然,因此无法通过某些命令行开关关闭。这意味着每个操作都应该在检查相应的变量不为空后单独执行: