taglib(-ruby) 无法读取特定文件

Posted

技术标签:

【中文标题】taglib(-ruby) 无法读取特定文件【英文标题】:taglib(-ruby) can't read specific files 【发布时间】:2013-06-03 13:41:22 【问题描述】:

我正在实现一个 ruby​​ on rails 应用程序,它从 Dropbox 文件夹下载歌曲,然后对它们执行一些操作,例如提取一些元标记。现在,我正在使用属于同一专辑的 10 个 mp3,因此它们具有相同的编码等。但是,当尝试使用 taglib-ruby 读取元标记时,10 个文件中有 3 个会抛出错误,说:

TagLib: FileRef::tag() - Called without a valid file.
TagLib: FileRef::audioProperties() - Called without a valid file.

我使用here on the left提供的代码作为指导,导致:

  def read_metatags
    TagLib::FileRef.open(self.local_path) do |fileref|
      unless fileref.null?
        logger.info "Reading tags"
        tag = fileref.tag
        self.title = tag.title
        self.artist = tag.artist

        properties = fileref.audio_properties
        self.length = properties.length
      end
    end
    self.save!
  end

首先我认为下载的文件可能已损坏,但检查 nautilus 中的元数据显示结果正常,并且节奏盒也可以播放。 我想使用 taglib-ruby 的基本 API 而不是特定格式的 API,因为我只需要检索艺术家和标题,但需要能够从各种格式的文件中获取它。

有没有人知道如何解决这个问题?考虑到我是该主题的新手,我可能遗漏了一些非常明显的东西。

编辑:考虑到robinst's comment,这是各个文件的ls -l 列表:

-rw-rw-r-- 1 user user 3710598 Jun  3 15:56 01 - Paradise.mp3
-rw-rw-r-- 1 user user 3731496 Jun  3 15:56 02 - Weirdo.mp3
-rw-rw-r-- 1 user user 3620319 Jun  3 15:56 03 - As It Is When It Was.mp3
-rw-rw-r-- 1 user user 3645815 Jun  3 15:56 04 - Broken Promise.mp3
-rw-rw-r-- 1 user user 3954295 Jun  3 15:56 05 - Way Of Life.mp3
-rw-rw-r-- 1 user user 4199193 Jun  3 15:57 06 - Bizarre Love Triangle.mp3
-rw-rw-r-- 1 user user 5002092 Jun  3 15:57 07 - All Day Long.mp3
-rw-rw-r-- 1 user user 3595686 Jun  3 15:57 08 - Angel Dust.mp3
-rw-rw-r-- 1 user user 4307888 Jun  3 15:57 09 - Every Little Counts.mp3
-rw-rw-r-- 1 user user 6313648 Jun  3 15:57 10 - State Of The Nation.mp3

【问题讨论】:

相关文件是否有特殊文件名?另外,请检查文件权限。 所有文件的名称都是一致的,例如01 - track title.mp3。文件名中没有特殊字符。文件权限为-rw-rw-r--,并且对所有文件都相同。 【参考方案1】:

这个问题也被问到issue 33 in taglib-ruby 并在那里回答。简而言之,文件被破坏了。

【讨论】:

以上是关于taglib(-ruby) 无法读取特定文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 TagLib 时如何读取音频 (mp3) 标签(时长和字幕)?

读取远程 mp3 文件的 ID3 标签?

有没有办法在 Ruby 中读取不同的文件类型? [关闭]

使用 TagLib 读取 MP3 等级

如何在生产环境中安装 taglib-ruby

需要 taglib-ruby 时加载错误