'mPlayer'에 해당되는 글 6건

  1. 2014.06.13 로지텍 USB해드셋 H540 (+dmixer) 5
  2. 2014.05.20 mplayer 이어서 보기 스크립트. 2
  3. 2009.09.27 [시간알람] 시간.. 시간이 문제로다. 15
  4. 2009.01.28 mplayer 백그라운드 실행법 3
  5. 2008.12.18 플빡 투명화 (xcompmgr 이용)

로지텍 USB해드셋 H540 (+dmixer)

지금 현재 사용하는 노트북의 이어폰 단자가 맛이가는 바람에 노트북 산지 1년만에 줄창 USB 헤드셋(로지텍 h390)으로 음악을 들었습니다...


한 4년? 동안 잘 쓰다가... USB해드셋의 접촉부가 맛이 가버리는 바람에 새로 구입한게 이 H540입니다.


여담이지만 참 리눅스에서 뭐 하려면 제약사항이 많아요...


USB 헤드셋도 그 중에 하나, 대부분이 일반 오디오 단자를 가진 헤드셋이 대부분이고, 그나마 남은 USB 헤드셋은 윈도우만 지원하고 -_-...


그렇기 떄문에 검색했을때 어느정도 테스트 결과가 나와주는 그런 제품(상대적으로 세계적으로 인지도가 있는 제품)을 고를수 없어요.


여튼 그렇게 때문에 리눅스에서도 제대로 사용할걸 고르려니까, 로지텍꺼 밖에 구할만한게 없더군요...


그래서 저번것도 로지텍꺼 쓰고 이번에도 로지텍..




서론이 기네요... 한시간정도 사용한 느낌을 적자면.


1, 뭐 음질이야... 좀 좋은것 같기도 하고 아닌것 같기도 하고...

일단 이번 모델이 저번에 사용했던것 보다 상위모델이니까 좋긴 하겠죠... 근데 제가 워낙 막귀라 그런거 잘 구별 못함...


2, 저번것과 달리 이번엔 연결선이 왼쪽이 아니라 오른쪽에 연결되어 있습니다... 그래서 마우스질할때 조금 불편함... 적응되면 쓸만하지만.


3, 버튼(음소거, 볼륨업/다운)이 헤드셋 자체에 있습니다. 음악을 제어하려면 손을 머리위로 올려야 합니다...


4, "USB허브에 연결해서 사용하면 안됩니다", 이게 당당히 설명서에 적혀 있음 -_-...

만약 이말 무시하고 허브에 끼워서 사용하면... 일단 인식은 되는데.


(윈도우에서) 소리가 나왔다가 안나왔다가를 반복할 것입니다... (제가 처음에 윈도우에서 테스트하다가... 이거 불량품 온줄 알았어요!)

(리눅스에서) 장치는 인식되지만(alsamixer에 장치는 뜹니다) 어플리케이션에서 소리를 못냄.

MPD같은건 연결에 끊겼다고 자꾸 갈궈대고, mplayer는 소리없이 당당히 재생!


그러니까 혹시 허브에 연결해서 사용하시려면 이 제품을 구하지마시고 다른걸 사세요...

로지텍아... 이전 모델은 허브에 연결해서 사용해도 되더니 이번엔 왜그러니...


5, USB 연결하는 단자가 일반 단자처럼 짧아요...

이전 모델은 사운드카드가 단자쪽에 배치되어 있어서 길이가 길었는데, 이번엔 헤드셋안에 내장한듯

(이것 때문에 USB 허브를 사용하지 말라는걸까?)


6, 리눅스 기준으로, 하드웨어 볼륨조절이랑 소프트웨어 볼륨조절이랑 좀 따로노는 경향이 있음...

하드웨어 버튼으로 볼륨을 조절하면 믹서에서도 반응이 있어야 되는데, 그런게 없네요.

(이건 제컴에서 믹서 설정이 제대로 되지 않아서 일지도...)


7, 리눅스 기준으로, Mute(조용히) 버튼이 작동하지 않습니다. LED는 지혼자 꺼졌다 켜졌다하는데 응답? 그런거 없음...

xev로 키 입력을 받아봤는데, VolumeUP/Down은 키가 잡힙니다만... 추가> showkey도 응답이 없는거 봐서 리눅스에서 인식하긴 좀 힘들듯.


추가>DMixer 설정.

'Linux' 카테고리의 다른 글

오묘하게도 동시에 에러  (4) 2009.08.31
USB 장치(메모리,SD) 포맷시..  (2) 2007.02.13
온리 keyboard~  (6) 2006.11.22

