검색어 'FFMEPG'에 대한 1 개의 검색 결과

  1. 2009/02/03 FFMPEG 설치 by 마음튼튼


FFMPEG 설치
(주)스마일서브 고객기술지원팀 / 이선규


1. FFMPEG 이란?


FFMPEG 는 음악과 영상을 녹화하고 변환하고 스트리밍하는 모든 기능을 제공하는 패키지이다.
FFMPEG 는 리눅스에서 개발되었으나, 다른 많은 윈도우를 포함한 OS를 지원한다.

* The project is made of serveral components ;
  - FFMPEG : 비디오 파일 포멧을 다른 포멧으로 변환할 수 있는 커맨드 라인 툴
                    TV 수신 카드로 부터 실시간 영상을 받아 인코딩 할 수 있다.
  - FFSERVER : HTTP 프로토콜을 사용하는 스트리밍 서버이다. 
                      실시간 재생 도중 재생 위치 변경 기능을 제공한다.
  - FFPLAY : SDL과 FFMPEG 를 사용해서 구현된 간단한 재생 프로그램이다.
  - LIBAVCODEC : FFMPEG 에서 사용하는 모든 오디오/비디오 코덱이 들어있는 라이브러리이다.
                           최고의 효율과 코드 재사용성을 목표로 만들어졌다.
  - LIBAVFORMAT : FFMPEG 에서 사용하는 모든 오디오/비디오 코덱을 파싱하고 생성하는 루틴들이
                             들어있는 라이브러리이다.

여기서 우리는 FFMPEG 설치에 대해 살펴보기로 한다.


* FFMPEG Install 소스배포 주소 : http://www.sherin.in/

2. ffmpeginstall 소스 다운로드

2009년 2월 현재 최신 버전은 ffmpeginstall.3.2.1 이고 Link 주소 에서 다운로드 가능하다.
http://www.sherin.in/forum/project-announcements.html


3. 설치되는 rpm 패키지 목록

yum install gcc gcc-c++ libgcc gd gd-devel gettext freetype \
        freetype-devel ImageMagick ImageMagick-devel libjpeg* libjpeg-devel* \
        libpng* libpng-devel* libstdc++* libstdc++-devel* libtiff* \
        libtiff-devel* libtool* libungif* libungif-deve* libxml* libxml2* \
        libxml2-devel* zlib* zlib-devel* automake* autoconf* samba-common* \
        ncurses-devel ncurses patch make

4. 설치되는 코덱관련 프로그램 및 라이브러리 목록

libwmf 0.2.8.3
ruby 1.8.6
flvtool2 1.0.5-rc6
lame 3.97
codecs all-20071007
libogg 1.1.3
libvorbis 1.1.2
vorbistools 1.1.1
libtheora 1.0alpha7
amrnd 7.0.0.1
amrwb 7.0.0.2
liba52 0.7.4
facc 1.26
faad2 2,6,1
yasm 0.6.1
nasm 2.02
xvidcore 1.1.0
x264 snapshot-20080516-2245
re2c 0.13.4
mplayer 1.0 rc1
ffmpeg SVN-r14473
ffmpeg-php 0.5.3.1

* 모든 소스는 제작자 홈페이지에서 직접 다운로드 받아 설치된다.

5. 다운로드 받은 파일을 적당한 위치에 풀어놓는다.

# tar xvfz ffmpeginstall.3.2.1.tar.gz

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

6. 풀어놓은 소스 위치로 이동하고, 몇가지 부분을 수정하여 준다.

# cd ffmpeginstall.3.2.1

# vi install.sh 파일을 열어 49라인쯤을 보면 설치시 서버의 호스트네임을 제작자 메일로 발송해주도록
되어 있는데 발송되지 않게끔 하려면  주석처리 한다.

#echo `hostname -i `|mail -s " FFmpeg installed $_version " sherinmon@gmail.com

# vi start.sh
==> 29라인쯤을 보면 php를 소스로 설치한 경우 다음 같이 전체 경로를 적어준다.
/usr/local/php/bin/php -i |grep -i php.ini

# vi ffmpeg-php.sh
==> 41라인쯤을 보면 php를 소스로 설치한 경우 다음 같이 전체 경로를 적어준다.
/usr/local/php/bin/phpize

# vi post.sh
==> 31라인쯤을 보면 php를 소스로 설치한 경우 다음 같이 전체 경로를 적어준다.
/usr/local/php/bin/php -i |grep -i ffmpeg


7. 설치 메인 스크립트 (install.sh) 실행

# sh install.sh


다음과 같은 화면이 뜨고 '엔터'키를 누르면 php.ini 경로를 입력하라는 프롬프트가 뜬다.

