使用 mpg123 的命令行音频 - 如何保存音频中的位置并下次从该位置开始?

使用 mpg123 的命令行音频 - 如何保存音频中的位置并下次从该位置开始?

我正在考虑使用 mpg123 作为有声读物播放器。我找不到任何其他好的 Linux 有声读物播放器,我认为 mpg123 可能是我最好的选择。

我的有声读物按目录组织,并且曲目名称已编号(例如,Track-01.mp3、Track-02.mp3 等)。

我正在寻找一种方法,当我停止收听时保存最后播放的位置(曲目和曲目内的位置),然后能够在下次收听时在有声读物中的该位置启动 mpg123。

最好将此“最后位置”信息保存在目录中的文本文件中。这样我就可以使用存储在有声读物目录中的文本文件在最后一个位置启动每本有声读物。

类似的书签功能也很好。看起来,这几乎是相同的实现。 “最后位置”信息可以保存在名为“last”的文本文件中,并且每个书签可以保存在名为bookmark.N(其中N简单地递增)的文本文件中。

是否可以实现一个简单的实现,也许是一个简单的 bash 脚本?我不是开发人员。

答案1

您可以利用mplayer的屏幕输出来生成包含时间的输出文件(它们的输出速度约为每秒 10 次)。阻止大的输出文件,此脚本在 2 个日志文件之间切换,后缀为 0 或 1。它们交替删除或写入。除非发生崩溃,否则在 mplaye 停止播放该特定音频后应该只留下一份日志。

然后,剩余的日志由片段处理sed,将其减少为最后一个时间戳(采用十进制秒格式),并将其写入文件,加后缀.last(并删除日志)。

这是脚本

file=~/test.mp3
mplayer "$file" 2>&1 |tee <( 
  awk -v"RS=\r" -v"recs=500" -v"file=$file" '
  { prev = extn
    para = int(NR/recs)
    extn = para%2
    print $2 > file"."extn
    if( prev!=extn ) {close(file"."prev)
        system("rm -f " "\""file"."prev"\"") }}')

# On exiting mplayer, create the  `.last` file           
sed -n '/^[.0-9]\+/p' "$file".[01] |
sed -n '$p' > "$file".last
rm -f "$file".[01]

开始mplayer最后的指示位置,运行以下命令。

mplayer -ss $(cat "$file".last) "$file"

答案2

Thomas Orgis,一名 mpg123 开发者和维护者,刚刚应我的要求在 mpg123 中实现了此功能(作为一个名为“conplay”的脚本)。

他的描述是:

这个小包装器在给定目录上运行 mpg123(在当前目录中输入“.”),在终端控制模式下播放其中的所有 *.mp[123] 文件。额外的技巧是,使用您离开播放的位置(通过“q”键)读取和更新(创建)播放列表文件(conplay.m3u),以在下次调用时返回。

该名称代表“继续播放”。你觉得呢?;-)

我认为这太棒了!它完全符合我在上面的问题中所要求的。我已经使用了一整天,效果完美。我高兴极了!

你可以从http://mpg123.org/snapshot

谢谢托马斯!

答案3

虽然我发现 @Peter.O 的 mplayer 输出解析器非常性感,但我可以建议你尝试一下MPD,音乐播放器守护进程?它是一个非常强大的音乐播放器和播放列表后端(没有内置前端);它会默认记住上次播放状态(音量、轨道,轨道位置,如果曲目正在播放/暂停等),因此一旦守护进程启动(大概是在引导期间),播放就会恢复。

有多个控制台和 GUI 前端 -mpc控制台客户端非常简单;ncmpcpp我们相当先进,gmpc是一个很好的基于 GTK2 的客户端。

尽管它比简单的脚本更庞大,但它确实可以帮助您处理播放列表、收藏夹等,同时仍然提供易用性和各种前端。

相关内容