如何从OGG文件中剥离初始偏移?

时间:2012-05-01 00:10:17

标签: ogg oggvorbis

=== BACKGROUND ===

前段时间我从互联网广播电台扯了很多音乐。不幸的是,似乎出现了一些问题,因为大多数文件的长度显示为几个小时,但它们开始在正确的位置播放。

示例:如果文件真的是3分钟,并且显示为3小时,则播放将从2小时57分钟开始。

在我升级系统之前,gstreamer是旧版本,其行为如上所述,所以我没有太多关注。现在我有一个新版本的gstreamer无法正确处理这些文件:它"播放"整个初始偏移。

=== / BACKGROUND ===

所以这是我的问题:如何修改OGG / Vorbis文件以摆脱无用的初始偏移?虽然我尝试了几个标记编辑程序,但它们都不允许我编辑这些值。 (有趣的是,easytag会显示我两次,但写错了......)

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案!虽然这不是我所期待的......

在尝试了其他几个选项后,我最终得到了以下代码:

#!/bin/sh

cd "${1}"

OUTDIR="../`basename "${1}"`.new"

IFS="
"
find . -wholename '*.ogg' | while read filepath;
do
    # Create destination directory
    mkdir -p "${OUTDIR}/`dirname "${filepath}"`"

    # Convert OGG to OGG
    avconv -i "${filepath}" -f ogg -acodec libvorbis -vn "${OUTDIR}/${filepath}"

    # Copy tags
    vorbiscomment -el "${filepath}" | vorbiscomment -ew "${OUTDIR}/${filepath}"
done

此代码以递归方式重新编码所有OGG文件,然后复制所有vorbis注释。这不是一个非常有效的解决方案,但它仍然有用......

问题是什么:我猜这与ogginfo的输出有关:

  

...
  新逻辑流(#1,序列号:74a4ca90):键入vorbis
  警告:Vorbis流1没有正确框架的标头。终端标题页包含其他数据包或具有非零granulepos
      针对流1解析Vorbis标头,信息如下......   版本:0
  供应商:Xiph.Org libVorbis I 20101101(Schaufenugget)
  ...

重新编码文件后消失...

按照我目前正在编码的速度,可能需要几个小时,直到我的整个媒体库完全重新编码...但至少我验证了几个样本它是否正常工作:)