How To: Install Current FFmpeg and FFmpeg-PHP in CentOS/RHEL with x264, Xvid, MP3, AAC and more!

First of all, I’m going to assume you already have httpd and php installed. If you don’t have them already you should install them now. I recommend Jason Litka’s Yum Repository.

This guide is written with bash comments, so the whole text block below can be copied and pasted into an install.sh file if you’d rather not go through step by step. I wouldn’t recommend it though, as something could always go wrong, and it could be challenging hunting down the problem in that massive wall of output lines!

#!/bin/bash
# Mplayer Codecs
# Switch to working directory
cd /usr/local/src

# Download the codec files needed 
wget http://www3.mplayerhq.hu/MPlayer/releases/codecs/essential-amd64-20071007.tar.bz2

# Extract the codec files 
bunzip2 essential-amd64-20071007.tar.bz2; tar xvf essential-amd64-20071007.tar

# Create a directory for the codecs & import them 
mkdir /usr/local/lib/codecs/ 
mv essential-amd64-20071007/* /usr/local/lib/codecs/ 
chmod -R 755 /usr/local/lib/codecs

# FLVTool2
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://rubyforge.org/frs/download.php/17497/flvtool2-1.0.6.tgz

# Extract the Source files 
tar zxvf flvtool2-1.0.6.tgz 

# Compile
cd /usr/local/src/flvtool2-1.0.6
ruby setup.rb config 
ruby setup.rb setup 
ruby setup.rb install

# LAME MP3 Encoder
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://downloads.sourceforge.net/lame/lame-398-2.tar.gz

# Extract the Source files 
tar zxvf lame-398-2.tar.gz 

# Compile
cd /usr/local/src/lame-398-2
./configure 
make && make install

# libOGG
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://downloads.xiph.org/releases/ogg/libogg-1.1.4rc1.tar.gz

# Extract the Source files 
tar zxvf libogg-1.1.4rc1.tar.gz 

# Compile
cd /usr/local/src/libogg-1.1.4rc1
./configure 
make && make install

# libVorbis
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.3.tar.gz

# Extract the Source files 
tar zxvf libvorbis-1.2.3.tar.gz

# Compile
cd /usr/local/src/libvorbis-1.2.3
./configure 
make && make install

# liba52
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz

# Extract the Source files 
tar zxvf a52dec-0.7.4.tar.gz

# Compile
cd /usr/local/src/a52dec-0.7.4
./configure --enable-shared=PKGS
make && make install

# libFAAD2
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz

# Extract the Source files 
tar zxvf faad2-2.7.tar.gz

# Compile
cd /usr/local/src/faad2-2.7
autoreconf -vif
./configure --disable-drm --disable-mpeg4ip
make && make install

# libFAAC
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz

# Extract the Source files 
tar zxvf faac-1.28.tar.gz

# Compile
cd /usr/local/src/faac-1.28
./bootstrap
./configure --disable-mp4v2
make && make install

# YASM (required by x264)
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://www.tortall.net/projects/yasm/releases/yasm-0.7.0.tar.gz

# Extract the Source files 
tar zxvf yasm-0.7.0.tar.gz

# Compile
cd /usr/local/src/yasm-0.7.0
./configure
make && make install

# x264 daily snapshot
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20090901-2245.tar.bz2

# Extract the Source files 
bzip2 -d x264-snapshot-20090901-2245.tar.bz2; tar xvf x264-snapshot-20090901-2245.tar

# Compile
cd /usr/local/src/x264-snapshot-20090901-2245
./configure --enable-mp4-output --enable-shared --enable-pthread
make && make install

# XVID
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://downloads.xvid.org/downloads/xvidcore-1.2.2.tar.gz

# Extract the Source files 
tar zxvf xvidcore-1.2.2.tar.gz

# Compile
cd /usr/local/src/xvidcore/build/generic
./configure
make && make install

# Install SVN/Ruby 
yum install -y subversion ruby ncurses-devel

# Fix few Lib issues for next steps 
echo "/usr/local/lib" >> /etc/ld.so.conf 
ldconfig -v

# MPlayer Core
# Switch to working directory
cd /usr/local/src

# Get the latest version from the subversion 
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

# Compile
cd /usr/local/src/mplayer 
./configure 
make && make install

# FFMPEG 
# Switch to working directory
cd /usr/local/src

# Get the latest version from the subversion 
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg 

# Compile
cd /usr/local/src/ffmpeg 
./configure --enable-gpl  --enable-postproc --enable-nonfree --enable-postproc --enable-libfaad --enable-avfilter --enable-pthreads --enable-libxvid --enable-libx264 --enable-libmp3lame --enable-libfaac --disable-ffserver --disable-ffplay --enable-shared
echo '#define HAVE_LRINTF 1' >> config.h 
make && make install

# Finalize the codec setups 
ln -s /usr/local/lib/libavformat.so.50 /usr/lib/libavformat.so.50 
ln -s /usr/local/lib/libavcodec.so.51 /usr/lib/libavcodec.so.51 
ln -s /usr/local/lib/libavutil.so.49 /usr/lib/libavutil.so.49 
ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0 
ln -s /usr/local/lib/libavformat.so.51 /usr/lib/libavformat.so.51

# Few tasks before compiling FFMPEG-PHP 
yum install -y automake autoconf libtool

# FFmpeg-php
# Switch to working directory
cd /usr/local/src

# Download the source files needed 
wget http://downloads.sourceforge.net/ffmpeg-php/ffmpeg-php-0.6.0.tbz2

# Extract the Source files 
bunzip2 ffmpeg-php-0.6.0.tbz2; tar xvf ffmpeg-php-0.6.0.tar 

# Compile
cd /usr/local/src/ffmpeg-php-0.6.0 
phpize 
./configure 
make 
make install

# Add FFMPEG-PHP as an extension of PHP 
# Add this line to your php.ini file (Check the correct path of php.ini) 
echo "extension=ffmpeg.so" >> /etc/php.ini

# Restart Apache to load FFMPEG-PHP 
service httpd restart

# Cleanup
cd ..
rm -f -r ./ffmpeg-php

Wow! That was long…glad that’s over. Anyway, you should check and make sure it worked by running phpinfo() in php and searching for a block called ‘ffmpeg’. If anyone has any suggestions for improvements to the script or other encoders I should add let me know.

Be Sociable, Share!

You can leave a response, or trackback from your own site.
  • Pingback: Nerd Culture » How To: Install Current FFmpeg and FFmpeg-PHP in … | Just linux!

  • S Uren

    I got almost to the end of your script but get stuck on the below command. Has this location moved?

    svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

  • S Uren

    Sorry,… forgot to mention: error is:

    svn: Can't connect to host 'svn.mplayerhq.hu': Connection refused

  • http://www.stephenbelanger.com Stephen Belanger

    Not as far as I know. Maybe the mplayerhq server was down for awhile?

  • http://pulse.yahoo.com/_V65E3HIRGJILC3ZCAQ37YXJHFM filmotheklown

    As of 2011-02-10, I got an error regarding PIX_FMT_RGBA32 when compiling.

    This link shows the solution:
    http://gnufreakz.wordpress.com/2009/04/19/ffmpeg-php-error/

  • Lester

    Great script! but mine fails of the make of ffmpeg-php.

    /usr/local/src/ffmpeg-php-0.6.0/ffmpeg-php.c:46:21: error: swscale.h: No such file or directory

    The file’s in all the include dirs etc and I’ve done the RGB for RGBA if that’s relevant

    Using RHEL5

  • http://www.stephenbelanger.com Stephen Belanger

    Change fuppes/src/plugins/ffmpeg/ffmpeg.h, around line 53, from:
    #ifdef HAVE_LIBSWSCALE
    #include
    #endif

    to
    #ifdef HAVE_LIBSWSCALE
    #include
    #endif

  • http://www.register-web-domain.in domain register

    I was confused about this whole installation process. 
    Now, i feel strongly about it. Great work, loved it.

  • http://www.ecommerce-web-developers.com/ ecommerce development

    This is very valuable information.Thanks for sharing.I appreciate your effort behind sharing all this information.

  • http://www.ecommerce-web-developers.com/ ecommerce development

    Great information buddie.This blog is very impressive.Just loved to read all this information.

  • Actaeonxion

    Outdated: 2012-07-25 21:23:50–  http://files.rubyforge.vm.bytemark.co.uk/flvtool2/flvtool2-1.0.6.tgz
    Resolving files.rubyforge.vm.bytemark.co.uk… 80.68.94.54
    Connecting to files.rubyforge.vm.bytemark.co.uk|80.68.94.54|:80…

Bad Behavior has blocked 941 access attempts in the last 7 days.