강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

FFMpeg-PHP 설치 ( 동영상 썸네일 추출 모듈)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

# 서론
동영상관련 사이트를 운영, 개발 하셨다면 한번쯤은 들어 보셨을 모듈 입니다. 동영상에서 썸네일을 추출하는 모듈로써
여러 코덱 라이브러리를 이용하여 음성과 영상을 용도에 따라 추출 할 수 있게 합니다.

(참고:이 프로젝트의 이름은 MPEG 영상 표준화 그룹에서 유래했고, "mpeg" 앞에 붙은 "FF"는 "fast forward"를 의미한다. - 위키백과 )

아래 부터의 설명은 SULinux 1.5 & SULinux 2.0 에서 설치 테스트 했습니다.  물론 설치가 쉽게 되지는 않습니다.
소스를 직접 수정 해주어야 하는 경우도 있고 php 버젼에 따라 설치가 되지 않는 경우가 있습니다. 이런 경우는 소스 수정(typedef 수정)
또는 php 버젼 변경 해야 하는 경우 도 있습니다. 그렇기 때문에 php 버젼에 따라 FFMpeg 버젼 차이가 날 수 있습니다
(php4에서는 최신 버젼 이 설치 되지 않습니다.)
또한  ffmpeginstall 을 이용한 설치 방법도 알아 보도록 하겠습니다.
(이경우는 CentOS / Fedora / RHEL 에만 지원되고 SULinux에서는 테스트 결과 설치 되지 않았습니다.)


# 본론
1. 설치 소스 다운 로드 및 설치 방법
여러 사이트 및 웹 문서로 보시면 각자 마다 다른 설치 방법을 이용합니다. 전체 라이브러리 소스를 직접 다운 받아 설치하는 경우도 있고
yum 과  rpm 이용해서 설치 하는 방법도 있습니다.  또한 svn를 이용한 방법도 있습니다. svn는 최선 소스를 받기 위해 사용되며 제가 설명할
설치법에서는 해당 내용이 필요가 없습니다.

먼저, 사이트를 통해서 FFMpeg 소스와 각종 라이브러리를 다운 받아서 설치 해야합니다.
모든 라이브러리 소스와 설치 소스를 다운받아 설치 할 수 있지만 구지 그렇게 하지 않아도 됩니다.
아래 페이지에 가서 full checkout을 클릭햐여 스냅샷을 다운 받아 설치 하면됩니다.
http://ffmpeg.org/download.html
해당 스냅샷에는 최신 소스와 라이브러리가 들어 있습니다.

아래 와 같이 서버에서 wget을 통해 직접 다운 받으면 됩니다.

# wget http://ffmpeg.org/releases/ffmpeg-checkout-snapshot.tar.bz2

압축을 풉니다. ( bz2되 어 있으므로 tar에 j 옵션을 줘야겠죠..)

# tar xvjf ffmpeg-checkout-snapshot.tar.bz2

압축을 해제하시면 'ffmpeg-checkout-2010-03-02' 와 비슷한 형태로 디렉토리가 나옵니다.
뒤에 날짜 부분은 스냅샷이 생성 된 날짜입니다. 그러므로 생성된 디렉토리 이름이 다릅니다.

해당디렉토리 이동하시고 내용을 보시면 각종 라이브러리를 확인 가능 하십니다.
# cd ffmpeg-checkout-2010-03-02

