3

如果我有一个使用 mplayer 播放文件的脚本并且我在中途停止播放,有没有办法将播放位置存储在它停止的位置?

4

2 回答 2

0

试试这个,它又快又脏,但在 mplayer 退出后给了我播放歌曲的秒数

mplayer your.mp3 | tr [:cntrl:] '\n' | bbe -e "s/\x0a\x5b\x4a//" | 尾-n 4 | 头-n 1 | 剪切 -d ':' -f 2 | 剪切 -d '(' -f 1

于 2014-12-14T03:01:55.233 回答
0

应该注意的是,这与0800peter 的答案几乎相同,但不需要安装 bbe。从本质上讲,这是通过友好的界面重写该答案。这个答案也解释了 mplayer 被过早终止的事件(如 with pkill mplayer)。

#!/bin/bash

# desc: Runs mplayer to play input file and returns seconds of playback when stopped
# input: 
#   arg1: path to audio file
#   arg2: pass either [seconds|timestamp]; default timestamp
# output: returns the timestamp or total seconds elapsed when playback stopped 
#   (ie. when mplayer terminated)
playAudioFile() {
    audioFile="$1"

    # if you need to modify mplayer switches, do so on the next line
    stopPos=$(mplayer "$audioFile" 2> /dev/null | tr [:cntrl:] '\n' | grep -P "A: +\d+\.\d\b" | tail -n1)

    # decide what to display
    if [ "$2" == "seconds" ]; then
        retval=$(awk '{print $2}' <<< "$stopPos")
    else
        retval=$(awk '{print $3}'  <<< "$stopPos" | tr -d '()')
    fi

    echo "$retval"
}

#example usage
path="$1"
stopPosition=$(playAudioFile "$path")
echo "$stopPosition"

我的脚本接受音频文件的路径,当 mplayer 终止(正常或异常)时,返回时间戳或经过的秒数。如果您选择接收时间戳,请注意时间戳不会有任何零值单位的占位符。换句话说,00:00:07.3 将作为 07.3 返回,00:10:01.2 将作为 10:01.2 返回
 

如果我想将 mplayer 发送到后台怎么办?

如果您希望能够启动 mplayer 并将其发送到后台并且仍然能够查询此信息,您可能需要查看我编写的用于跟踪播放状态信息的 bash 脚本。该脚本包含两个名为getElapsedTimestampand的函数getElapsedSeconds,即使 mplayer 已经终止,这两个函数都会返回播放时间。要使用这些功能,媒体文件必须以我的playMediaFile功能启动。可以像这样调用这个函数来启动mplayer并发送到后台......

playMediaFile "path/to/your/file" &
于 2018-11-15T06:49:59.023 回答