Ubutun 에서 바이너리로 공급되는 ffmpeg 은 x264 지원에 문제가 있어서 PSP용 동영상을 만들어낼 수 없다. 따라서, 새로 빌드를 해야 되는데 그 과정은 다음과 같다.

You have to download the latest revision from svn:

svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

Once that downloads, follow the same steps above (even the hardy patch still works). Before you run the configure statement, you must install the latest x264 version first (this revision asks for a version of x264 >= 0.65, while Ubuntu only offers at most version 0.59). To do this, grab the latest version from http://www.videolan.org. You can install either via tarball or git repository (I used git).

Then, once you’ve completed installation of x264 and finally get to the “configure” portion, use this configure statement:

./configure—enable-gpl—enable-postproc—enable-libvorbis—enable-libdc1394—enable-libgsm—disable-debug—enable-libmp3lame—enable-libfaad—enable-libfaac—enable-libxvid—enable-pthreads—enable-libx264

Before you type “make” there are a few other things that it looks for. I had to install both libpostproc-dev and libavdevice-dev, and also do the following:

sudo ln -s /usr/include/postproc/ /usr/local/include/libpostproc
sudo ln -s /usr/include/ffmpeg/ /usr/local/include/libavdevice
sudo ln -s /usr/include/ffmpeg/ /usr/local/include/libavformat
sudo ln -s /usr/include/ffmpeg /usr/local/include/libavcodec
sudo ln -s /usr/include/ffmpeg /usr/local/include/libavutil
sudo ln -s /usr/lib/vhook /usr/local/lib/vhook
출처의 글에서는 Hardy에서 설치하는 법을 다루었고 그 아래로 내려가면 Intrepid에서 설치하는 법은 누군가 덧글로 올려두었다. 하라는대로 하면 되고... (주의: 뭘 내가 잘못했는지는 모르겠지만 이미 libx264-dev 패키지가 설치된 경우에는 ffmpeg 의 configure 에서 그 놈을 참조해서 문제가 되는듯. 디렉토리를 잘 정해주면 될 것 같은데 나는 그냥 해당 패키지를 삭제하고 내가 빌드한 libx264를 설치한 뒤 ffmepg을 빌드했다.)

그리고 비디오 파일을 PSP 용으로 변환하려면 다음과 같은 명령을 쓰면 된다.

<경로>/ffmpeg -i <입력 비디오 파일 이름> -acodec libfaac -ab 128kb -ac 2 -ar 48000 -vcodec libx264 -level 21 -b 640kb -coder 1 -f psp -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -g 250 -s 480x272 <만들어질 비디오 파일 이름>


posted by 신묘군

댓글을 달아 주세요

  1.  Addr  Edit/Del  Reply 신묘군

    문제는 노트북에서 이렇게 돌렸더니 온도가 100도까지 올라가고 팬이 시끄러워 진다는 것. 그래서 살살 돌려야 됨. nice 또는 renice 이용할 것!!!

    nice -n 19 ffmpeg -i 입력파일 -acodec libfaac -ab 128kb -ac 2 -ar 48000 -vcodec libx264 -level 21 -b 640kb -coder 1 -f psp -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -g 250 -s 480x272 출력파일

    2009.03.13 11:43

두 기계 사이의 ssh 터널을 만들어서 이쪽의 특정 포트를 원격지의 특정 포트와 연결할 수 있다.
ssh -fNT newcat@superman -L 5900:127.0.0.1:5901
로컬의 5900번 포트를 원격지 기계(즉, superman)의 5901번 포트로 연결한다. 그리고 -f 옵션 때문에 ssh 실행 자체가 백그라운드로 숨어버린다. 따라서, 그 프로세스를 찾아서 kill 하지 않는한 그 터널은 유지된다.


posted by 신묘군

댓글을 달아 주세요

가끔 PDF 포맷으로 된 서식에 칸을 메꿔서 제출을 해야 되는데 워낙 악필이라 그냥 편집하는 방법이 없을까 찾아보았습니다.

pdfedit 이라는 프로그램을 추천하는 사람들이 많고 뭔가 그럴싸 해 보이는 UI를 갖고 있으나 막상 내가 편집하려고 하는 파일은 이걸로 편집이 안되었다. (어떤 파일은 read only로 읽히는데 그것과 관련이 있는 듯) 더 써봐야 감이 올 듯.

flpsed 라는 프로그램은 오직 텍스트를 추가하는 기능만 있어서 오히려 직관적이다. 이미 입력된 텍스트를 다시 선택해서 편집하는 방법이 상당히 불편하다는 것이 단점. 그러므로 처음부터 위치를 잘 잡아서 한번에 입력해야 맘이 편할 듯. 편집된 결과는 Postscript 파일로 저장되므로 ps2pdf로 다시 PDF로 바꿔야 하는 모양.

