CLI를 사용하여 VLC 또는 다른 미디어 플레이어에서 재생되는 미디어 제목을 어떻게 얻습니까?

CLI를 사용하여 VLC 또는 다른 미디어 플레이어에서 재생되는 미디어 제목을 어떻게 얻습니까?

명령줄을 사용하여 VLC에서 재생되는 미디어 제목을 가져오고 싶습니다. 현재 내가 가지고 있는 가장 가까운 명령은 이 명령입니다.

ps aux | grep vlc

출력은 다음과 같습니다

pc       27636  2.1  2.3 1261964 90028 ?       Sl   21:46   0:23 /usr/bin/vlc --started-from-file /media/pc/Everything/TV shows/Discovery Channel - The History Of Hacking.avi
pc       28317  0.0  0.0  11748  2196 pts/0    S+   22:05   0:00 grep --colour=auto vlc

답변1

나는 이것을 수행하는 훌륭하고 깨끗한 방법이 있다고 확신합니다. 아마도 D-bus를 통해서일 것입니다. 안타깝게도 그게 뭔지 모르겠어서 좀 더 해킹적인 방법이 있습니다. 이를 사용하여 lsof프로세스를 실행하여 열린 파일을 인쇄할 수 있습니다. 관련 옵션은 다음과 같습니다( man lsof).

-c c    selects  the  listing  of  files  for  processes  executing the
        command that begins with the characters of c.  Multiple commands
        may be specified, using multiple -c options.  They are joined in
        a single ORed set before participating in AND option selection.

따라서 lsof -c vlc이름은 으로 나열됩니다 vlc. 그러나 여기에는 우리가 관심을 두지 않는 다양한 라이브러리 및 기타 항목을 포함하여 모든 종류의 항목이 나열됩니다. 출력의 네 번째 필드 lsof(적어도 내 Arch에서는)는 파일의 파일 설명자(일반 파일의 경우)이고 그 뒤에는 파일이 열린 모드를 설명하는 문자가 옵니다( r이 경우 읽기). 필드 5는 파일 형식이며 여기서는 REG일반 형식을 원합니다. 이 모든 것을 종합하면 다음과 같은 결과를 얻을 수 있습니다( -w경고가 표시되지 않음).

$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"'
vlc     16532 terdon   16r      REG    8,19    131338  69731703 /path/to/foo.avi

파일 이름만 얻으려면 GNU를 사용할 수 있습니다 grep.

$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"' | grep -o '/.*'
/path/to/foo.avi

파일 이름만 가져옵니다.

$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"' | grep -o '[^/]*$'
foo.avi

답변2

헤더(파일 메타데이터에 있음) 뒤에 있는지 아니면 파일 이름(명령줄에 있음) 뒤에 있는지 잘 모르겠습니다. ps 또는 pgrep은 헤더를 직접 가져오지 않지만 파일을 가져옵니다. 모든 vlc와 해당 명령줄을 실행할 수 있습니다.

pgrep -a vlc

그러면 이름에 vlc가 포함되어 있지만 플래그는 포함되지 않은 모든 프로세스가 검색되므로 이름이 지정된 바이너리 실행과 일치합니다.vlc를 사용한 프로그램하지만다른 프로그램 --flags --do-vlc

이제 명령줄에서 파일 이름을 추출하는 방법이 약간 까다롭습니다. sed를 통해 실행하고 싶을 수도 있지만 약간 불안정할 것이라고 생각합니다.

pgrep -a vlc | sed -r 's%^.*\/([^/.]+)%\1%g'

바이너리 이름에 vlc가 포함된 프로그램 목록이 표시되며 출력은 마지막 슬래시부터 점까지의 모든 내용입니다.

당신은 다음과 같은 것을 연주하기 시작합니다/홈/영화/dr. 마일그렇다면 당신은 운이 좋지 않습니다.

답변3

mpris 인터페이스 사양을 보면 d-bus를 사용할 수 있습니다.여기

qdbus 및 mpris 인터페이스를 사용하여:

qdbus org.mpris.MediaPlayer2.vlc \

(VLC는교체됨다른 미디어 플레이어에서도 작동합니다. ) 그런 다음 여기에서 메타데이터를 추출합니다.

/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Metadata \

마지막으로 grep을 사용하고 불필요한 데이터를 제거하면 헤더를 볼 수 있습니다.

| grep "xesam:title:" | cut -c 14-

관련 정보