Monday, May 10, 2010

How to Install FFmpeg Centos

SkyHi @ Monday, May 10, 2010

FFmpeg is so important
if you are planning to run a video website with streaming with conversion of
video files to different video formats. This tutorial is intended for Centos/Redhat
versions of Linux where any novice user can install ffmpeg without compiling
the source which is a more traditional way of installing the FFmpeg software
on linux servers. In this tutorial i will show you the easy way to install ffmpeg
and ffmpeg-php (php extension) with just yum rather than compiling ffmpeg from
source files.




 


FFmpeg (http://ffmpeg.mplayerhq.hu)

Mplayer + Mencoder (http://www.mplayerhq.hu/design7/dload.html)

Flv2tool (http://inlet-media.de/flvtool2)

Libogg + Libvorbis (http://www.xiph.org/downloads)

LAME MP3 Encoder (http://lame.sourceforge.net)


FlowPlayer - A Free Flash Video Player - http://flowplayer.org/


Installing FFMpeg


yum install ffmpeg ffmpeg-devel


If you get package not found, then you will need to add few
lines in the yum repository for dag packages installation. Create a file named
dag.repo in /etc/yum.repos.d with the following
contents on it


[dag]

name=Dag RPM Repository for Red Hat Enterprise Linux

baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag

gpgcheck=1

enabled=1


then


yum install ffmpeg ffmpeg-devel


If everything is fine, then the installation should proceed smoothly. If not
you will get something like warning GPG public key missing .


Common Errors


To fix rpmforge GPG key warning:


rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm


For more information refer to this
faq
depending on Centos version


Missing Dependency Error:


If you get missing dependency error like shown below, in the middle of ffmpeg
installation


Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed
by package ffmpeg

Error: Missing Dependency: libtheora.so.0(libtheora.so.1.0) is needed by package
ffmpeg

Error: Missing Dependency: rtld(GNU_HASH) is needed by package ffmpeg

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package imlib2

Error: Missing Dependency: rtld(GNU_HASH) is needed by package a52dec

Error: Missing Dependency: rtld(GNU_HASH) is needed by package imlib2

Error: Missing Dependency: rtld(GNU_HASH) is needed by package gsm

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package x264

Error: Missing Dependency: rtld(GNU_HASH) is needed by package xvidcore

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package lame

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package a52dec

Error: Missing Dependency: rtld(GNU_HASH) is needed by package faad2

Error: Missing Dependency: rtld(GNU_HASH) is needed by package x264

Error: Missing Dependency: rtld(GNU_HASH) is needed by package lame

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package xvidcore

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package faac

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package faad2

Error: Missing Dependency: libgif.so.4 is needed by package imlib2

Error: Missing Dependency: rtld(GNU_HASH) is needed by package faac

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package gsm

Error: Missing Dependency: libpng12.so.0(PNG12_0) is needed by package imlib2

Error: Missing Dependency: rtld(GNU_HASH) is needed by package libmp4v2

Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package libmp4v2


then most commonly you have GLIB 2.3 installed instead of GLIB 2.4 version.
To check the current GLIB version installed on your server. just use


yum list glib*


and it should list the latest GLIB package version.


The reason i was getting this error was my rpmforge packages was pointed to
centos 5 versions instead of centos 4.6.


To fix dependency error:


To fix this error, you might need to check your rpmforge packages compatible
to the release of your existing CentOS version.

Check the file /etc/yum.repos.d/rpmforge.repo and it should
look like for Centos 4.6(Final). If you have lines like http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
you might need to make changes to the rpmforge.repos
like shown below


Note: Backup the original rpmforge.repo file
before you edit its content.


[rpmforge]

name = Red Hat Enterprise $releasever - RPMforge.net - dag

#baseurl = http://apt.sw.be/redhat/el4/en/$basearch/dag

mirrorlist = http://apt.sw.be/redhat/el4/en/mirrors-rpmforge

#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge

enabled = 1

protect = 0

gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag

gpgcheck = 1


To know what linux type and version you are running


cat /etc/redhat-release


Once this is done, do again yum install ffmpeg.


This trick resolved the problem in my linux box running Centos 4.6 and this
is the only way i found to install ffmpeg using yum.


To check the FFmpeg working:


Finally, check the ffmpeg whether it is working or not.


> ffmpeg

> ffmpeg -formats

> ffmpeg --help

// This lists path of mpeg, its modules and other path information




ffmpeg -i Input.file Output.file


To check what audi/video formats are supported


ffmpeg -formats > ffmpeg-format.txt


Open the ffmpeg-formats.txt to see the ooutput


D means decode

E means encode

V means video

A means audio

T = Truncated


Install FFMPEG-PHP Extension


FFmpeg-php
is a very good extension and wrapper for PHP which can pull useful information
about video through API interface. Inorder to install it you will need to download
the source file and then compile and install extension in your server. You can
download the source tarball : http://ffmpeg-php.sourceforge.net/


wget /path/to/this/file/ffmpeg-php-0.5.2.1.tbz2


tar -xjf ffmpeg-0.5.2.1.tbz2


phpize


./configure

make

make install


Common Errors


1. If you get command not found error for
phpize, then you will need to do yum install php-devel


2. If you get error like "ffmpeg headers not
found"
while configuring the source.


configure: error: ffmpeg headers not found. Make sure ffmpeg is
compiled as shared libraries using the --enable-shared option


then it means you have not installed ffmpeg-devel packages.


To Fix: Just install ffmpeg-devel using


yum install ffmpeg-devel


3. If you get an error like shared libraries not found problem
and the program halts in the middle, then you must specify the ffmpeg installed
path explicitly to the ./configure.


configure: error: ffmpeg shared libraries not found. Make sure
ffmpeg is compiled as shared libraries using the --enable-shared option


To Fix:


1. First find out the ffmpeg path with ffmpeg --help command.
The prefix default path should be like /usr/local/cpffmpeg

2. Configure the FFmpeg-php with --with-ffmpeg option


./configure --with-ffmpeg=/usr/local/cpffmpeg


That should resolve the problem!


Editing PHP.INI


Once you have done that without any problems then you will see the php extension
file /usr/local/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so
and you will need mention that extension in php.ini file


nano /usr/local/lib/php.ini


Put the below two lines at the end of the php.ini file


[ffmpeg]

extension=ffmpeg.so


Then restart the server service httpd restart


To check whether ffmpeg enabled with php, point your browser
to test.php file. It should show the confirmation of installed
ffmpeg php extension


// #test.php



<?php


phpinfo()


?>



If any case the ffmpeg does not show in the phpinfo() test make sure that php.ini
path to ffmpeg.so is correct. Still the problem occurs, the reason could be
you might be using older versions of ffmpeg-php which is buggy. Just download
the latest version of ffmpeg-php source then compile it.


Installing Mplayer + Mencoder


Just issue the following yum commands to install the rest of the packages.


yum install mplayer mencoder


Installing FlvTool2


Flvtool2 is a flash video file manipulation tool. It can calculate metadata
and can cut and edit cue points for flv files.


If you are on Centos 5 try yum install flvtool2 with dag
repository and if you get package not found you will need to manually download
and compile the flvtool2. You can download latest version of flvtool2 here:
http://rubyforge.org/projects/flvtool2/


wget <url-link>


ruby setup.rb config

ruby setup.rb setup

sudo ruby setup.rb install


If you get command not found error, it probably means that
you dont have ruby installed.


yum install ruby


Thats it! Once ffmpeg works fine with php extension, download a sample video,
convert to .flv format in the command line and plug it to flowplayer
to see it work on your web browser. Try also to download the video file offline
and see whether the converted flv file works well with both audio and video.


Useful Links


FFmpeg (http://ffmpeg.mplayerhq.hu)

Mplayer + Mencoder (http://www.mplayerhq.hu/design7/dload.html)

Flv2tool (http://inlet-media.de/flvtool2)

Libogg + Libvorbis (http://www.xiph.org/downloads)

LAME MP3 Encoder (http://lame.sourceforge.net)


FlowPlayer - A Free Flash Video Player - http://flowplayer.org/


Install FFmpeg from Compiling Source (Tutorial
Link
)

Nice FFmpeg Installation Tutorial (click
here
)

Important Audio Codecs (http://www.mplayerhq.hu/DOCS/HTML/en/audio-codecs.html)

Common Errors & Fixes while Installing FFmpeg (click
here
)

http://www.mysql-apache-php.com/ffmpeg-install.htm