Friday, March 18, 2011

ffmpeg Converting VOB or MP4 to FLV format

SkyHi @ Friday, March 18, 2011
Using "mencoder" to create "flv" from "VOB" DVD video format files

Many websites nowadays are using swf and flv file formats to play videos hosted on their site or sites, it's advantage is clear in that the file itself is often in comparison to regular video format files, smaller and easier to upload so the site is able to hold and run more video content with much less bandwidth than would normally be required.

#> mencoder inputfile.VOB -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=150 -ofps 25 -oac mp3lame -lameopts abr:br=32 -srate 22050 -vf scale=720 -o outputfile.flv

In our first test video conversion format a file named VTS_01_2.VOB was successfully converted from a 776.9Mb file to a 17mb outputfile.flv although the video and audio was brilliant the file stopped short of it's actual completion target in other words outputfile.flv was considerably shorter than it should have been, we have concluded from this that the VOB file is corrupt and the conversion terminates at that point. Having obtained another dvd with which to copy from we tried again, you should not this recording was original obtained from a small video recorder and transfered to DVD which we then migrated to a flash video (flv). Below is how we archived it, please note the above mencoder script is different to the one below which did eventually work.

#> mplayer dvd://1 -dumpstream -dumpfile myvideo.vob
#> mencoder myvideo.vob -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=150 -ofps 25 -oac mp3lame -lameopts abr:br=32 -srate 8000 -vf scale=720 -o outputfile.flv

It is important to note the above "mplayer" command it does not play the file not visibly at least but dumps or rips 1 or more VTS_01_n.VOB files into a single "vob" extension file that can then be converted into a video file format you require. The input file has been altered to reflect the file output from mplayer and "-srate" has been altered to "8000". If you think a graphical user interface is the way to go you may be right it would take a lot of the guess work and fun out of using command line, but for now command line seems much better than "gui". Ahh problems with the above it turns out with an "-srate of 8000" you might get some rapid clicking when transfered to a website or you tube, through some investigation and some trial and error we came up with the following which you might think is much better.

#> mplayer dvd://1 -dumpstream -dumpfile myvideo.vob
#> mencoder myvideo.vob -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=150 -ofps 25 -oac mp3lame -lameopts abr:br=32 -srate 44100 -vf scale=720 -o outputfile.flv

The "flv" format files can only support 8000, 22050 and 44100 I believe for the available -srate.

Converting MP4 to FLV
ffmpeg -i myvideo.mp4 -ar 44100 myvideo.flv

Converting FLV TO SWF

ffmpeg -i input.flv -acodec copy -vcodec copy output.swf


How to Embed Flash Video on Your Web Page with a Control Bar

SkyHi @ Friday, March 18, 2011
My last article described how to embed SWF in your web page. The main problem associated with this is that the flash video plays automatically. If the video is 10 minutes long viewers will need to wait patiently for it to finish or click out of the web page. This can be very frustrating and may turn off your visitors. It’s better to offer them a control bar.

One of the best solutions to this problem is to use the Flash Player named Flowplayer. It enables you to easily embed a flash video file in your web page and allow visitors to control the playing (ie start or stop the video).

To see how the flash media player looks on a web page visit:
Paul Koko Fashion Design Gallery

What is Flowplayer?

It’s a flash media player that allows you to easily play and control the video from your web page. It’s hosted on a global streaming network and allows extensive customization.

Video formats supported by Flowplayer include FLV, MP4 and H.264. To convert your original video to any of these formats use…a free online service that converts media files to different formats.

The free version of Flowplayer is sufficient to play your flash video however you can purchase a commercial license if you don’t want the logo displayed at the beginning of the video. (I hardly noticed it).

How to embed flash video on your web page with a control bar

1. Download the flash video player (Flowplayer)

After downloading the zipped file, unzip it it to a folder on your hard drive
The Flowplayer folder contains all these files:

example folder

2. Upload the Flowplayer folder to your server.

This will enable you to first test if the example video works on your server. After uploading the folder insert this URL in your browser ie (replace with your own domain).

If it doesn’t work check you uploaded all the files correctly and used the correct file paths.

3. Create folders on the server to play your own video

Create a folder on your server named “video” and put these 3 files inside it:

video.flv (your own video file)

