태그 보관물: medibuntu

20100608 :: 리눅스에서 아이폰 동영상 인코딩하기 (ffmpeg)

지난 포스팅에서 문제가 되었던 부분은 결국 극복을 못했습니다. 워드프레스가 RC 버전이라 생긴 문제인지.. 암튼 계속 이어나갑니다.

Medibuntu의 힘을 빌리다.

Medibuntu 라는 Ubuntu의 사촌쯤 되는 배포판이 있습니다. 미디어 처리에 특화된 녀석으로 온갖 비디오, 오디오 코덱들을 많이 가지고 있는 녀석입니다. 이 녀석을 사용하면 아이폰용 동영상을 거뜬히 인코딩할 수 있다고 합니다.

그렇다고 사용하고 있는 우분투 배포판을 미디분투로 변신 시킬 필요는 없습니다. 다만 코덱 설치와 관련하여 Medibuntu의 저장소(repository)만 살짝 빌려올 생각입니다. 이 부분은 우분투 공식 문서 사이트를 참조하여 설치하도록 합니다. (해당 링크의 페이지에서 Adding The Repository 부분의 명령을 복사하여 터미널에서 실행합니다.)[1. 이 부분을 본문에 삽입하니 포스트가 저장이 안되는 문제가 있어서 뺐습니다.]

이 명령은 Medibuntu에서 사용하는 저장소를 추가하고, 키 인증을 받고, 패키지 목록을 새로 고치는 과정을 수행합니다. 이 과정 중에 인증에 실패했다는 경고가 나올 수 있지만 무시하면 됩니다.

그럼 혹시 모르니, 다음 패키지들을 설치 및 재설치 해보도록 하겠습니다.

  • ffmpeg
  • x264
  • faac
  • libavcodec-extra-52

명령어는 다음과 같습니다.

[bash]$ sudo apt-get –reinstall install ffmpeg x264 faac libavcodec-extra-52[/bash]

여기까지 하면 거의 준비가 끝났습니다. 다만, ffmpeg의 옵션이 매우 복잡합니다. 그래서 역시 구글링에서 얻은 옵션 값을 이용하여 스크립트를 하나 만들었습니다.

단 두 줄로 이루어졌습니다만, 좀 깁니다..

[bash]#!/bin/bash
ffmpeg -i "$1" -r 29.97 -vcodec libx264 -s 480×320 -aspect 16:9 -flags +loop -cmp +chroma -deblockalpha 0 -deblockbeta 0 -b 1000k -maxrate 1250k -bufsize 4M -bt 256k -refs 1 -coder 0 -me_method umh -me_range 16 -subq 7 -partitions +parti4x4+parti8x8+partp8x8 -g 250 -keyint_min 35 -level 30 -qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec libfaac -ab 80k -ar 48000 -ac 2 "$1.mp4"[/bash]

위의 내용을 복사하여 메모장(gEdit)등에 붙여넣고 적당한 이름을 주고 저장합니다. 패스로 지정된 영역[1. /usr/share/bin 등에 저장하면 일반 내장 명령어처럼 호출할 수 있습니다.]에 저장해도 좋지만 여기서는 귀찮으니, 그냥 동영상 파일들이 있는 디렉터리에 저장하도록 합니다. 위 스크립트는 영상을 인코딩하여 원래 이름 뒤에 .mp4라는 확장자를 붙여서 그 결과를 만들어 내는 명령입니다.

예를 들어 이 스크립트를 aip 라는 이름을 주었다고 가정하겠습니다. 이제 해당 파일을 ‘실행가능하도록’ 만들어야 합니다. 리눅스는 파일 확장자 따위는 필요 없고 다만 ‘실행 가능한 권한’이 있으면 그냥 실행할 수 있습니다. (참 권한에 민감합니다…)

[bash]$ chmod 755 aip[/bash]

만약, 권한이 없다고 한다면 sudo chmod 755 aip로 해 줍니다. 제 경우에는 ntfs 드라이브에서 실행하니 권한이 없다고 하여 sudo 를 통해 실행 권한을 주었습니다.

그리고 해당 디렉터리에서 ./aip “개인의 취향 E01.avi” 라고 입력합니다. (이때 파일명 중간에 빈칸이 들어가서 따옴표로 일부러 둘러쌌습니다.) 그러자 인코딩이 됩니다. 조금 기다렸다 q를 눌러 중지하고 우선 컴퓨터 상에서 제대로 재생되는지 확인해 봅니다. 아무래도 제대로 재생이 되는 듯 하군요.