configure을 통해 컴파일 환경을 설정 합니다.
# ./configure --enable-shared
컴파일을 합니다.
# make
컴파일중 에러가 나는 경우가 종종 있습니다. 현재 설치하는 버전 이전 파일 같은 경우
대표적으로 아리와 같은 로그가 발생하는 경우가 있습니다.
     In file included from libavdevice/v4l.c:33:
     /usr/include/linux/videodev.h:56: error: syntax error before "ulong"
     /usr/include/linux/videodev.h:72: error: syntax error before '}' token
     libavdevice/v4l.c: In function `grab_read_header':
     libavdevice/v4l.c:75: error: storage size of 'tuner' isn't known
     libavdevice/v4l.c:133: error: invalid application of `sizeof' to incomplete type `video_tuner'
     libavdevice/v4l.c:140: error: invalid application of `sizeof' to incomplete type `video_tuner'
     libavdevice/v4l.c:75: warning: unused variable `tuner'
     make: *** [libavdevice/v4l.o] 오류 1
이경우는 소스상 typedef를 잘못 입력 한 문제로 보이며 /usr/include/linux/videodev.h 파일을 열어서 56번째 라인의 'ulong'을 'unsigned long'으로 수정하면 해결 됩니다.

컴파일된 오브젝트 파일들을 각자의 위치로 이동 시켜야겠죠
# make install

여기 까지가 ffmpeg-php 모듈을 설치하기 위해 헤더 파일과 라이브러리 파일을 설치 하는 과정이라고 보시면 됩니다.

이제 부터 ffmpeg-php 모듈을 생성하는 과정입니다.

당연히 소스 부터 다운 받아야겠죠. 해당 소스는 SourceForge를 통해 다운받으면됩니다.

주소는 아래와 같습니다.
http://sourceforge.net/projects/ffmpeg-php/files/ffmpeg-php/

최신 버젼을 다운 받아 서버로 올린후 압축을 푼다

# tar xvjf ffmpeg-php-0.6.0.tbz2

경로 이동
# cd ffmpeg-php-0.6.0

phpize 명령을 이용 소스를 서버에 맞게 추출한다.
#/usr/local/php/bin/phpize ( 해당 명령은 php 설치경로에 다를수 있습니다. path 잡혀있으면 상관없음)

다음으로 configure 작업 입니다. 아래와 같습니다.
# ./configure --enable-shared --with-php-config=/usr/local/php/bin/php-config
( 경우에 따라 다른 옵션을 줄 수 있습니다.)
(예를 들자면 ./configure --enable-libmp3lame --enable-libogg --enable-libvorbis --disable-mmx --enable-shared --enable-xvid --enable-gpl)
(이 같은 경우 해당 라이브러리를 컴파일 설치 해야 하며, 필요에 따라 설치 하시면 됩니다.)
(또한 그때그때 마다 라이브러리 설치하시고 모듈을 새로 만들어도 됩니다.)

configure 시 오류 가 아래와 같이 발생합니다.

     /usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c: In function 'zim_ffmpeg_frame_toGDImage':
     /usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c:336: error: 'PIX_FMT_RGBA32' undeclared (first use in this function)
     /usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c:336: error: (Each undeclared identifier is reported only once
    /usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c:336: error: for each function it appears in.)
    /usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c: In function 'zim_ffmpeg_frame_ffmpeg_frame':
   /usr/local/src/ffmpeg-php-0.6.0/ffmpeg_frame.c:421: error: 'PIX_FMT_RGBA32' undeclared (first use in this function)
   make: *** [ffmpeg_frame.lo] 오류 1
이 경우도 소스상 문제로 판단됩니다.
ffmpeg_frame.c 파일을 열어서 아래같이 작업 해주시면 됩니다.
# vi ffmpeg_frame.c
   :%s/PIX_FMT_RGBA32/PIX_FMT_RGB32/g
   :w :q!

이제 컴파일 하면됩니다.
# make

컴파일시 php4버젼에서는 오류가 날것입니다. 해당 최신버젼이 php4버전을 지원하지 않기 때문입니다. php-4.4.2 버젼에서 테스한 결과 configre가 되지 않습니다.
이런 경우 php 버젼을 변겅하던지 아니면 구버젼의 ffmpeg 스냅샷과 ffmpeg-php-0.5.0 버젼을 설치 하면됩니다.
해당 파일들의 링크는 아래와 같습니다.
(http://ftp.linux.co.kr/pub/ffmpeg/ffmpeg-checkout-snapshot.tar.tar)
(http://ftp.linux.co.kr/pub/ffmpeg/ffmpeg-php-0.5.0.tbz2)


위 작업 후 대부분 make install 합니다. 그러면 자동적으로 모듈이 경로를 만들어 옮겨 집니다. 대부분 아시겠지만 생성 되면 디렉토리 이름이
별로 마음에 들지 않습니다. 예를 들어 /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/  이렇게 됩니다.

그래서 저는 php 모듈만 모아 두는 디렉토리를 생성 하여 작업합니다.
/usr/local/lib/php_modules 라는 디렉토리 입니다.

#mkdir /usr/local/lib/php_modules

일단 make를 하게 되면 생성된 모듈을 컴파일한 디렉토리 아래 modules 이라는 디렉토리에 존재 합니다.
해당 모듈을 옮겨서 php.ini 설정 만 하면 끝입니다.

#mv ./moules/ffmpeg.so /usr/local/lib/php_modules

이제 php.ini 를 수정 해야 합니다.
# vi /usr/local/lib/php.ini

extension_dir = "./" 을 extension_dir = "/usr/local/lib/php_modules" 로 수정하고 아래 내용 추가
extension=ffmpeg.so

이제 아파치만 추가 하면 끝입니다.

확인은 아래와 같이 하면 됩니다.
#/usr/local/php/bin/php -i | grep ffmpeg

2.  ffmpeginstall 을 이용한 설치 방법
ffmpeginstall 은  ffmpeg-php 쉽게 설치 할 수 있게 각종 라이브러 및 소스들을 설치 하는 쉘스크립트 모음이라고 보시면 됩니다.
아직 국내에서 ffmpeginstall 을 이용하여 설치 하는 방법을 작성 하는 문서가 없어서 여기에 포함 시켜 놓았습니다.
sourceforge를 통해 다운 받을 수 있습니다.  http://sourceforge.net/projects/ffmpeginstall/files/

현재 최신 버젼은 3.2.1 이면 이는 ffmpeg-php-0.5.3.1를 설치 지원 합니다.

해당 파일을 다운받아서 압축 을 풀어 보시면 아래 같이 .sh  파일들을 보실 수 있습니다.

# ls
COPYRIGHT  README    codecs.sh  ffmpeg-php.sh          flvtool.sh  lame.sh    libtheora.sh  mplayer.sh  presetup.sh  start.sh        x264.sh
INSTALL    amrnb.sh  faad2.sh   ffmpeg.sh              install     liba52.sh  libvorbis.sh  nasm.sh     re2c.sh      template.sh     xvid.sh
LICENSE    amrwb.sh  facc.sh    ffmpeginstall.so.conf  install.sh  libogg.sh  libwmf.sh     post.sh     ruby.sh      vorbistools.sh  yasm.sh


vi를 통해 파일을 열어 보시면 아시겠지만 스트립트를 통해 설치 하도록 작성한 쉘스크립트 파일 들입니다.

꼭 yum이 지원되어야 합니다.
( SUlinux경우 ImageMagick-devel , libtiff-devel , libungif , libungif-devel 패키지를 지원 하지 않기 때문에 해당 패키지는 따로 rpm을 구해서 설치 해주셔야합니다.)
( SULinux에서는 위 패키지 때문에 설치가 되지 않습니다.)

설치 방법은 간답합니다. 해당 디렉토리에 있는 install 이라는 스크립트를 실행 하면 됩니다. 중간중간 나오는 요청메시지와 에러 메시지에 맞게
내용을 수정 해주면 됩니다.

물론 root 계정으로 하셔야 합니다. ( 다른 계정일 경우 root 권한으로 바꿔라는 로그와 함께 설치가 안됩니다.)    

# ./install

특별히 해줄것이 없습니다. php.ini 도 자체적으로 수정 합니다. :)

설치가 정상적으로 끝나면 아래 메시지가 출력됩니다.

                          Don't forget to do the following


          1. Reboot webserver
          2. Test the installation ( See http://www.sherin.in/forum/topic.php?id=46 )
          3. If you support this, Make a donation in http://www.sherin.in/ffmpeg/  :-D
          4. Write your success stories and testimonials here http://www.sherin.in/forum/forum.php?id=23


아파치만 재시작 해주면 모든 작업이 끝납니다.



결론

첫번째 방법과 두번째 방법 둘다 쉽게 설치 할 수 있는 방법 입니다.
두번째 방법인 ffmpeginstall을 이용하는 경우 SULinux에 포함되지 않는 패키지를 요구하기 때문에 설치가 되지않습니다. 해당 패키지를 따로 rpm을 통해 설치 후 설치 하시면 됩니다.

-By linux.co.kr 슈퍼짱

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,017 명
  • 현재 강좌수 :  35,690 개
  • 현재 접속자 :  207 명