Create a folder named “js” and place this javascript file inside it (taken from the example folder)


Upload both these folders to your web server.

4. Insert javascript code in your web page

To include the javascript file: flowplayer-3.2.3.min.js in your web page place this code in the HEAD section:

5. Create the html code to add your video file and the flash media player (Flowplayer)

The center tags are to center the video on the web page.
Make sure you save the web page to retain your changes.

5. Upload the web page to your server

Your video won’t play correctly if the web page containing the code is not uploaded to the server.

6. Test your video

Enter the URL of your web page in your browser. It should play immediately and display a control bar underneath so your visitors can stop the video whenever they want.

7. Customization

For most users the default behavior is sufficient however Flowplayer allows you to further configure how the video displays on your web page. Customization options may include:

* changing the background color
* use a different control bar
* place a clock on the screen
* have a splash image displayed
* load playlists

Now you have no excuse to play a cool video on your web page.


Related articles
Embed SWF in Your Web Page


Wednesday, March 16, 2011

Compile Apache2 + PHP5 + MySQL5 + xDebug + SSL + SVN + Python + Trac on Ubuntu Hardy (8.04) 64 bits

SkyHi @ Wednesday, March 16, 2011

After setting up Ubuntu Hardy 64 bits (also known as AMD64) on my PC I had to do what every developer needs to do every now and then: set up my working environment. This is not a hard thing to do on Ubuntu, particularly if you choose to go with precompiled packages, installing them through the friendly Synaptic Package Manager. However, I do like to keep a tight control on what is the base of my day to day work, so instead of using the built-in packages, I chose to build them from source. Once again, this is not hard, but it can bring some complications for 64 bits environments. As I may probably need to do this once again in the future, I’ve decided to blog this guide on how to install the following packages on Ubuntu 8.04 64 bits: Apache 2 (with SSL support), PHP5 with xDebug, MySQL 5, Python through mod_python, SVN (client and server), and Trac integrated with SVN.