pdftk 라는 프로그램은 PDF 파일을 가지고 여러가지 장난을 칠 수 있게 해주는데 당장은 쓸 일이 없네.
posted by 신묘군

댓글을 달아 주세요

First screen just after executing ListNet.exe

Report detail screens
posted by 신묘군

댓글을 달아 주세요

어둠의 세계에서 영화 파일과 자막 파일을 따로 구했더니 자막와 화면이 싱크가 맞지 않는다. 수작업으로 일일이 고치기도 귀찮고 그렇다고 리눅스용 영화 재생기가 자막 싱크 조정 기능이 있는 것도 아니고. 그래서 간단한 perl 스크립트를 짜서 해결했다. 참고로 샘플 스크립트는 자막을 6.5초 앞으로 끌어당기는 예시이다.
while(<STDIN>) {
    if( /(^.*SYNC START=)(\d+)(.*?)$/ ) {
        $t = $2 - 6500;
        print $1, $t, $3, "\n";
    } else {
        print $_;
    }
}

posted by 신묘군

댓글을 달아 주세요

  1.  Addr  Edit/Del  Reply aero

    one-liner 버젼입니다.

    perl -npe 's/(SYNC START=)(\d+)/$1.($2-6500)/e' jamak.smi

    2008.11.07 17:53
    •  Addr  Edit/Del 신묘군

      감사합니다. 더 간단하게 할 수 있을거라고 생각은 했는데 perl에서 손을 뗀 지 7년쯤 되니까 가물가물... 이렇게 하면 되겠군요. ^^

      2008.11.07 19:45

우분투 8.10 환경에서 USB로 외장 하드 디스크를 연결한 경우 외장 하드 디스크의 파일 시스템이 ntfs 나 fat 인 경우에는  자동으로 마운트를 해주면서 막상 리눅스 파일 시스템인 경우에는 자동으로 마운트 하지 않는다. 물론 적당한 옵션을 주면 자동으로 마운트 하겠지만 수동으로 마운트 하려면 이렇게 하면 된다. 우선 어디 디바이스로 잡혔는지 본다.
$ tail /var/log/kern.log
Nov  6 17:00:45 ubuntu kernel: [55546.077715] sd 8:0:0:0: [sdb] Write Protect is off
Nov  6 17:00:45 ubuntu kernel: [55546.077722] sd 8:0:0:0: [sdb] Mode Sense: 03 00 00 00
Nov  6 17:00:45 ubuntu kernel: [55546.077727] sd 8:0:0:0: [sdb] Assuming drive cache: write through
Nov  6 17:00:45 ubuntu kernel: [55546.077736]  sdb: sdb1 sdb2 < sdb5 >
Nov  6 17:00:45 ubuntu kernel: [55546.108081] sd 8:0:0:0: [sdb] Attached SCSI disk
Nov  6 17:00:45 ubuntu kernel: [55546.108296] sd 8:0:0:0: Attached scsi generic sg1 type 0
이 로그 메시지에 의하면 /dev/sdb 로 붙어있다는 것을 알 수 있고 파티션은 세 개다. 무슨 파티션이 있는지 보려면 다음과 같이 한다.
$ sudo fdisk -l /dev/sdb

Disk /dev/sdb: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000440d0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1       19119   153573336   83  Linux
/dev/sdb2           19120       19457     2714985    5  Extended
/dev/sdb5           19120       19457     2714953+  82  Linux swap / Solaris
얼른 봐서 내가 원하는 파티션은 /dev/sdb1 인 것 같다. 그리고 파티션 타입은 Linux 다. 아마 ext2 이거나 ext3 인 모양이다. 그래서 ext2로 마운트를 해보았다.
$ sudo mount -t ext2 /dev/sdb1 /media/ttt
마운트도 되고 접근도 된다. 그런데 로그 메시지를 보니...
$ tail /var/log/kern.log
...
Nov  6 17:04:56 yangwooko-ubuntu kernel: [55797.380680] EXT2-fs warning (device sdb1): ext2_fill_super: mounting ext3 filesystem as ext2
허걱. ext3 랜다. 그래서 다시 ext3로 다시 마운트 한다.
$ sudo umount /media/ttt
$ sudo mount -t ext3 /dev/sdb1 /media/ttt
그랬더니 이번에는 제대로 된 모양이다.
$ tail /var/log/kern.log
...
Nov  6 17:06:15 yangwooko-ubuntu kernel: [55876.417125] kjournald starting.  Commit interval 5 seconds
Nov  6 17:06:15 yangwooko-ubuntu kernel: [55876.418018] EXT3 FS on sdb1, internal journal
Nov  6 17:06:15 yangwooko-ubuntu kernel: [55876.418029] EXT3-fs: mounted filesystem with ordered data mode.


posted by 신묘군

