mplayer 좀더 편하게 쓰기

alee의 이미지

제가 쓰고 있는 스크립트 입니다.
기능이 두 가지인데, 첫 번째 기능은 파일의 해상도에 따라서 적당히 위, 아래에 공백을 넣어서 자막이 화면의 아래에 나오도록 해 주는 기능입니다. 두 번째 기능은 만약 file1.avi 파일을 재생할 경우 같은 디렉토리 안에 file2.avi 파일이 들어 있으면 자동으로 연속으로 재생해 주는 기능입니다.

#! /bin/sh
FILE=$1
RES=$(file "$FILE" | sed -e "s/.*, *\([0-9][0-9]* *x *[0-9][0-9]*\) *,.*/\1/")
if [ "$RES" == "${RES#*:}" ]; then
    if [ 520 -gt ${RES#*x} -a $((${RES%x*}*3/4)) -gt ${RES#*x} ]; then
        OPT=$((${RES%x*}*3/4-${RES#*x}))
        test $OPT -gt $((${RES%x*}/5)) && OPT=$((${RES%x*}/5))
        test ${RES%x*} -gt 693 && OPT=$((520-${RES#*x}))
        OPT="-osdlevel 3 -vop expand=0:-$OPT:0:$(($OPT*5/13))"
    elif [ ${RES#*x} -gt 520 ]; then
        OPT="-vo x11 -subfont-osd-scale $((6*1024/${RES%x*})) -subfont-text-scale $((5*1024/${RES%x*}))"
    fi
fi
while [ -f "$FILE" ]; do
    mplayer -fs -idx "$FILE" || exit
    FILENO=$(echo "$FILE" | sed -e "s/[^0-9]*$//" -e "s/^.*[^0-9]//")
    NEXTNO=$((10#$FILENO+1))
    while [ "${#NEXTNO}" -lt "${#FILENO}" ]; do NEXTNO=0$NEXTNO; done
    FILE="${FILE%$FILENO*}$NEXTNO${FILE##*$FILENO}"
done

제 비디오카드에서는 동영상 파일의 세로 해상도가 520픽셀을 넘으면 xv로는 재생이 안 되더군요. 그래서 520픽셀 보다 클 경우 x11로 재생하도록 하는 부분이 들어 있습니다.

Forums: 
마냥의 이미지

정말 윈도우에서 KMP 연속되는 이름 가진 파일 이어서 재생하는거 편하게 쓰다가 mplayer 쓰면서 좀 아쉬웠거든요

전 두번째 기능만 떼서 써봤는데, 의도한대로 안되더라구요. 가령

파일01.avi
파일02.avi

이런식으로 숫자 앞에 0이 붙어있는 경우랑 0이 안붙은 파일인데도 세개 이상 재생이 안되서 고쳐봤습니다.

#! /bin/sh
FILE=$1

while [ -f "$FILE" ]; do
    mplayer -fs -idx "$FILE"
    CDNO=$(echo "$FILE" | sed -e "s/[^0-9]*$//" -e "s/^.*[^0-9]//")
    NENO=$(expr $CDNO + 1)
    CDNO1=$(echo -n "$CDNO" | wc -m)
    CDNO2=$(echo -n "$NENO" | wc -m)

    if [ "$CDNO1" != "$CDNO2" ];
    then
	NENO=0$NENO
    fi
    FILE="${FILE%$CDNO*}$NENO${FILE##*$CDNO}"
done 

사실 아직도 shell script를 잘 몰라서 앞뒤 정황 봐가면서 고쳐봤어요. 그럭저럭 제가 원하는대로 되는데 문제는 장편 애니를 보다가 중간에 끌때가 힘드네요 Ctrl+C를 마구 눌러댔어요^^

Gentoo Rules!

alee의 이미지

지적하신 문제를 해결해 보려고 약간 고쳐 보았습니다.

while [ -f "$FILE" ]; do
    mplayer -fs -idx "$FILE" || exit
    FILENO=$(echo "$FILE" | sed -e "s/[^0-9]*$//" -e "s/^.*[^0-9]//")
    NEXTNO=$((10#$FILENO+1))
    while [ "${#NEXTNO}" -lt "${#FILENO}" ]; do NEXTNO=0$NEXTNO; done
    FILE="${FILE%$FILENO*}$NEXTNO${FILE##*$FILENO}"
done

이렇게 하니까 다음과 앞에 0이 붙어 있는 경우는 물론이고 아래와 같은 경우에도 연속 재생이 됩니다.

file1.avi
file2.avi
...
file9.avi
file10.avi
file11.avi
...

장편 애니 문제는 mplayer 실행 명령 뒤에 || exit 를 붙여 주니 해결되네요. 이렇게 해도 q나 Esc로 mplayer를 종료하는 경우에는 계속해서 연속 재생이 되지만, 창을 닫아서 종료하면 false 값이 리턴되면서 || 뒤의 exit가 실행되어 스크립트가 종료됩니다.

마냥의 이미지

alee님 정말 고맙습니다^^

덕분에 편하게 쓰게 되네요

Gentoo Rules!

리눅써의 이미지

자막을 표시하는 위치에 대해 제가 찾던 해결방법이군요.
레댓9를 아직도 쓰는 관계로 file명령이 그렇게 발전했는줄 모르고 있었어요.
덕분에 file 명령도 소스업그레이드 하고, 한가지 일을 더 자동화 했네요.
:)

MS를 믿으세요? 그럼 구글은요?

sephiron의 이미지

위의 스크립트가 제 노트북에서는 잘 작동하지 않길래 고쳐볼까 하다가 포기하고 원본에서 조금씩 떼어와서 다시 만들어 봤습니다.
와이드 스크린 노트북은 ~/.mplayer/config에

Quote:
monitoraspect=1.6

를 추가해 주시면 잘 동작합니다(할 겁니다)
참고로 위 설정파일에
Quote:
subfont-text-scale=3

도 넣어주시면 금상첨화

#!/bin/sh
FILE=$1
[ -f "$FILE" ] || exit 1
QWER=${FILE:0:1}
if [ "$QWER" != '/' ]; then
        if [ "$QWER" != "~" ]; then
        CURRENT=$PWD"/"
        fi
fi

RESX=$(file "$FILE" | sed -e "s/.*, *\([0-9][0-9]*\) *x *[0-9][0-9]* *,.*/\1/")
RESY=$(file "$FILE" | sed -e "s/.*, *[0-9][0-9]* *x *\([0-9][0-9]*\) *,.*/\1/")
RATIO=$(echo "scale=1; $RESX/$RESY" | bc )
SCR_RATIO=$(grep -e 'monitoraspect' "$HOME/.mplayer/config" | sed -e "s/.*\([0-9]\.[0-9]*\)/\1/")
[ $SCR_RAITO ] && SCR_RATIO="1.3" #1024x768 default

MAX_RESY=$(echo "$RESX/$SCR_RATIO" | bc)
[ -a "/var/tmp/.mppl" ] && file "/var/tmp/.mppl" && rm -i "/var/tmp/.mppl"
while [ -f "$FILE" ]; do
        echo $CURRENT"$FILE" >> /var/tmp/.mppl
        FILENO=$(echo "$FILE" | sed -e "s/[^0-9]*$//" -e "s/^.*[^0-9]//")
        NEXTNO=$((10#$FILENO+1))
        while [ "${#NEXTNO}" -lt "${#FILENO}" ]; do NEXTNO=0$NEXTNO; done
        FILE="${FILE%$FILENO*}$NEXTNO${FILE##*$FILENO}"
done
FONTSIZE=$(grep -e "subfont-text-scale" "$HOME/.mplayer/config" | sed 's/[^0-9]//g')
[ $FONTSIZE -eq 0 ] && FONTSIZE=4

if [[ "$SCR_RATIO" < "$RATIO" ]]; then
        EXPANDSIZE=$(($FONTSIZE*20)) # 20 for two lines
        TOTALSIZE=$(($EXPANDSIZE+$RESY))
        if [[ $TOTALSIZE -gt $MAX_RESY ]]; then
                EXPANDSIZE=$(($MAX_RESY-$RESY))
        fi
        OPT="-vf expand=0:-$EXPANDSIZE:0:0"
        echo adjust size
fi

echo "Playing $FILE"
echo "X:Y $RESX:$RESY"
echo "File ratio $RATIO"
echo "screen ratio $SCR_RATIO"
echo "maximum y size $MAX_RESY"
echo "font size $FONTSIZE"
echo "expand $EXPANDSIZE"
mplayer $OPT -fs -playlist /var/tmp/.mppl ; rm /var/tmp/.mppl

아, 다음 파일은 > 또는 enter , 이전 파일은 <, 종료는 q입니
alee의 이미지

그냥 이렇게 해도 자동 재생이 되는군요.

mplayer $(echo "$FILE" | sed -e "s/ /?/g" -e "s/\([0-9]\)/[\1-9]/g")
sephiron의 이미지

alee wrote:
그냥 이렇게 해도 자동 재생이 되는군요.
mplayer $(echo "$FILE" | sed -e "s/ /?/g" -e "s/\([0-9]\)/[\1-9]/g")

이 한 줄짜리 코드를 보니 눈물이 앞을 가리는 군요.

alee의 이미지

sephiron wrote:
alee wrote:
그냥 이렇게 해도 자동 재생이 되는군요.
mplayer $(echo "$FILE" | sed -e "s/ /?/g" -e "s/\([0-9]\)/[\1-9]/g")

이 한 줄짜리 코드를 보니 눈물이 앞을 가리는 군요.

그런데 다시 보니 한자리 숫자만 지원이 될 것 같네요.
예를 들어 56 번을 클릭하면 59번 다음에 60번으로 넘어가는게 아니라 66번으로 넘어갑니다. 문제가 좀 있습니다. --;

nike984의 이미지

제가 셸스크립트를 전혀 할지 몰라서 그러는데
위에 스크립트 사용할려면 어떻게 하면 되는건가요?
가령~ 위에 스크립트 중에 하나 파일에 저장해서

$ chmod +x your-script-name
$ chmod 755 your-script-name
$ ./your-script-name

이렇게 해주면 되는건가요?
shell script tutorial 보면 일반적으로 스크립트 파일은 이렇게 실행 시켜주던데~
위에 파일들은 안되더군요. 명령문에 file 이름을 인수로 넣어줘야할거 같은데 ~
좀 설명좀 해주시겠어요?

송효진의 이미지

파일에서 해상도를 알아내어 비율 맞춰주는 스크립트 입니다.
http://wiki.kldp.org/wiki.php/MPlayer
16:10 해상도라 16:9 로 맞춰서 자막이 너무 바닥에 붙지 않게 했습니다.

예 윗분의 궁금증은 그게 맞습니다.
./your-script filename 하면 스크립트내의 $1 이 filename 이 됩니다.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.