Setting up the Basics
As I said, we will install each package by building them from source. However, in order to do so we have lots of dependencies. The most important ones will also be built from source, but others we can safely get from the package manager. So without any further explanation, let’s go ahead and install those basic dependencies (I did mean to actually break it down so you could see which software needed which package, but its very late in the AM and I’m too tired to do that now):
1$ sudo apt-get install build-essential
2$ sudo apt-get install libncurses5-dev
3$ sudo apt-get install libxml2-dev
4$ sudo apt-get install libcurl4-openssl-dev
5$ sudo apt-get install libpng12-dev
6$ sudo apt-get install autoconf
7$ sudo apt-get install libtool
This is a pre-requisite for MySQL and PHP, so let’s build it from source.
1$ cd /usr/local/src/
2$ sudo wget
3$ sudo tar xzvf zlib-1.2.3.tar.gz
4$ sudo chown -R $USER:$USER zlib-1.2.3
5$ cd zlib-1.2.3/
6$ ./configure --prefix=/usr/local/zlib
Before proceeding with the build, we need to slightly modify the Makefile so we don’t get compile errors when trying to compile on a 64 bit environment. So go ahead and open the make file:
1$ gksudo gedit Makefile
and change the CFLAGS line to:
Now let’s build and install:
1$ make
2$ sudo make install
01$ cd /usr/local/src/
03$ chown -R $USER:$USER mysql-5.0.51b
04$ sudo groupadd mysql
05$ sudo useradd -g mysql mysql
06$ ./configure \
07    --prefix=/usr/local/mysql \
08    --with-mysqld-user=mysql \
09    --without-debug \
10    --with-client-ldflags=-all-static \
11    --with-mysqld-ldflags=-all-static \
12    --disable-shared \
13    --localstatedir=/usr/local/mysql/data \
14    --with-extra-charsets=none \
15    --enable-assembler \
16    --with-zlib-dir=/usr/local/zlib \
17    --with-unix-socket-path=/tmp/mysql.socket \
19$ make
20$ sudo make install
21$ sudo rm -f /usr/local/mysql/lib/mysql/libz.a
22$ sudo cp /usr/local/zlib/lib/libz.a /usr/local/mysql/lib/mysql/libz.a
The following is only needed the first time you build MySQL, so avoid doing it when you are actually re-building:
01$ sudo cp support-files/my-medium.cnf /etc/my.cnf
02$ sudo /usr/local/mysql/bin/mysql_install_db --user=mysql
03$ sudo chown -R root /usr/local/mysql/
04$ sudo chown -R mysql /usr/local/mysql/data
05$ sudo chgrp -R mysql /usr/local/mysql/
06$ sudo cp support-files/mysql.server /etc/init.d/mysql
07$ sudo chmod +x /etc/init.d/mysql
08$ sudo update-rc.d mysql defaults
09$ sudo /etc/init.d/mysql stop
10$ sudo /etc/init.d/mysql start
11$ /usr/local/mysql/bin/mysqladmin -u root password password
Now let’s default the MySQL server to use utf8 encoding. Open the MySQL configuration file:
1$ gksudo gedit /etc/my.cnf
And right after the [mysqld] line place the following:
Now look for the line [mysql] and right after it add:
Finish up by restarting the MySQL server:
1$ sudo /etc/init.d/mysql stop
2$ sudo /etc/init.d/mysql start
Apache 2
01$ cd /usr/local/src/
03$ sudo tar xzvf httpd-2.2.8.tar.gz
04$ sudo chown -R $USER:$USER httpd-2.2.8
05$ cd /usr/local/src/httpd-2.2.8/srclib/apr
06$ ./configure --prefix=/usr/local
07$ make
08$ sudo make install
09$ cd /usr/local/src/httpd-2.2.8/srclib/apr-util
10$ ./configure --prefix=/usr/local --with-apr=/usr/local
11$ make
12$ sudo make install
13$ cd /usr/local/src/httpd-2.2.8
14$ ./configure \
15    --prefix=/usr/local/apache2 \
16    --with-apr=/usr/local \
17    --with-apr-util=/usr/local \
18    --enable-dav \
19    --enable-dav-lock \
20    --enable-rewrite \
21    --enable-ssl \
22    --enable-mods-shared=all \
23    --enable-deflate
24$ make
25$ sudo make install
The following instructions (everything until the next software package install) is only needed the first time you build Apache, so avoid doing it when you are actually re-building.
1$ sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/apachectl
2$ sudo chmod +x /etc/init.d/apachectl
3$ sudo /usr/sbin/update-rc.d apachectl defaults
4$ sudo adduser --system apache
5$ gksudo gedit /usr/local/apache2/conf/httpd.conf
Once the editor has opened the file /usr/local/apache2/conf/httpd.conf, change the following lines:
1User daemon
2Group daemon
1User apache
2Group nogroup
Now let’s enable SSL support. Once again this is only during your first build of Apache and it is not needed during re-builds. Let’s edit the main Apache configuration file:
1$ gksudo gedit /usr/local/apache2/conf/httpd.conf
Uncomment the following line (if it’s commented out):
1Include conf/extra/httpd-ssl.conf
And make sure the following line is not commented out (if it is commented out, uncomment it to enable; if the line doesn’t exist, add it):
1LoadModule ssl_module modules/
Let’s create the certificate for our server. When you are asked for information do not forget to specify the CommonName.
1$ cd /usr/local/apache2/conf
2$ sudo openssl genrsa -des3 -out server.key 1024
3$ sudo openssl req -new -key server.key -out server.csr
4$ sudo openssl x509 -req -days 730 -in server.csr -signkey server.key -out server.crt
5$ sudo cp server.key server.key.cryp
6$ sudo openssl rsa -in server.key.cryp -out server.key
7$ sudo chmod 400 server.key
Now edit the SSL configuration file in Apache:
1$ gksudo gedit /usr/local/apache2/conf/extra/httpd-ssl.conf
And make sure the ServerName line reflects your server name. You can now reload apache:
1$ sudo /etc/init.d/apachectl stop
2$ sudo /etc/init.d/apachectl start
DEPENDS ON: Apache 2
01$ cd /usr/local/src
02$ sudo wget
03$ sudo tar xzvf php-5.2.6.tar.gz
04$ sudo chown -R $USER:$USER php-5.2.6/
05$ cd php-5.2.6
06$ ./configure \
07    --prefix=/usr/local/php \
08    --with-config-file-path=/usr/local/php \
09    --with-apxs2=/usr/local/apache2/bin/apxs \
10    --with-libxml-dir=/usr/include/libxml2 \
11    --with-mysql=/usr/local/mysql \
12    --with-zlib=/usr/local/zlib \
13    --enable-force-cgi-redirect \
14    --disable-cgi \
15    --with-curl \
16    --with-gd \
17    --with-gettext \
18    --enable-mbstring \
19    --enable-soap
20$ make
21$ sudo make install
22$ sudo /sbin/ldconfig
23$ sudo cp /usr/local/src/php-5.2.6/php.ini-recommended /usr/local/php/php.ini
24$ sudo /etc/init.d/apachectl stop
25$ sudo /etc/init.d/apachectl start
01$ cd /usr/local/src
03$ sudo tar xzvf xdebug-2.0.3.tgz
04$ sudo chown -R $USER:$USER xdebug-2.0.3/
05$ cd xdebug-2.0.3
06$ /usr/local/php/bin/phpize
07$ ./configure --enable-xdebug \
08    --with-php-config=/usr/local/php/bin/php-config
09$ make
10$ cp modules/ /usr/local/php/lib/php/
The following is only needed the first time you build xDebug, so avoid doing it when you are actually re-building. Let’s now enable xDebug on our php.ini file. Open the file for editing:
1$ gksudo gedit /usr/local/php/php.ini
And add the following lines just before the [Date] line
04; Remote settings
12; General
25; Trace options
31; Profiling
Python (with mod_python, SWIG bindings, and mysql_python)
01$ cd /usr/local/src
02$ sudo wget
03$ sudo tar xzvf Python-2.5.2.tgz
04$ sudo chown -R $USER:$USER Python-2.5.2/
05$ cd Python-2.5.2.tgz
06$ ./configure --prefix=/usr/local/python \
08$ make
09$ sudo make install
10$ cd /usr/local/src
12$ sudo tar xzvf mod_python-3.3.1.tgz
13$ sudo chown -R $USER:$USER mod_python-3.3.1/
14$ cd mod_python-3.3.1
15$ ./configure \
16    --with-apxs=/usr/local/apache2/bin/apxs \
17    --with-python=/usr/local/python/bin/python \
19$ make
20$ sudo make install
21$ cd /usr/local/src
23$ sudo tar xzvf swig-1.3.35.tar.gz
24$ sudo chown -R $USER:$USER swig-1.3.35/
25$ cd swig-1.3.35
26$ ./configure \
27    --prefix=/usr/local/swig \
28    --with-python=/usr/local/python/bin/python \
30$ make
31$ sudo make install
32$ cd /usr/local/src
33$ sudo wget
34$ sudo tar xzvf MySQL-python-1.2.2.tar.gz
35$ sudo chown -R $USER:$USER MySQL-python-1.2.2/
36$ cd MySQL-python-1.2.2
Since we also have built in MySQL support for PHP5 on our Apache, I needed to build MySQL-python with embedded libraries, or otherwise mod_python would complain about it. This probably means that whenever you re-build MySQL you’ll also need to rebuild its python support. So let’s open the MySQL-python configuration file:
1$ gksudo gedit /usr/local/src/MySQL-python-1.2.2/site.cfg
And change lines:
1embedded = False
2mysql_config = /usr/local/bin/mysql_config
1embedded = True
2mysql_config = /usr/local/mysql/bin/mysql_config
Let’s now build and install:
1$ sudo /usr/local/python/bin/python install
Since you probably have already installed (whithout even knowing) python on your Ubuntu box (through a software package, for example, AWN Manager), we need to tell Apache to use our custom Python build. So let’s open the Apache launcher for editing:
1$ gksudo gedit /etc/init.d/apachectl
And let’s add the following lines right after the ULIMIT_MAX_FILES line:
2# Set Python PATH
4export PATH="/usr/local/python/bin:$PATH"
Let’s finish by restarting Apache:
1$ sudo /etc/init.d/apachectl stop
2$ sudo /etc/init.d/apachectl start
This is a pre-requisite for SVN, so let’s build it from source. Eventhough there’s a newer version (0.28.2 at the time of this writing), I found that there are known issues with SVN and Neon that only let us install the 0.25.5 version. You are welcome to try a newer version, but if it doesn’t work go back to 0.25.5.
02$ sudo tar xzvf neon-0.25.5.tar.gz
03$ sudo chown -R $USER:$USER neon-0.25.5/
04$ cd neon-0.25.5/
05$ ./configure \
06    --prefix=/usr/local/neon \
07    --with-ssl \
09$ make
10$ sudo make install
Subversion (with Python bindings)
DEPENDS ON: Neon, Swig, Apache 2, Python
01$ cd /usr/local/src
03$ sudo tar xzvf subversion-1.4.6.tar.gz
04$ sudo chown -R $USER:$USER subversion-1.4.6/
05$ cd subversion-1.4.6/
06$ sh
07$ ./configure \
08    --prefix=/usr/local \
09    --with-apxs=/usr/local/apache2/bin/apxs \
10    --with-httpd \
11    --with-apr=/usr/local \
12    --with-apr-util=/usr/local \
13    --with-neon=/usr/local/neon \
14    --with-swig=/usr/local/swig/bin/swig \
15    PYTHON=/usr/local/python/bin/python
16$ make
17$ sudo make install
18$ make swig-py
19$ sudo make install-swig-py
20$ sudo cp -R /usr/local/lib/svn-python/* /usr/local/python/lib/python2.5/site-packages
21$ sudo ldconfig
22$ sudo mkdir /var/lib/svn
23$ sudo mkdir /var/lib/svn/repository
24$ sudo chown -R apache:root /var/lib/svn/repository
25$ sudo chmod -R 770 /var/lib/svn/repository
26$ sudo chmod -R g+ws /var/lib/svn
Let’s create our first SVN user (replace $USER with your desired SVN user name):
1$ sudo /usr/local/apache2/bin/htpasswd -c /var/lib/svn/dav_svn.passwd $USER
Now let’s enable SVN over http with SSL. Open the main Apache configuration file:
1$ gksudo gedit /usr/local/apache2/conf/httpd.conf
Look for the line “#Include conf/extra/httpd-dav.conf” and right after it add the following:
1Include conf/extra/dav_svn.conf
Now let’s create that file:
1$ gksudo gedit /usr/local/apache2/conf/extra/dav_svn.conf
And place the following contents on it:
2    DAV svn
3    SSLRequireSSL
4    SVNParentPath /var/lib/svn/repository
5    AuthType Basic
6    AuthName "SVN repository"
7    AuthUserFile /var/lib/svn/dav_svn.passwd
8    Require valid-user
Restart Apache:
1$ sudo /etc/init.d/apachectl stop
2$ sudo /etc/init.d/apachectl start
As an example, let’s create an SVN project called test:
1$ sudo svnadmin create /var/lib/svn/repository/test
2$ sudo chown -R apache:root /var/lib/svn/repository/test
You will now have SVN access to that project using the URL https://SERVER/svn/test
Trac (with SVN integration)
DEPENDS ON: Subversion, MySQL, Python
1$ cd /usr/local/src
2$ sudo wget
3$ sudo tar xzvf Trac-0.11rc1.tar.gz
4$ sudo chown -R $USER:$USER Trac-0.11rc1/
5$ cd Trac-0.11rc1
6$ sudo /usr/local/python/bin/python ./ install --prefix=/usr/local/python
7$ sudo mkdir /var/lib/trac
Now let’s edit the main Apache configuration file:
1$ gksudo gedit /usr/local/apache2/conf/httpd.conf
And add the following at the end:
2  SetHandler mod_python
3  PythonInterpreter main_interpreter
4  PythonHandler trac.web.modpython_frontend
5  PythonOption TracEnvParentDir /var/lib/trac
6  PythonOption TracUriRoot /trac
Restart Apache:
1$ sudo /etc/init.d/apachectl stop
2$ sudo /etc/init.d/apachectl start
As an example, let’s add Trac support to our SVN project called test. We then first create the MySQL database, and then run the tracd program to set up the environment. When you are asked for the database URL specify: “mysql://root:password@localhost/trac_test”:
1$ mysqladmin -uroot -ppassword create trac_test
2$ sudo /usr/local/python/bin/trac-admin /var/lib/trac/test initenv
You can now access your trac installation for the test project using the URL: http://server/trac/test