댓글을 달아 주세요

이때까지, 그냥 /etc/group 파일을 직접 수정하는 방식으로 했는데 알고보니 이렇게 하는 방법이 있더라.
sudo gpasswd -a `whoami` 대상그룹
또는
sudo usermod -G대상그룹 -a `whoami`
또는
sudo adduser $USER 대상그룹
posted by 신묘군

댓글을 달아 주세요

외장 모니터를 연결한 경우 같은 화면이 나오게 하는 것은 간단한데 각기 다른 화면이 나오게 하는 것은 쉽지 않았다. 여러가지로 바꾸다가 결과적으로 되었는데 무엇 때문에 된 것인지는 모른다. 일단 되는 설정은 다음과 같다.

locale = 미국 영어
grandr 설치
그리고 /etc/X11/xorg.conf 파일은 다음과 같이 (처음에는 xorg.conf 만 바꿔주면 된다고 해서 했는데 안되다가 어제는 갑자기 되었음. 그 사이에 바뀐 것은 locale과 grandr을 설치했다는 것 뿐? 딴게 또 영향을 줬을까?)

Section "Device"
        Identifier      "Intel 945G "
        Driver         "intel"
        Option          "monitor-VGA" "foo"
        Option          "monitor-LVDS" "bar"
EndSection

Section "Monitor"
        Identifier      "foo"
        Option        "Position" "0 0"
EndSection

Section "Monitor"
        Identifier      "bar"
        Option "RightOf"  "foo"
        Option "Enable"  "true"
EndSection

Section "Screen"
        Identifier      "Default Screen"
        Device        "Intel Corporation 945G Integrated Graphics Controller"
        Monitor       "foo"
        # DefaultDepth  24
        DefaultDepth  16
        SubSection "Display"
                # Depth          24
                Depth          16
                Modes         "1280x1024"  "1024x768"   "640x480"
                Virtual                 2304 1024
        EndSubSection
EndSection



posted by 신묘군

댓글을 달아 주세요

왜 기본 개발 환경을 디폴트로 설치하지 않는지 모르겠지만 ㅠ.ㅠ build-essential이라는 패키지를 설치해야 기본 헤더 등등이 딸려서 설치 된다.
posted by 신묘군

댓글을 달아 주세요

티스토리에서 제공하는 스킨을 가져다 썼는데 본문에 포함시킨 링크가 본문 글이랑 별로 구분이 안되어 마음에 불편했다. 그래서 고치려다보니 아무거나 고치면 딴 링크 (예를 들어, 본문 밖의 메뉴에 있는 링크) 도 속성이 막 바뀐다. 작성한 글 본문에 포함된 링크 속성을 바꾸려면 style.css에서 .artiocle .article_post a 의 속성을 바꿔야 된다. 아래의 예는 기존의 속성을 코멘트로 막고 각 링크의 종류별로 다른 속성을 준 것이다.