##########################     ffmpeg installation script 3.2.1 ############################
#                     Note:This program is distributed in the hope that it will be useful,     #
#                         but WITHOUT ANY WARRANTY; without even the implied warranty of       #
#                               MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE                  #
#                                 See the GNU General Public License for more details.         #
#                                    -Sherin                                                   #
#If you find a bug please report at the forum : http://www.sherin.in/forum/                  #
#If  wish to modify the script please send a mail to me at sherinmon@gmail.com               #
#So that I can add it to the next release including your contact details too.                  #
#                           Please read the files README ,INSTALL and COPYRIGHT                #
################################################################################################

 All operations are loged to /var/log/ffmpeginstall.3.2.1.log.11111  . Check the logs for any failure
Press Enter to continue...........
Configuration File (php.ini) Path => /usr/local/apache/conf
Loaded Configuration File => /usr/local/Zend/etc/php.ini


Enter the full path to php.ini (see above ) : 이 곳에 바로 위 라인에서 로딩된 php.ini 경로를 적어준다.


8. 설치 진행

 스크립트 실행 순서에 따라 yum으로 rpm이 설치되고 각종 소스파일이 설치된다.

emoving useless libraries,please wait....................... done
creating folders..........done
Creating ldd configurations .......... doneEnsuring required RPM ........
Loading "fastestmirror" plugin
Loading mirror speeds from cached hostfile
 * base: ftp.daum.net
 * updates: ftp.daum.net
 * addons: ftp.daum.net
 * extras: ftp.daum.net
Setting up Install Process
Parsing package install arguments
Package gcc - 4.1.2-42.el5.i386 is already installed.
Package gcc-c++ - 4.1.2-42.el5.i386 is already installed.
Package libgcc - 4.1.2-42.el5.i386 is already installed.
Package gd - 2.0.33-9.4.el5_1.1.i386 is already installed.
Package gd-devel - 2.0.33-9.4.el5_1.1.i386 is already installed.
Package gettext - 0.14.6-4.el5.i386 is already installed.
Package freetype - 2.2.1-20.el5_2.i386 is already installed.
Package freetype-devel - 2.2.1-20.el5_2.i386 is already installed.
Package ImageMagick - 6.2.8.0-4.el5_1.1.i386 is already installed.
Package ImageMagick-devel - 6.2.8.0-4.el5_1.1.i386 is already installed.
Package libjpeg - 6b-37.i386 is already installed.
Package libjpeg-devel - 6b-37.i386 is already installed.
Package libjpeg-devel - 6b-37.i386 is already installed.
Package libpng-devel - 2:1.2.10-7.1.el5_0.1.i386 is already installed.
Package libpng - 2:1.2.10-7.1.el5_0.1.i386 is already installed.
Package libpng-devel - 2:1.2.10-7.1.el5_0.1.i386 is already installed.
Package libstdc++ - 4.1.2-42.el5.i386 is already installed.
Package libstdc++-devel - 4.1.2-42.el5.i386 is already installed.
Package libstdc++-devel - 4.1.2-42.el5.i386 is already installed.
Package libtiff - 3.8.2-7.el5_2.2.i386 is already installed.
Package libtiff-devel - 3.8.2-7.el5_2.2.i386 is already installed.
Package libtiff-devel - 3.8.2-7.el5_2.2.i386 is already installed.
Package libtool-ltdl-devel - 1.5.22-6.1.i386 is already installed.
Package libtool-ltdl - 1.5.22-6.1.i386 is already installed.
Package libtool - 1.5.22-6.1.i386 is already installed.
... 이하 생략 ...

  * 필자는 이미지 관련 rpm을 설치하여 already installed 라고 뜨고 있다.
  * 각종 설치 소스는 /usr/src/ffmpegscript 위치에 저장된다.

9. 설치 완료 후 post.sh 내용 출력

설치가 정상적으로 진행되었다면 다음과 같이 post.sh이 실행된다.

Post installation Procedures  ....... started
 ----------------------------------ffmpeg-php info--------------------------
ffmpeg
ffmpeg support (ffmpeg-php) => enabled
ffmpeg-php version => 0.5.3.1
ffmpeg-php gd support  => enabled
ffmpeg.allow_persistent => 0 => 0
ffmpeg.show_warnings => 0 => 0           ==> ffmpeg-php 모듈이 정상적으로 설치됨.

PWD => /설치스크립트경로/ffmpeginstall.3.2.1
_SERVER["PWD"] => /설치스크립트경로/ffmpeginstall.3.2.1
_ENV["PWD"] => /설치스크립트경로/ffmpeginstall.3.2.1
 Post installation Procedures ....... Completed
 
                                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

10. 아파치를 재시작한다.

# /etc/init.d/apachectl restart

11. phpinfo 정보가 다음과 같이 출력되면 ffmpeg-php 모듈이 설치된 것이다.

사용자 삽입 이미지

12. 테스트용 동영상 다운로드

NVIDIA에서 제공하는 NZONE에서 테스트용 동영상을 다운로드받는다.


