mpg123を使用するコマンドラインオーディオ - オーディオの場所を保存し、次にその場所から始める方法は?

mpg123を使用するコマンドラインオーディオ - オーディオの場所を保存し、次にその場所から始める方法は?

mpg123をオーディオブックプレーヤーとして使用しようとしています。 Linux用の他の良いオーディオブックプレーヤーが見つからず、mpg123がおそらく最善の選択だと思います。

私のオーディオブックはディレクトリごとに構成されており、トラック名には番号が付けられています(例:Track-01.mp3、Track-02.mp3など)。

リスニングを中断したときに最後に再生された場所(トラックとトラック内の両方の場所)を保存し、次に聞くときにオーディオブックのその場所でmpg123を起動する方法を探しています。

この「最後の場所」情報をディレクトリのテキストファイルに保存するのが最善です。これにより、オーディオブックディレクトリに保存されているテキストファイルを使用して、各オーディオブックを最後の場所から始めることができます。

似たようなブックマーク機能もあればよさそうです。ほぼ同じ実装のようです。 「最後の位置」情報は「last」というテキストファイルに保存でき、各ブックマークはBookmark.N(ここではNは単に増加)というテキストファイルに保存できます。

単純な実装、たぶん単純なbashスクリプトを実装することは可能ですか?私は開発者ではありません。

ベストアンサー1

画面出力を使用して、mplayer時間を含む出力ファイルを生成できます(毎秒約10回の速度で出力)。防ぐ大きい出力ファイル、このスクリプトは、サフィックスが0または1の2つのログファイルを切り替えます。交互に削除または書き込みます。競合が発生しない限り、mplayeが特定のオーディオの再生を停止した後は1つのログしか残りません。

その後、残りのログはフラグメントによって処理され、sed最後のタイムスタンプ(10進数形式)に縮小され、ファイルに書き込まれ、サフィックスを追加して.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"

おすすめ記事