/* .article .article_post a    {color:#565656;} */
.article .article_port a:link            { color:#636eff; text-decoration:underline;}
.article .article_post a:visited        { color:#a33cd6; text-decoration:underline;}}
.article .article_post a:active         { color:#666; text-decoration:underline;}
.article .article_post a:hover         { color:#ff0000; text-decoration:none;}

알고나면 단순한 것이지만 알게 되기까진 구글신의 도움을 빌지 않을 수 없었다. ^^

posted by 신묘군

댓글을 달아 주세요

요즘은 네트워크 기반으로 인증을 하는 서비스가 상당수 있다. 예를 들어, 학교 네트워크는 주요 논문 사이트에 가입되어 있어서 학교 네트워크에 접속된 컴퓨터에서는 별도의 회원 가입이나 회비를 내지 않고도 논문을 받아볼 수 있다. 문제는 학교 밖에 있을 때에는 이런 서비스를 이용할 수 없다는 점. 하지만 학교망에 연결된 서버만 있다면 ssh 터널을 이용해서 이 문제를 간단히 해결할 수 있다.

가정

  • 학교망에 연뎔된 리눅스 기계가 있고 이 기계로 내가 ssh로 로그인할 수 있다.
  • 내 컴퓨터에는 ssh 터널 기능을 제공하는 ssh 클라이언트 프로그램(여기에서는 putty를 사용한다)이 깔려 있다.
  • 내 웹 브라우저는 프록시 기능을 제공한다. (안 하는 웹 브라우저는 거의 없음. 여기서는 불여우를 사용한다.)

설정하는 방법

우선 ssh 클라이언트에서 터널을 설정한다. 터널이란 어떤 특정 포트로 들어온 정보를 ssh로 연결된 상대 호스트로 전송해준다는 의미이다. 다음 그림과 같이

사용자 삽입 이미지

(1) Source port에는 터널에 사용할 포트의 번호를 지정하고 (2)와 같이 선택한 후 (3)의 Add 버튼을 눌러주면 (4)와 같이 터널의 이름이 생겨난다. 이 상태에서 특정 호스트와 연결하면 내 컴퓨터의 54321번 포트로 들어온 모든 데이터는 상대방 호스트로 날아간다.

이번에는 웹 브라우저의 설정이다. 도구 메뉴에서 설정을 선택하면 다음과 같은 화면이 나오는데 여기서 고급 --> 네트워크 --> 설정을 선택한다.

사용자 삽입 이미지
그러면 다음과 같은 화면이 나오는데 여기서 프록시 수동 설정을 하고 SOCKS 호스트에 localhost라고 써주고 포트에는 아까 선택한 54321번 포트를 써준다.

사용자 삽입 이미지

이렇게 한 뒤 웹 브라우징을 하면 (물론 그 전에 상대방 호스르로 ssh 클라이언트를 통하여 접속이 되어 있어야 한다) 모든 웹 요구는 내 컴퓨터에서 상대방 웹 사이트로 바로 날아가는 것이 아니라 ssh로 연결된 호스트를 거쳐서 날아가게 된다.
posted by 신묘군

댓글을 달아 주세요

유닉스/리눅스 환경에서 파일을 조건에 따라 뒤지는데에는 find라는 강력한 명령이 있다. 또한, 특정 조건의 문자열을 매칭하는데에는 grep이라는 강력한 명령이 있다. 이 둘을 결합하면 일정한 조건을 만족하는 모든 파일에 대하여 특정한 조건의 문자열을 가지는 경우를 모두 찾을 수 있다.

find . -exec grep 문자열 '{}' \; -print



posted by 신묘군

댓글을 달아 주세요

자주 발생하는 경우는 아니지만 오늘 필요해서 해보니 역시 되네. vi / vim 은 안되는 게 없단 말야. 예를 들어,

((( 어떤 내용
))) 다른 내용
((( 어쩌구
))) 저쩌구
((( 이런 줄을
*** 찾고 싶어

이렇게 생긴 파일에서 ((( 로 시작하는 줄 다음에 ) 로 시작하지 않는 줄이 나오는 것을 찾고 싶다면

/^(((.*\n\[^)\]/


라고 하면 된다.
posted by 신묘군

댓글을 달아 주세요

ns-2 2.29 all-in-one 버전을 데비안 4.0 환경에서 빌드하면 다음과 같은 에러가 발생합니다.

checking system version (for dynamic loading)... ./configure: line ????: syntax error near unexpected token `('
./configure: line ????: ????


여기서 ???? 라고 표기한 부분은 같은 종류의 에러가 여러군데에서 나는데 각기 줄 번호도 다르고 해당 줄의 내용도 다르기 때문에 그렇게 표기하였습니다.

이는 configure 파일을 쉘 처리기인 /bin/sh (보통은 /bin/bash로 심볼릭 링크가 되어 있지요) 읽어서 처리하는 과정에서 최근 버전의 bash와 이전 버전의 bash가 약간 다르게 동작하기 때문입니다. 에러가 나는 문장의 예는 다음과 같습니다.

system=MP-RAS-`awk '{print }' /etc/.relid'`

꼼꼼이 따옴표의 개수를 세보면 알겠지만 쓸데 없는 따옴표가 하나 더 있습니다. 즉, 맨 뒤에서 두번째 따옴표(')가 필요가 없습니다. (그런데 이전 버전의 bash에서는 이게 필요했다네요. 왜 그랬을까나...) 따라서, 해당 따옴표를 쓱 지워주면 빌드가 잘 됩니다.

문제는 이런 식으로 에러 나는 곳이 여러 곳이라 모두 찾아서 지워줘야 된다는거지요. ㅠㅠ

posted by 신묘군

댓글을 달아 주세요

  1.  Addr  Edit/Del  Reply 신묘군

    2.29.3 버전 이후로는 그런 문제가 없네요.

    g++/gcc 의 버전과 충돌 문제도 2.32 버전에서는 없음.

    2008.03.12 09:56
  2.  Addr  Edit/Del  Reply Joongsoo

    저도 2.28 버전 설치할 때 저것 때문에 하루를 날려버린 기억이 있습니다. ㅠㅠ
    bash가 최근 버전에선 스크립트 문법 체크가 강화됐다고 하더라구요. 제발 버전별로 다르게 동작하는 일 좀 없었음 좋겠습니다 .ㅎ

    2008.03.13 01:11
  3.  Addr  Edit/Del  Reply 하늘을 닮은 호수

    전 대학원때 2.19 이후로 깔아본 적이 없는데..
    많이 바뀌었군요?!
    근데, 어떤 일을 하시는데, ns-2까지 사용하시나요?! ㅎㅎ

    2008.03.13 09:49