Dengar's Blog Logo

Dengar's blog...
We will see what I post, probably will be some random tutorials

Sunday, 29 March 2009

How to re-encode videos using MPlayer

Hi,

It often happens to me that I get sent a video and it turns out to be unnecessarily huge. I think nowadays people record videos with a digital camera or an older camcorder - but this isn't really important...

If you use Windoze, there are probably hundreds of programmes that you could use to re-encode videos, provided you pay a license fee or steal the software. Linux however this comes free for all of us and it's fairly easy to do from the trusty shell (console, prompt...). In addition you will find that you can change aspect ratio, frame rates and do other processing functions easily using MPlayer. In addition, MPlayer crosscodes nearly all media files, certainly most I have ever come across...

The prerequisit is that you get MPlayer and their codec-pack installed. You can find that here: http://www.mplayerhq.hu/. If you use ubuntu, you should be able to do something like:
sudo apt-get MPlayer
to install the player using the package manager.

Let me know if there is need for more detailed instructions on how to install MPlayer...

There are different codecs for re-encoding for both audio and video. It's also not always possible to convert the audio part of a file into something much better - and why would you, it's not going to sound better!


Next, we need the massive video file that we'd like to shrink. Simply navigate to the folder it is in. To encode with standard settings, using the liblav codec (for DivX), try this command:
mencoder -ovc lavc inputFile -oac mp3lame -o outputFile

This will re-encode the file, but this mightn't be using the best settings for your needs, so I'm going to intruduce a few more features:


Need to fix a broken index in your video file:
mencoder -idx input.avi -ovc copy -oac copy -o output.avi
Want to merge a few media files? This is for you (be sure that they are the same format etc...):
cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o output.avi

Here's a simple command that converts an MPG file to AVI format:

mencoder file.mpg -o file.avi -ovc lavc -oac lavc


-ovc and -oac represent the options for the video and audio codecs that mencoder will use. To find out what video codecs are installed on your system, use mencoder -ovc help and mencoder -oac help.

Suppose you need a file with no compression on the audio part and decide to use PCM. You can specify the type of audio codec you want by using the acodec option:

mencoder file.mpg -o file.avi -ovc lavc -oac lavc -lavcopts acodec=pcm

When it comes to MP3 compression, you can also choose a bitrate using abitrate:

mencoder file.mpg -o file.avi -ovc lavc -oac lavc -lavcopts acodec=libmp3lame:abitrate=128

You can use lameopts if you have libmp3lame installed and want to add extra options to the encoding process. You can also create files with variable bit rate audio compression:

mencoder file -o file.avi -ovc lavc -oac mp3lame -lameopts vbr=2:q=3

where q can be any number between 0 and 9.

You can do the same thing with the video part of the file:

mencoder file.mpg -o file.avi -ovc lavc -oac lavc -lavcopts acodec=libmp3lame:abitrate=128 vcodec=xvid

If you don't want to use video compression, try vcodec=copy. With that option, the frames will be copied one by one from the source file.

You can use xvid or divx directly, without going through lavc:

mencoder -ovc xvid -oac mp3lame -o destination.avi source.avi

If you need customized quality, you can add a few options to the XviD compression:

mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=878 -o destination.avi source.avi

The higher the bitrate, the better quality the video file will be. The downside is a larger file size.



Now let's get fancy and make an XviD copy of a DVD using two passes. During the first pass, mencoder analyzes the content of the file; on the second pass mencoder encodes the new file based on the information obtained. By using two passes you can produce a better compressed file, but you'll have to wait a little longer for it, and you'll probably see CPU usage at 90% during the conversion:

mencoder dvd:// -oac mp3lame -ovc xvid -xvidencopts pass=1 -o /dev/null

mencoder dvd:// -oac mp3lame -ovc xvid -xvidencopts pass=2:bitrate=800 -o xvidfile.avi

You can use whatever bitrate option you want. If you need to squeeze a DVD into a 700MB XviD file, you could use the following command, which forces the file size of the resulting AVI to 700MB.:

mencoder dvd:// -ovc xvid -oac mp3lame -xvidencopts bitrate=-700000 -o file.avi

If you don't like the CPU being used to the max and want to leave resources for launching other applications, use the nice option, which will run the program with the lowest priority when it comes to process scheduling:

nice -n 19 mencoder dvd:// -ovc xvid -oac mp3lame -xvidencopts bitrate=-700000 -o file.avi

Suppose you have a folder full of small video files of different types and would like to merge them into one big movie for easy watching. First, rename them so that they're in the order you want them to appear in the final video, then use:


mencoder * -o output.avi

If you want to add a particular audio file to a movie, use:


mencoder source.avi -o destination.avi -ovc copy -oac mp3lame -audiofile file.wav (for uncompressed files)

mencoder source.avi -o destination.avi -ovc copy -oac copy -audiofile file.mp3 (for compressed files)

To convert a video file to run on a device running iPodLinux, use:

mencoder -ovc raw -ofps 15 -oac pcm -vf scale=176:-2,expand=176:132,format=bgr16 input.file -o output.avi

This produces a RAW AVI file with uncompressed audio data and scales it so it fits the Nano's tiny screen perfectly.

I have a Pocket PC that I sometimes bring with me on business trips. I take a couple of movies I haven't seen in a while and convert them to fit on a 512MB SD card:


mencoder -oac mp3lame -lameopts mode=3:preset=24 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=384:keyint=250 -vop expand="320:240" -o outputfile.avi inputfile.avi

or


mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=200:abitrate=48 -vop scale=320:240 -oac copy -o output.avi

The difference here is that the latter command scales the file and the former fills the PDA's 320x240-pixel screen with the movie.

If you have a webcam and want to record the output, use:


mencoder tv:// -tv driver=v4l:device=/dev/video0:width=640:height=480:forceaudio -ovc lavc -oac lavc -lavcopts vcodec=mpeg4:acodec=mp3 -ffourcc divx -o test.avi

The command records anything output by /dev/video0 in 640x480 resolution, using DivX with MP3 audio as an output result.

As you can see, you can use mencoder to convert almost any type of video file in several ways. It works fast, it works well, and I wouldn't change it for any other application, be it GUI-friendly or not.

Kindest Regards to Kivilcim Hindistan - from whom I ripped some parts of this tutorial...

4 comments: