mplayerを使用してファイルを再生するスクリプトがあり、途中で再生を停止した場合、停止した再生位置を保存する方法はありますか?
2 に答える
これをすばやく試してみてください
mplayer あなたの.mp3 | tr [:cntrl:] '\n' | bbe -e "s/\x0a\x5b\x4a//" | テール -n 4 | 頭 -n 1 | カット -d ':' -f 2 | カット -d '(' -f 1
これは0800peter の回答とほぼ同じことを行いますが、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:00:07.3 は 07.3 として返され、00:10:01.2 は 10:01.2 として返されます。
mplayer をバックグラウンドに送りたい場合はどうすればよいですか?
mplayer を起動してバックグラウンドに送り、この情報を照会できるようにしたい場合は、再生ステータス情報を追跡するために私が書いた bash スクリプトを参照してください。このスクリプトには と という 2 つの関数が組み込まれgetElapsedTimestamp
ておりgetElapsedSeconds
、どちらも mplayer が既に終了している場合でも再生時間を返します。これらの関数を使用するには、メディア ファイルを myplayMediaFile
関数で開始する必要があります。この関数は、このように呼び出して mplayer を起動し、バックグラウンドに送信することができます ...
playMediaFile "path/to/your/file" &