目录

目录

目录

  • 我正在尝试做什么
  • 我尝试过的方法
    • 第一次尝试
    • 第二次尝试
  • 问题

我正在尝试做什么

假设我有一个 FLAC 文件和一个 CUE 文件,其中包含从 FLAC 文件中提取某些部分的信息。即以下部分

  1. 曲目“My Foo 1 Foo”从 00:00 到 00:59
  2. 曲目“My Foo 2 Foo”从 01:00 到 01:59
  3. 曲目“My Foo 3 Foo”从 02:00 到 02:59
  4. 曲目“My Foo 4 Foo”从 03:00 到 03:59

我知道shnsplit可以给定一个 CUE 文件来分割一个 FLAC 文件。事实上,我尝试过使用shnsplit,但我无法得到我提到的结果。

我尝试过的方法

通过使用以下命令,我创建了一个 FLAC 文件。如果您正在寻找示例 FLAC 文件,也可以使用它来创建一个。音频包含从数字 1 到数字 1000 的计数,持续 6 分 52 秒。

$ espeak --stdout "$(seq 1 1000 | tr '\n' ' ')" > main.wav
$ ffmpeg -y -i main.wav main.flac

您可以使用以下命令显示 FLAC 文件的持续时间。

$ ffprobe -v error -show_entries stream=duration -print_format default=nk=1:nw=1 main.flac
412.812517

第一次尝试

main.cue下面的代码块包含我手动创建的文件的文件内容。

FILE "foo.flac" WAVE
  TRACK 01 AUDIO
    TITLE "My Foo 1 Foo"
    INDEX 00 00:00
    INDEX 01 00:59

  TRACK 02 AUDIO
    TITLE "My Foo 2 Foo"
    INDEX 00 01:00
    INDEX 01 01:59

  TRACK 03 AUDIO
    TITLE "My Foo 3 Foo"
    INDEX 00 02:00
    INDEX 01 02:59

  TRACK 04 AUDIO
    TITLE "My Foo 4 Foo"
    INDEX 00 03:00
    INDEX 01 03:59

下面的代码块显示了shnsplit我用来分割文件的命令。

shnsplit -O always -f main.cue -t '%n - %t' -o flac main.flac

下面的代码块显示了我用来显示当前目录中的所有 FLAC 文件及其持续时间的命令。

find -name '*.flac' ! -name 'main.flac' | sort | while read -r line
do
  echo "$line"
  ffprobe -v error -show_entries stream=duration -print_format default=nk=1:nw=1 "$line"
done
./00 - pregap.flac
59.000000
./01 - My Foo 1 Foo.flac
60.000000
./02 - My Foo 2 Foo.flac
60.000000
./03 - My Foo 3 Foo.flac
60.000000
./04 - My Foo 4 Foo.flac
173.812517

由于两个原因,这不是我想要的结果。首先,有一个名为的文件,00 - pregap.flac其持续时间为 59 秒。此文件不应该存在,因为第一首曲目(即My Foo 1 Foo)从 00:00 开始,因此没有前间隙。其次,该文件预计持续时间为 60 秒,但是,它似乎一直持续到 FLAC 文件的末尾。

第二次尝试

与第一次尝试相反,在这次尝试中我没有指定INDEX 00

main.cue下面的代码块包含我手动创建的文件的文件内容。

FILE "foo.flac" WAVE
  TRACK 01 AUDIO
    TITLE "My Foo 1 Foo"
    INDEX 01 00:00

  TRACK 02 AUDIO
    TITLE "My Foo 2 Foo"
    INDEX 01 01:00

  TRACK 03 AUDIO
    TITLE "My Foo 3 Foo"
    INDEX 01 02:00

  TRACK 04 AUDIO
    TITLE "My Foo 4 Foo"
    INDEX 01 03:00

下面的代码块显示了shnsplit我用来分割文件的命令。

shnsplit -O always -f main.cue -t '%n - %t' -o flac main.flac

下面的代码块显示了我用来显示当前目录中的所有 FLAC 文件及其持续时间的命令。

find -name '*.flac' ! -name 'main.flac' | sort | while read -r line
do
  echo "$line"
  ffprobe -v error -show_entries stream=duration -print_format default=nk=1:nw=1 "$line"
done
./01 - My Foo 1 Foo.flac
60.000000
./02 - My Foo 2 Foo.flac
60.000000
./03 - My Foo 3 Foo.flac
60.000000
./04 - My Foo 4 Foo.flac
232.812517

虽然这次尝试没有创建文件pregap.flac,但这不是我想要的结果,原因如下:该曲目My Foo 4 Foo持续时间超过 3 分钟,预期结果是它的持续时间与所有其他曲目一样为 60 秒。

问题

您能否提供一个最小的工作示例来说明如何使用shnsplit它来获得我在第一部分中提到的结果?

相关内容