標準入力プレイリストを使用する場合のMplayerコントロール

標準入力プレイリストを使用する場合のMplayerコントロール

私は次の記事を見ました。stdinから読むときにmplayerでコンソール入力を維持する方法は?

しかし、そこへの答えは私には適していません。

次のコマンドを実行しています。

ls -l | grep -e mp3 -e wav | awk '{i=index($0,$9); $0=substr($0,i); printf "./"$0"\n"}' | grep " " | mplayer -playlist -

これは素晴らしい作品です。 (マイナスコントロール)

私はこれを試しました:(上記の質問で提案したように)

ls -l | grep -e mp3 -e wav | awk '{i=index($0,$9); $0=substr($0,i); printf "./"$0"\n"}' | grep " " | mplayer -playlist /dev/fd/3 3<&0 </dev/tty

それは私にこれを与えます:

Playing /dev/fd/./Pink Floyd - Another Brick in the Wall.mp3.
File not found: '/dev/fd/./Pink Floyd - Another Brick in the Wall.mp3'
Failed to open /dev/fd/./Pink Floyd - Another Brick in the Wall.mp3.

誰かが私が何を間違っているか(そしてどのように修正するか)説明してもらえますか?

私は現在shを使ってUbuntu 12.10を実行しています。

答え1

ただファイルパスが相対的で、mplayerはこれをプレイリストの場所(作業ディレクトリなどではない)に相対的なものとして解釈するようです。ゼロ度近似の場合、「./」を現在のディレクトリに置き換えることができますが、使いやすくなります。

find "$(pwd)"  -maxdepth 1 -name \*.mp3 -o -name \*.wav | mplayer -playlist /dev/fd/3 3<&0 0</dev/tty

(それで、あなたの、、はこれに置き換えられました。もちろん、それがまったく同等であることを正確に再確認しませんでしたls。-maxlengthを削除するとサブディレクトリに戻ります。になってください。grepawkfindman find

答え2

mplayerプレイリストの相対パスは、プレイリストがあるディレクトリに基づいて見なされます。絶対パスを試してください。awkスクリプトを次のように変更します。

awk -v dir="$(pwd)" '{ ... ; printf dir "/" $0 "\n" }'

関連情報