命令行工具用于写入 flac、ogg vorbis 和 mp3 id3v2 元数据?

命令行工具用于写入 flac、ogg vorbis 和 mp3 id3v2 元数据?

是否有任何命令行工具可以写入所有三种格式/容器?我已经搜索过了,但找不到任何可以完成这项工作的东西。

到目前为止,我正在使用 vorbiscomment、metaflac 和 id3tool,如果可能的话,我真的很想用一个工具来取代它们。

如果没有工具可以写入所有这些,是否至少有建议用可以写入 id3v2 (v2.4) 标签的工具来替换 id3tool?

我不是在寻找一个标记者但对于一个允许我通过脚本将元数据写入不同音频文件的工具来说,我目前的状态是,我有一个使用这三个工具(vorbiscomment、metaflac 和 id3tool)的脚本,但后来我意识到 id3tool 无法写入 id3v2 标签...我正在从 wav master 自动创建这 3 种音频格式,并且需要能够自动将元数据写入这些文件。

答案1

令人惊讶的是,一个月后我找到了一个很好的解决方案:FFmpeg。

ffmpeg -i out.mp3 -metadata title="The Title You Want" -metadata artist="" -metadata album="Name of the Album" -c:a copy out2.mp3

完整文章请见此处:如何:使用 ffmpeg 创建/写入 ID3 标签

它甚至可以处理 UTF8 数据和外来字符。

答案2

libsndfile将会完成所有的事情ffmpeg并且更加优雅。

例如,当你运行 时$ sndfile-metadata-set --help,你可以看到用法:

  sndfile-metadata-set [options] <file>
  sndfile-metadata-set [options] <input file> <output file>

Where an option is made up of a pair of a field to set (one of
the 'bext' or metadata fields below) and a string. Fields are
as follows :

    --bext-description       Set the 'bext' description.
    --bext-originator        Set the 'bext' originator.
    --bext-orig-ref          Set the 'bext' originator reference.
    --bext-umid              Set the 'bext' UMID.
    --bext-orig-date         Set the 'bext' origination date.
    --bext-orig-time         Set the 'bext' origination time.
    --bext-coding-hist       Set the 'bext' coding history.
    --bext-time-raf          Set the 'bext' Time ref.

    --str-comment            Set the metadata comment.
    --str-title              Set the metadata title.
    --str-copyright          Set the metadata copyright.
    --str-artist             Set the metadata artist.
    --str-date               Set the metadata date.
    --str-album              Set the metadata album.
    --str-license            Set the metadata license.

There are also the following arguments which do not take a
parameter :

    --bext-auto-time-date    Set the 'bext' time and date to current time/date.
    --bext-auto-time         Set the 'bext' time to current time.
    --bext-auto-date         Set the 'bext' date to current date.
    --str-auto-date          Set the metadata date to current date.

上述大多数操作都可以在现有文件上就地完成。如果任何操作无法执行,应用程序将退出并显示相应的错误消息。

使用 libsndfile-1.0.25。

答案3

这对我有用:

http://id3v2.sourceforge.net/

如果相关的话,它可以在 Debian 仓库中使用。

-- 等一下,这是“标记器”的示例吗?这不是您要找的吗?那么,恐怕我不太明白您的问题。

答案4

标记工具是一个用于读取/写入音频标签的轻量级 CLI 工具

Backends:
   libvorbis: Ogg/Vorbis files format
      TagLib: various file format but limited set of tags

在 Bash 脚本中使用示例:

#! /usr/bin/env bash
# tagutil demo: fix title
# license: public domain, no warranty

set -e

# check dependencies
for dep in tagutil jq
do
  command -v $dep || { echo please install $dep; exit 1; }
done

dryrun=false
if [[ "$1" == "-n" ]]
then
  dryrun=true
  shift
fi

for file in "$@"
do

  echo "file: $file"

  # read title
  title=$(tagutil -F json print "$file" | jq -r ".[0].title")
  title1="$title" # copy
  echo "title 1: $title"

  # fix title
  title=$(echo $title) # collapse multiple whitespaces
  title=$(echo "$title" | sed 's/ (original version)$//i') # remove suffix
  title=$(echo "$title" | sed 's/ (album version)$//i') # remove suffix
  title=$(echo "$title" | sed 's/ (official video)$//i') # remove suffix

  if [[ "$title1" == "$title" ]]
  then
    echo no change
    continue
  fi

  echo "title 2: $title"

  drycmd=()
  $dryrun && drycmd=(printf "%q ")

  # make backup
  #[ -e "$file.bak" ] || cp -v "$file" "$file.bak"

  # write title
  ${drycmd[@]} tagutil set:title="$title" "$file"

done

相关内容