wget http://download.nvidia.com/downloads/nZone/videos/nzm_GTAIVPC.wmv
--18:09:20--  http://download.nvidia.com/downloads/nZone/videos/nzm_GTAIVPC.wmv
Resolving download.nvidia.com... 69.22.137.54, 69.22.137.59
Connecting to download.nvidia.com|69.22.137.54|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://http.download.nvidia.com/downloads/nZone/videos/nzm_GTAIVPC.wmv [following]
--18:09:21--  http://http.download.nvidia.com/downloads/nZone/videos/nzm_GTAIVPC.wmv
Resolving http.download.nvidia.com... 220.90.198.35, 220.90.198.120
Connecting to http.download.nvidia.com|220.90.198.35|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 53201018 (51M) [video/x-ms-wmv]
Saving to: `nzm_GTAIVPC.wmv'
100%[==============================================================>] 53,201,018  31.6M/s   in 1.6s
18:09:23 (31.6 MB/s) - `nzm_GTAIVPC.wmv' saved [53201018/53201018]

13. 변환 테스트

ffmepg 으로 위에서 다운로드 받은 wmv 파일을 flv 형식으로 변환한다.
(상세한 옵션은 ffmpeg 를 참조한다.)

ffmpeg -i nzm_GTAIVPC.wmv -ar 22050 -ab 32 -f flv -s 320x240 nzm_GTAIVPC.flv | flvtool2 -U stdin GTAIVPC.flv

* ffmpeg Options
-i filename         input file name
-ar rate            set audio sampling rate (in Hz)
-ab                <int>   E..A. set bitrate (in bits/s)
   psnr                    E.V.. error[?] variables will be set during encoding
   alt                     E.V.. enable alternate scantable (mpeg2/mpeg4)
-f fmt              force format
-s size             set frame size (WxH or abbreviation)

* flvtool2 Options
 -U            Updates FLV with an onMetaTag event

* 컨버팅 진행
FFmpeg version SVN-r14473, Copyright (c) 2000-2008 Fabrice Bellard, et al.
  configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-liba52 --enable-libamr-nb --enable-libamr-wb --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-cross-compile
  libavutil version: 49.7.0
  libavcodec version: 51.62.0
  libavformat version: 52.18.0
  libavdevice version: 52.0.0
  built on Feb  2 2009 18:06:26, gcc: 4.1.2 20071124 (Red Hat 4.1.2-42)
[wmv3 @ 0x897ab90]Extra data: 8 bits left, value: 0
Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 29.97 (30000/1001)
Input #0, asf, from 'tombraider_biketrailer.wmv':
  Duration: 00:01:20.99, start: 4.000000, bitrate: 3310 kb/s
    Stream #0.0: Audio: wmav2, 48000 Hz, stereo, 192 kb/s
    Stream #0.1: Video: wmv3, yuv420p, 1280x720, 3072 kb/s, 29.97 tb(r)
WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
Output #0, flv, to 'nzm_GTAIVPC.flv':
    Stream #0.0: Video: flv, yuv420p, 320x240, q=2-31, 200 kb/s, 29.97 tb(c)
    Stream #0.1: Audio: libmp3lame, 22050 Hz, stereo, 0 kb/s
Stream mapping:
  Stream #0.1 -> #0.0
  Stream #0.0 -> #0.1
[wmv3 @ 0x897ab90]Extra data: 8 bits left, value: 0
Press [q] to stop encoding
frame=  847 fps= 54 q=15.8 size=    1066kB time=24.66 bitrate= 354.2kbits/s

정상적으로 컨버팅이 마쳐졌으면 flv 파일이 생성되었을 것이다.

14. flv 플레이어 다운로드

웹상에서 flv 파일을 플레이어 해주는 프로그램으로 JW Players 가 있다.
다음 주소에서 파일을 다운로드 받아 압축을 풀도록 한다.


* 홈페이지 : http://www.longtailvideo.com/players/jw-flv-player/

압축을 풀어 readme.html 살펴보면 다음과 같은 코드문이 있다. 별도의 html 문서로 저장하도록 한다.
여기서 수정해서 써야 하는 부분은 7번째줄
file={생성한 FLV 파일이름}&image={PREVIEW로 보여줄 IMAGE 파일이름} 이며, 4번째줄 ply 다음 328 200 은 각각 플레이어의 가로와 세로 사이즈이다.

    <div id="container"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div>
    <script type="text/javascript" src="swfobject.js"></script>
    <script type="text/javascript">
        var s1 = new SWFObject("player.swf","ply","328","200","9","#FFFFFF");
        s1.addParam("allowfullscreen","true");
        s1.addParam("allowscriptaccess","always");
        s1.addParam("flashvars","file=sample.flv&image=preview.jpg");
        s1.write("container");
    </script>


15. 샘플 플레이어 주소

크리에이티브 커먼즈 라이센스
Creative Commons License

 

2009/02/03 18:48 2009/02/03 18:48








마음튼튼 이 작성.
TAGS ,

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다