Command-Line

帶有mpg123的命令行音頻-如何保存音頻中的位置並下次從該位置開始?

  • April 24, 2012

我正在考慮使用 mpg123 作為有聲讀物播放器。我找不到任何其他適用於 Linux 的好的有聲讀物播放器,我認為 mpg123 可能是我最好的選擇。

我的有聲讀物按目錄組織,曲目名稱有編號(例如,Track-01.mp3、Track-02.mp3 等)。

我正在尋找的是一種在我停止收聽時保存最後播放的位置(曲目和曲目中的位置)的方法,然後能夠在下次收聽時在有聲讀物中的那個位置啟動 mpg123。

最好將此“最後位置”資訊保存在目錄中的文本文件中。這樣,我可以使用儲存在該有聲讀物目錄中的文本文件在最後一個位置啟動每個有聲讀物。

類似的書籤功能也會很好。這似乎是幾乎相同的實現。“最後位置”資訊可以保存在一個名為“last”的文本文件中,每個書籤可以保存在一個名為 bookmark.N 的文本文件中(其中 N 簡單地遞增)。

一個簡單的實現是否可能,也許是一個簡單的 bash 腳本?我不是開發人員。

mpg123 開發人員和維護人員 Thomas Orgis 剛剛應我的要求在 mpg123 中實現了這個功能(作為一個名為“conplay”的腳本)。

他的描述是:

這個小包裝器在給定目錄上執行 mpg123(交出“.”代表目前目錄),播放所有 *.mp

$$ 123 $$終端控制模式下的文件。額外的技巧是播放列表文件(conplay.m3u)被讀取並更新(創建)您離開播放的位置(通過’q’鍵),以在下一次呼叫時返回。 該名稱代表繼續播放。你覺得呢?;-)

我認為這很棒!它完全符合我在上面的問題中的要求。我一整天都在使用它,它完美無缺。我再高興不過了!

你可以從http://mpg123.org/snapshot得到它

謝謝托馬斯!

您可以利用mplayer的螢幕輸出來生成包含時間的輸出文件(它們以每秒約 10 次的速度輸出)。為防止輸出文件過,此腳本在 2 個日誌文件之間切換,後綴為 0 或 1。它們被交替刪除或寫入。除非發生崩潰,mpplaye 停止播放該特定音頻後應該只剩下一個日誌。

然後,該剩餘日誌由片段處理,該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"

引用自:https://unix.stackexchange.com/questions/37018