표준 입력 재생 목록을 사용할 때 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를 사용하여 우분투 12.10을 실행하고 있습니다.

답변1

단지 파일 경로가 상대적이고 mplayer는 이를 재생 목록의 위치(작업 디렉터리 등이 아닌)에 상대적인 것으로 해석하는 것 같습니다. 0도 근사의 경우 "./"를 현재 디렉터리로 바꿀 수 있지만 사용하기가 더 쉽습니다.

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

(그래서 귀하의 ls, grep, awk은(는) 이 로 대체되었습니다 find. 물론, 그것이 완전히 동등한지 정확히 다시 확인하지는 않았습니다. -maxlength를 제거하면 하위 디렉토리로 재귀하게 될 것입니다. 아마도 이것이 당신이 원하는 것일까요? man find친구가 되어주세요. )

답변2

mplayer재생 목록의 상대 경로는 재생 목록이 있는 디렉터리를 기준으로 간주됩니다. 절대 경로를 사용해 보십시오. awk스크립트를 다음과 같이 변경하십시오.

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

관련 정보