이제 인코딩을 한 방에 끝내버리겠습니다. 개인의 취향은 총 16편으로 구성되어 있고, 제 PC에는 “개인의취향.E01.avi”와 같은 식으로 이름이 정리되어 있습니다. 이를 한 방에 하려면 for 구문을 쓰면 되지요.

$ for x in 개인의*; do ./aip “$x” ;done

이렇게 작업을 시작한지 40분이 경과되었고, 고작 2편이 인코딩을 조금 전에 시작한 것 같습니다. h264 코덱은 인코딩에 엄청나게 많은 시간이 걸리는 군요. 인코딩 작업이 끝나면, 동영상이 제대로 아이폰에서 재생되는지 확인하고 후속 포스팅을 올리도록 하겠습니다.

긴 글 읽어주셔서 감사합니다.

20010607 :: 리눅스에서 아이폰 동영상 인코딩하기 (ffmpeg) – 예고편

아이폰으로 동영상을 볼 생각

저 보다 먼저 아이폰을 산 지인들의 이야기를 들어보면 다들 “16기가로는 좀 부족해요”라는 의견이 압도적이었습니다. 그래서 저도 32기가짜리를 샀습니다만… 80여개의 어플을 설치하고 100곡이 넘는 음악과 예닐곱편의 팟캐스트 동영상을 넣어 다니지만 고작 3기가 가량 썼을 뿐이더군요. 흠… 동영상을 넣어다니면서 볼 생각은 못했습니다. 가뜩이나 배터리 사정도 넉넉치 않은 아이폰에… 굳이 동영상을 이동하면서 볼 이유는 없을 것 같았거든요. 근데 최근에 드라마 ‘개인의 취향’을 너무 재밌게 봤는데, 이 녀석을 아이폰에 넣어 다녀 보고 싶었습니다. 아이폰용으로 동영상을 인코딩하는 방법은 H.264 / AAC 코덱을 사용하여 mpeg4 비디오로 인코딩을 하면 된다고 합니다. 다음 팟 인코더나 유마일 인코더 같은 무료 인코더는 예전 경험으로 화질이 매우 안습이었기 때문에, 다른 해법을 조금 더 찾아보기로 하였습니다.

아 이폰에 딱맞는 인코더, handbrake

그 러다 알게된 것이 handbrake라는 인코딩 프로그램입니다. 프랑스에서 만들었다고 하는데 아이폰에 적합한 설정을 자동으로 해준다는 훌륭한 프로그램이더군요. 그래서 설치해보려 하였지만, 윈도 환경에서는 .NET 프레임워크를 설치해야 하고 우분투 환경에서는 새 버전의 GNOME과 호환성 문제가 있어서 그냥은 설치가 안된다고 합니다. (저장소에서 일일빌드를 받아서 설치하면 된다고 하는데, 키 인증이 계속 실패해서 포기했습니다.)

결국 믿을 건 ffmpeg

역시 믿을 건 ffmpeg 밖에 없는 것 같습니다. 그런데 문제는 h.264비디오나 aac 오디오를 처리할 수 있는 코덱이 없다는 것입니다. 조금 알아보니 h264는 x264라는 이름으로 공개 코덱이 있다고 하는군요. aac 같은 경우에는 faac라는 이름으로 존재합니다. 그리고 이러한 코덱들을 설치하기 위해서는 몇 가지 준비가 필요하다고 합니다. 제한된 코덱이나 유틸리티들을 사용해야 하는데, (주로 특정 국가에서 저작권 등의 문제로 기본적으로 설치되지 않은 녀석들이라고 합니다.) 그래서 다음 명령어를 통해 제한된 요소들을 추가로 설치해 줍니다.

$ sudo apt-get install ubuntu-restritct-extras[1. $는 프롬프트 표시입니다. 실제 키보드로 입력하지 않습니다]

그리고 그 외의 음악 파일이나 영상 파일의 인코딩을 위해서는 다음 명령을 통해 제한된 일부 코덱을 추가로 설치할 수 있습니다.

$ sudo apt-get install libavcodec-extra-52

그런데, 이렇게 하더라도 AAC 인코더가 실질적으로 지원되지는 않는 문제가 있습니다. 그래서 또 구글링에 구글링… 대부분의 답변은 이 것들을 싹 밀어버리고 ffmpeg을 새로 컴파일해야 한다고 하는군요. (아 귀찮아 ㅠ_ㅠ)

이후 부분에 내용을 빼지 않으면 포스팅이 저장이 되지 않아, 굳이 예고편으로 먼저 발행합니다. 자세한 이야기는 다음편에….