mplayer 이어서 보기 스크립트.

몇일동안 써 봤는데 별 문제는 없네요.


(뭐 생기면 고치면 되고...)


원리를 간단하게 설명하자면.


1,mplayer를 터미널상에서 재생시키면, 현재 재생중인 위치가 가장 마지막 위치에 나옵니다.


2, 재생전에 로그파일에 정보가 있는지 확인하고, 있으면 그곳을 시작위치로 저장해서 mplayer를 재생.


3, 이후 계속 출력 메세지를 받아놓고,


4, mplayer가 종료되면 로그의 가장 마지막줄을 읽어서 끝난 위치를 알아내는 거죠.


5, 그리고 난 다음, 로그파일에 정보가 없으면 새로운 로그 라인에 (기록초, 파일경로) 추가, 있으면 수정합니다.


(사실 원래는 중간에 메세지를 가로채서 파이프로 보내려고 했습니다만, 아무래도 뻘짓같아서...  포기하고 있다가 AUR에 mplayer-resumer(https://aur.archlinux.org/packages/mplayer-resumer/) 패키지를 보고 힌트를 얻어서 작성. (대체 왜 나는 쓸데없이 복잡한 방법을 생각해 냈을까?)


동영상 길이도 검사해서 맨뒷부분에서 exit시에는 기록을 하지 않게 만들어 놓았습니다.


저는 mplayer를 slave mode(외부에서 파이프로 mplayer 제어) 로도 사용하기 때문에 파이프를 설정하는 옵션도 들어갔습니다만, 필요없으면 없애주세요.


길이만 길다뿐이지 별거 아닙니다. 그럼 코드.


#!/bin/bash


# 필요 패키지 : bash, mplayer, ffmpeg, perl, 기타 쉘 관련 유틸리티
MPLAYER_PATH="/home/lowid/bin/mplayer"
MPLAYER_PIPE_PATH="/tmp/mplayer_pipe"
MPLAYER_LOG_FILEPATH="/share/ani/.mplayer_position.log"

# 키 후킹법 => 실패.
#while [ 1 ];do read -n 1 CMD >/dev/null;HEX="$(echo -n "$CMD" | hexdump -e \"%d\")";echo "key_down_event $HEX" > /tmp/mplayer_pipe;done
export MPLAYER_STATUS_OK_END=0
export MPLAYER_STATUS_OK_PLAYING=1
export MPLAYER_ERROR_NOT_PLAY_FILE=2
export MPLAYER_ERROR_LOG_POSITION_GET=3
export MPLAYER_ERROR_PLAYING=4

# mplayer에서 재생할 파일경로와 옵션을 분리해 냅니다
# 주의 : 각 인자를 확장자를 기준으로 분류합니다. (파싱 오류 가능성 있음!)
function Option_Parse()
{
    local Param=""
    unset OPTION_PARSE_RETURN_FILEPATH
    unset OPTION_PARSE_RETURN_OPTIONS

    for Param in "$@";do
        if [ "$(echo "$Param" | grep -E "\.mpg|\.wvx|\.rmvb|\.avi|\.mkv|\.wmv|\.mp4")" ];then

            OPTION_PARSE_RETURN_FILEPATH="$(realpath "$Param")"
        else
            OPTION_PARSE_RETURN_OPTIONS=""$OPTION_PARSE_RETURN_OPTIONS" "$Param""
        fi
    done
}

function Mplayer_Play_Duration()
{
    local Play_filepath="$1"
    local Play_file_duration=""
    local Hour=0
    local Minute=0
    local Second=""
    unset MPLAYER_PLAY_DURATION_RETURN_SECOND

    if [ ! -f "$Play_filepath" ];then
        return 1
    fi

    Play_file_duration="$(ffmpeg -i "$Play_filepath" 2>&1 | grep '^\s*Duration: [0-9][0-9]:[0-9][0-9]:[0-9][0-9]' | perl -pe 's/^.*?\: //g,s/\..*$//g')"
    Hour="$(echo "$Play_file_duration"   | cut -d ':' -f1 | perl -pe 's/^0//g')"
    Minute="$(echo "$Play_file_duration" | cut -d ':' -f2 | perl -pe 's/^0//g')"
    Second="$(echo "$Play_file_duration" | cut -d ':' -f3 | perl -pe 's/^0//g')"

    MPLAYER_PLAY_DURATION_RETURN_SECOND=$(($Hour * 60 * 60 + $Minute * 60 + $Second))

    return 0
}

function Mplayer_Log_Position_Get()
{
    local Play_filepath="$1"
    local Log_filepath="$2"
    local Log_play_file_line=""
    MPLAYER_POSITION_GET_RETURN_PLAY_SECOND=0

    if [ ! -f "$Play_filepath" ];then
        return 1
    fi

    if [ ! -f "$Log_filepath" ];then
        touch "$Log_filepath"
    fi

    Log_play_file_line="$(fgrep -n "$Play_filepath" "$Log_filepath" | cut -d ':' -f1 2>/dev/null)"
   
    if [ -n "$Log_play_file_line" ];then
        MPLAYER_POSITION_GET_RETURN_PLAY_SECOND="$(sed -n "$Log_play_file_line"'p' "$Log_filepath" | cut -d ' ' -f1)"
    fi

    return 0
}

function Mplayer_Log_Position_Set()
{
    local Play_filepath="$1"
    local Play_second="$2"
    local Log_filepath="$3"
    local Log_play_file_line=""
    local Log_play_file_data=""
    local Temp_filepath="/tmp/mpp_$RANDOM"

    if [ ! -f "$Play_filepath" ];then
        return 1
    fi

    if [ -z "$Play_second" ];then
        return 2
    fi

    if [ ! -f "$Log_filepath" ];then
        return 3
    fi

    Log_play_file_line="$(fgrep -n "$Play_filepath" "$Log_filepath" | cut -d ':' -f1 2>/dev/null)"
   
    # 없으면 뒤에 쓰고, 없으면 치환.
    if [ -z "$Log_play_file_line" ];then
        echo "$Play_second" "$Play_filepath" >> "$Log_filepath"
    else
        Log_play_file_data=""$Log_play_file_line"c "$Play_second" "$Play_filepath""
        sed -e "$Log_play_file_data" "$Log_filepath" > "$Temp_filepath"
        mv -f "$Temp_filepath" "$Log_filepath" 2>/dev/null
    fi

    return 0
}

function Mplayer_Log_Position_Delete()
{
    local Play_filepath="$1"
    local Log_filepath="$2"
    local Log_play_file_line=""
    local Temp_filepath="/tmp/mpp_$RANDOM"

    if [ ! -f "$Play_filepath" ];then
        return 1
    fi

    if [ ! -f "$Log_filepath" ];then
        return 2
    fi

    Log_play_file_line="$(fgrep -n "$Play_filepath" "$Log_filepath" | cut -d ':' -f1 2>/dev/null)"

    if [ -z "$Log_play_file_line" ];then
        return 3
    fi

    sed -e "$Log_play_file_line"'d' "$Log_filepath" > "$Temp_filepath"
    mv -f "$Temp_filepath" "$Log_filepath" 2>/dev/null

    return 0
}

function Mplayer_Play_Continue()
{
    local Options="$1"
    local Play_filepath="$2"
    local Play_position_second="$3"
    local Play_backward_second="$4"
    local Mplayer_end_second=""
    local Mplayer_start_position_second=""
    unset MPLAYER_PLAY_RETURN_POSITION

    if [ ! -f "$Play_filepath" ];then
        return 1
    fi

    if [ -z "$Play_position_second" ];then
        return 2
    fi

    if [ -z "$Play_backward_second" ];then
        return 3
    fi

    # mplayer 경로는 전역임 주의, -ss옵션에 0이 들어가도 상관 없다
    Mplayer_end_second="$("$MPLAYER_PATH" $Options -ss "$Play_position_second" "$Play_filepath" 2>/dev/null | strings | tail -2 | egrep '^A:' | perl -pe 's/^A:\s*//g,s/ V:.*//g')"

    if [ -z "$Mplayer_end_second" ];then
        return 4
    fi

    Mplayer_start_position_second="$(echo "$Mplayer_end_second" | cut -d '.' -f1)"
    if [ -z "$Mplayer_start_position_second" ];then
        return 5
    fi

    MPLAYER_PLAY_RETURN_POSITION="$(($Mplayer_start_position_second - $Play_backward_second))"
}

function Mplayer_Pipe()
{
    local Play_filepath="$1"
    local Pipe_path="$2"
    local Pipe_option=""
    unset MPLAYER_PIPE_RETURN_OPTION

    # mkv는 fifo 사용이 불가능한듯함
    if [ -z "$(echo "$Play_filepath" | grep \.mkv)" ];then
        if [ "$(file "$Pipe_path" | cut -d ' ' -f2)" != "fifo" ];then
            mkfifo "$Pipe_path"
        fi

        Pipe_option="-slave -input file="$Pipe_path""
    fi

    MPLAYER_PIPE_RETURN_OPTION="$Pipe_option"
}

function Mplayer()
{
    local Play_filepath=""
    local Options=""
    local Played_position_second=""
    local Restart_backword_second=2
    local Playing_position_second=""
    local Playing_file_duration=""
    local Restart_last_second=10
    local Return_succeed_value=0

    Option_Parse "$@"
    Play_filepath="$OPTION_PARSE_RETURN_FILEPATH"
    Options="$OPTION_PARSE_RETURN_OPTIONS"

    if [ -z "$Play_filepath" ];then
        return $MPLAYER_ERROR_NOT_PLAY_FILE
    fi

    Mplayer_Pipe "$Play_filepath" "$MPLAYER_PIPE_PATH"
    Options=""$Options" "$MPLAYER_PIPE_RETURN_OPTION""

    Mplayer_Log_Position_Get "$Play_filepath" "$MPLAYER_LOG_FILEPATH"
    if [ $? != 0 ];then
        return $MPLAYER_ERROR_LOG_POSITION_GET
    fi

    Played_position_second="$MPLAYER_POSITION_GET_RETURN_PLAY_SECOND"

    Mplayer_Play_Continue "$Options" "$Play_filepath" "$Played_position_second" "$Restart_backword_second"
    if [ $? != 0 ];then
        return $MPLAYER_ERROR_PLAYING
    fi

    Playing_position_second="$MPLAYER_PLAY_RETURN_POSITION"

    # 동영상의 재생 길이를 알때에만 기록을 한다.
    Mplayer_Play_Duration "$Play_filepath"
    if [ $? = 0 ];then
        Playing_file_duration="$MPLAYER_PLAY_DURATION_RETURN_SECOND"

        if [ $(($Playing_position_second + $Restart_last_second )) -lt "$Playing_file_duration" ];then
            Mplayer_Log_Position_Set "$Play_filepath" "$Playing_position_second" "$MPLAYER_LOG_FILEPATH"
            Return_succeed_value=$MPLAYER_STATUS_OK_PLAYING
        else
            Mplayer_Log_Position_Delete "$Play_filepath" "$MPLAYER_LOG_FILEPATH"
            Return_succeed_value=$MPLAYER_STATUS_OK_END
        fi
    fi

    return $Return_succeed_value
}


따로 설정할수 있는 부분은 전역으로 빼놨으니까 수정하시기 편할거에요.


ps; ~/.bashrc에 다음과 같이 쓰시길 추천. 아니면 따로 빼서 쓰시던지요.

alias mp='. /path/Mplayer.sh;Mplayer'




[시간알람] 시간.. 시간이 문제로다.

여러분들은 컴터 할때 시간가는걸 느끼시나여?

저는 컴터 하는건 좋은데 막 하다보면 막 시간이 빨리가서.. 뭐랄까 가는 시간이 아깝달까...

그래서 시간가는걸 확실히 알기 위해서 Conky에다가 디지털 시계도 달아놓고

crontab을 이용해서 한시간마다 TTS로 시간 말해주는 그런뭐.. 그것도 썼는데..

의외로 효과과 미미 하더라고요...

디지털 시계로 시간을 보면 "아 지금 X시구낭" 하고 별 반응이 없게 되더라고요

그러니깐 지금 몇시인지는 아는데 "얼만큼 시간이 지났나?" 알기는 힘들어라구여..

글구 crontab으로 하는거..

# 한시간마다 screen lock
0       * * * * export DISPLAY=:0;/home/lowid/bin/screen_lock.sh

요런식으로 설정을 해서 한시간에 xlock을 띠우고 시간을 (aplay, wav재생) 하게 했는데

이건 한시간에 한번이라 -_-;; 별로..............

그리해서 해결책을 생각해 낸게

1 디지털 시계 버리고 아날로그 시계를 달자

2 1시간마다 시간을 말해게 하지말고 1분마다 시간을 말하게 하자...

해결과정....ㅋ
사용자 삽입 이미지

1 우리의 구글신님께 여쭈어(?) 보았습니다... 글자로는 언제 찾을지 몰라서 (심심하기도 했고) 이미지 검색을 해 봤는데

conky에서 font를 이용해서 아날로그 시계를 출력해주는 소스를 발견 했습니다..

http://floor.textcube.com/entry/my-conky-config?expandComment=1

그래서 이거 뚝딱 설정해서 conky에다가 시계 달기는 간편하게 성공했고

(뭐 덕분에 프로세스 왕장먹는 RSS기능 빼버렸...)

2 1분마다 말하게 하는거 취지는 좋은데 문제는 파일(시간 말해주는 파일) 이 없다는게 참 문제 더군여

기껏해야 정시알람음이 전부인게.. 안습...

그래서 어쩔수 없이 좀 오덕같이 보이긴 하지만, 꼬북님께서 몇달전에 제공해 주신 ARIA 캐릭의 목소리(...)를

이용하기로 했습니다.. 서비스팩(?) 같은 CD., 모르겠어요 확실한건..

제가 윈도우에서 이걸 실행해 본적이 없어서..............

어쨋던 윈도우용인데 파일은 다 wav로 존재하니깐 걍 뺴와서 쓰기로 했습니다..

1분 마다 실행하기 위해서 일단  crontab 에 등록 시켜 놓고..

# 매분 마다 시간 말해줌
*       * * * *  /home/lowid/bin/time_spech.sh

다음과 같이 간단한 쉘스크립트를 만들고.. (간단한거니깐 설명은 생략~)

#!/bin/bash

WAV_DIRECTORY="/home/lowid/etc/time_wav/aria/Akari"
WAV_BASENAME="AA"
WAV_BASENAME_HOUR="H"
WAV_BASENAME_MINUTE="M"

NOW_HOUR=$(date +%I)
NOW_MINUTE=$(date +%M)

pgrep mplayer # 동영상 재생이 아니면

if [ $? -eq 1 ];then
    aplay "$WAV_DIRECTORY"/"$WAV_BASENAME""$WAV_BASENAME_HOUR""$NOW_HOUR".wav "$WAV_DIRECTORY"/"$WAV_BASENAME""$WAV_BASENAME_MINUTE""$NOW_MINUTE".wav 2>/dev/null
fi

하면 알아서 매분 시간을 말해주게 됩니당...

좀 오덕같이 보여서 그렇지 사실.. 좋긴 좋음...

오늘 버닝 해서 포스팅 3개나 했네염 ㅋㅋ 댓글좀 달아주셈 ㅋㅋ

mplayer 백그라운드 실행법

그냥 mplayer filepath & 이렇게 하면 백그라운드로 되긴하는데(이론상으론 그렇...)

mplayer의 프로세스 상태가  stop이 되어버린다 

(영상이 안나온다 - )

하지만 그렇게 안하고 영상도 나오면서 백그라운드로 만들수 있다

mplayer filepath >/dev/null</dev/null &

(뭃론 표준출력이 나오게 하길 원한다면 "> /dev/null" 을 빼도 상관이 없긴하다)

이걸좀 응용하면

mplayer filepath &>/dev/null</dev/null &;sleep 2;killall mplayer

이런것도 가능하다 (물론 killall 보다 process id 로 죽이는게 더 낫겠지만)

구글링하면 바로 메일링리스트가 떠서 쉽게 찾을수 있지만

혹시해서  적어두었다

출저:  http://lists.mplayerhq.hu/pipermail/mplayer-users/2003-December/041327.html



하루라도 쓸데없는 뻘글을 써보려고 노력중.,........

플빡 투명화 (xcompmgr 이용)

사용자 삽입 이미지

xorg.conf 파일
Section "Extensions"
Option "Composite" "Enable"
Option "RENDER" "Enable"
Option "RenderAccel" "true"
Option "backingstore" "true"
Option "AllowGLXWithComposite" "true"
EndSection

fluxbox
설정에서 "가짜투명 기능" 꺼야함
그리고 필요하다면, 투명도 설정도 따로 할것

그리고 쉘에서

$xcompmgr

일단 설저애보긴 해봤는데

좀 답답하네여

어떤식으로 쓸까 고민중.

아 글구 리소스는 별로 안먹어여 메모리 10M정도 더 먹고...

시퓨야뭐... 별차이 없구여...

별 느리지도 않음....

덧> mplayer 사용시에는 x11을 사용하여야 합니다;;;

구글링 해보니깐 아마 인텔드라이버의 오류이다 라는군여..

글구 x11설정하구 (플빡에서) mplayer 의 창 투명을의 alpha 값을 255 255로 주어야 합니당..

그래야 재생하다 풀스크린하면 ㅂㅅ 되는 사테를 막을수 있음...

'Linux > 스샷/외부설정' 카테고리의 다른 글

스샷  (11) 2009.03.01
vimperator 만세!!  (4) 2009.01.04
11월자 스샷...  (5) 2008.11.09
파이어폭스 속도 대박!  (4) 2008.06.23
파이어폭스3 rc1 간단 사용기  (4) 2008.05.29
prev 1 2 next