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"
答え2
mpg123開発者でメンテナンス者のThomas Orgisは、私の要求に応じて、mpg123でこの機能を(「conplay」というスクリプトで)実装しました。
彼の説明は次のとおりです。
この小さなラッパーは、指定されたディレクトリ(現在のディレクトリに「.」入力)でmpg123を実行して、端末制御モードでその中にあるすべての* .mp [123]ファイルを再生します。追加のトリックは、再生を終了した場所(「q」キーを介して)にプレイリストファイル(conplay.m3u)を読み、更新(生成)して次の呼び出しに戻ることです。
名前は「連続再生」を意味します。どう思いますか? ;-)
これはすごいと思います!上記の質問で私が要求したものとまったく一致しています。私は一日中それを使用してきたし、完璧に動作します。私はとても幸せです!
から始めることができますhttp://mpg123.org/snapshot
ありがとう、トーマス!
答え3
@Peter.Oのmplayer出力パーサーは非常に魅力的だと思いますが、一度試してみてください。MPD、ミュージックプレーヤーデーモン?非常に強力な音楽プレーヤーであり、プレイリストのバックエンドです(組み込みのフロントエンドなし)。最後の再生状態(ボリューム、トラック、トラック位置、トラックが再生/一時停止している場合など、デーモンが起動すると(おそらく起動中)、再生が再開されます。
複数のコンソールとGUIのフロントエンドがあります。mpc
コンソールクライアントは非常にシンプルでncmpcpp
非常に進化し、gmpc
優れたGTK2ベースのクライアントです。
簡単なスクリプトよりもかなり大きいですが、プレイリスト、お気に入りなどを処理するのに実際に役立つと同時に使いやすさと多様なフロントエンドを提供します。