如果我有一个使用mplayer播放文件的脚本并且我在中途停止播放,有没有办法将播放位置存储在停止位置?
答案 0 :(得分:0)
试试这个 它的快速和肮脏,但给了我mplayer退出后播放的歌曲的秒数
mplayer your.mp3 | tr [:cntrl:]' \ n' | bbe -e" s / \ x0a \ x5b \ x4a //" |尾巴-n 4 |头-n 1 | cut -d':' -f 2 | cut -d'(' -f 1
答案 1 :(得分:0)
请注意,这几乎与0800peter's answer相同,但无需安装bbe。本质上,这是通过友好的界面重写该答案。此答案还说明了mplayer提前终止的事件(与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:0:07.3将返回为07.3,00:10:01.2将返回为10:01.2
如果您希望能够启动mplayer并将其发送到后台并且仍然能够查询此信息,则可能需要查看bash script I wrote来跟踪播放状态信息。该脚本包含两个称为getElapsedTimestamp
和getElapsedSeconds
的函数,即使mplayer已经终止,这两个函数都返回播放时间。要使用这些功能,必须使用我的playMediaFile
功能启动媒体文件。可以像这样调用此功能以启动mplayer并发送到后台...
playMediaFile "path/to/your/file" &