Posted by admin on January 21, 2015 under Tech Tips |
Here’s a quick tip on using Mencoder profiles that serve as shortcuts for all of your favorite settings. This can save you a lot of time, especially when your encoding syntax is lengthy and difficult to remember.
Profiles are stored in the mencoder.conf
file located in the appropriate place for your operating system. For Linux users, you can create a personalized file in your own home directory, ~/.mplayer/mencoder.conf
.
Here’s the syntax you might use on a single-pass XviD project without using profiles.
mencoder -oac mp3lame -lameopts aq=0:q=0 -ovc xvid -xvidencopts
fixed_quant=2:max_key_interval=25:vhq=2:bvhq=1:chroma_opt:quant_type=mpeg
input.avi -o output.avi
Compare that with the following examples of some of my favorite profiles, and how easy it is to use them.
XviD Single-pass Profile Example
[xvid]
profile-desc="MPEG4/MP3 encoding"
ovc=xvid=1
xvidencopts=fixed_quant=2:max_key_interval=25:vhq=2:bvhq=1:chroma_opt=1:quant_type=mpeg
oac=mp3lame=1
lameopts=aq=0:q=0
mencoder -profile xvid input.avi -o output.avi
XviD 2-pass Profile Examples
[xvid-pass1]
profile-desc="MPEG4/MP3 encoding - PASS 1"
ovc=xvid=1
xvidencopts=pass=1:max_key_interval=25:turbo=1:vhq=0
nosound=1
o=/dev/null
passlogfile=xvid-pass1.log
[xvid-pass2]
profile-desc="MPEG4/MP3 encoding - PASS 2"
ovc=xvid=1
xvidencopts=pass=2:max_key_interval=25:vhq=2:bvhq=1:chroma_opt=1:quant_type=mpeg:bitrate=2000
oac=mp3lame=1
lameopts=aq=0:q=0
passlogfile=xvid-pass1.log
mencoder -profile xvid-pass1 input.avi
mencoder -profile xvid-pass2 input.avi -o output.avi
x264 2-pass Profile Examples
[x264-pass1]
profile-desc="x264 encoding - PASS 1"
ovc=x264=1
x264encopts=pass=1:threads=0:subq=1:frameref=1:bframes=3:b_pyramid=normal:weight_b=1:keyint=25
nosound=1
o=/dev/null
passlogfile=x264-pass1.log
[x264-pass2]
profile-desc="x264 encoding - PASS 2"
ovc=x264=1
x264encopts=pass=2:threads=0:subq=6:frameref=5:partitions=all:8x8dct=1:me=umh:bframes=3:b_pyramid=normal:weight_b=1:keyint=25:bitrate=2000
oac=mp3lame=1
lameopts=aq=0:q=0
passlogfile=x264-pass1.log
mencoder -profile x264-pass1 input.avi
mencoder -profile x264-pass2 input.avi -o output.avi
x264 Single-pass Profile Example
[x264]
profile-desc="x264 encoding"
ovc=x264=1
x264encopts=crf=20:threads=0:subq=6:frameref=5:partitions=all:8x8dct=1:me=umh:bframes=3:b_pyramid=normal:weight_b=1:keyint=25
aspect=16/9
oac=mp3lame=1
lameopts=aq=0:q=0
mencoder -profile x264 input.avi -o output.avi
Posted by admin on February 21, 2013 under Tech Tips |
If you have a source video file encoded with an AC3 Dolby Digital audio stream, you can extract the audio in it’s native format using FFMpeg.
The following example shows how to identify the available audio streams of the file video.avi
. Just use ffmpeg without any output options, and you can see there are two streams (0.0 and 0.1), the second is AC3 audio.
ffmpeg -i video.avi
Input #0, avi, from 'video.avi':
Duration: 01:17:57.64, start: 0.000000, bitrate: 1587 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 672x576 (snipped for brevity)
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
At least one output file must be specified
The following command will extract the AC3 audio stream to a file called audio.ac3
.
ffmpeg -i video.avi -acodec copy audio.ac3
Input #0, avi, from 'video.avi':
Duration: 01:17:57.64, start: 0.000000, bitrate: 1587 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 672x576 (snipped for brevity)
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
Output #0, ac3, to 'audio.ac3':
Stream #0.0: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
Stream mapping:
Stream #0.1 -> #0.0
Press [q] to stop encoding
size= 255799kB time=4677.51 bitrate= 448.0kbits/s
video:0kB audio:255799kB global headers:0kB muxing overhead 0.000000%
Verify the file was created. The output below shows that this stream is about 250Mb.
ls -lh audio.ac3
-rw-r--r-- 1 username gmendoza 250M 2010-02-21 09:47 audio.ac3
You can now use ffmpeg again to show that audio.ac3
only contains the ac3 audio stream.
ffmpeg -i audio.ac3
Input #0, ac3, from 'audio.ac3':
Duration: 01:17:57.46, bitrate: 448 kb/s
Stream #0.0: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
At least one output file must be specified
Now that you have extracted the audio stream, you can do anything you wish with it. Enjoy.
Posted by admin on September 19, 2012 under Tech Tips |
If you would like to copy a DVD to an XviD video file using Linux, doing so from the command line offers a number of flexibility benefits over many graphical tools. Two fantastic tools for the job are lsdvd
and mencoder
. I like lsdvd
because it provides a great deal of information in an easy to read format, and mencoder
is just a phenomenal tool for multimedia encoding.
There are some pre-requisite applications you need in order to follow along. Be sure to install mplayer
, mencoder
, lsdvd
, lame
, and if your DVD’s are encrypted, the libdvdcss2
libraries. If using Ubuntu, Debian, etc, then all are available in the repositories, except libdvdcss2
which is available in the Medibuntu repositories.
Quick XviD Encoding Examples (For the Impatient)
In the following examples, we’ll use mencoder
with the most basic of options, allowing mencoder
to decide which video and audio streams to use. Mencoder’s choice may not be what you want, and the audio will also be converted to a high quality VBR stereo MP3. Adjust any settings as you see fit.
Single-Pass Encoding
Fixed Quantizer Value of 4 (Good quality, decent file size)
mencoder dvd:// -oac mp3lame -lameopts q=0:aq=0
-ovc xvid -xvidencopts fixed_quant=4:autoaspect -o video.avi
Fixed Quantizer Value of 2 (High quality, larger file size)
mencoder dvd:// -oac mp3lame -lameopts q=0:aq=0
-ovc xvid -xvidencopts fixed_quant=2:autoaspect -o video.avi
Two Pass Encoding
Pass 1: (no need for audio or quality settings such as bitrate)
mencoder dvd:// -nosound -passlogfile pass1.log
-ovc xvid -xvidencopts pass=1:turbo:autoaspect -o /dev/null
Pass 2 Option 1: (VBR ~ 1500 kbps)
mencoder dvd:// -oac mp3lame -lameopts q=0:aq=0 -passlogfile pass1.log
-ovc xvid -xvidencopts pass=2:autoaspect:bitrate=1500 -o video.avi
Pass 2 Option 2: (VBR ~ Restrict final video size to 1.5 Gb)
mencoder dvd:// -oac mp3lame -lameopts q=0:aq=0 -passlogfile pass1.log
-ovc xvid -xvidencopts pass=2:autoaspect:bitrate=-1500000 -o video.avi
Basic Source Selection Examples
If you are copying a DVD directly from a physical disc as the examples throughout this post will assume, the following two examples will work. The first automatically selects title 1, and the second specifies title 2.
mencoder dvd:// (other options)
mencoder dvd://2 (other options)
If you’re encoding a DVD from an ISO or similar image file, or have the contents of a DVD extracted to directory, use the -dvd-device
option as shown below.
mencoder dvd:// -dvd-device video.iso (other options)
mencoder dvd:// -dvd-device /path/to/dvd_directory/ (other options)
Basic Audio Examples
To encode the selected audio stream to a high quality VBR stereo MP3 format.
mencoder dvd:// -oac mp3lame -lameopts q=0:aq=0 (other options)
If the source audio stream is encoded as AC3 or DTS 5.1 (6 Channels), you can simply copy the stream, but remember to specify 6 channels. The default is 2.
mencoder dvd:// -oac copy -channels 6 (other options)
To exclude all sound, which is useful for the first pass of a two-pass job, or if you prefer to multiplex the audio later, use the -nosound
option.
mencoder dvd:// -nosound (other options)
Gathering Source Video Information for Informed Encoding Decisions
First you should identify which DVD title tracks are available, so you can determine which one you want to copy. Most DVDs will place the movie as the first track, but you may not always be that lucky. You can use lsdvd to list the number of titles, chapters, and audio tracks on your DVD.
lsdvd /dev/dvd
Disc Title: DVD_TITLE
Title: 01, Length: 01:26:08.200 Chapters: 13, Cells: 13, Audio streams: 02, Subpictures: 01
Title: 02, Length: 00:02:01.120 Chapters: 01, Cells: 01, Audio streams: 02, Subpictures: 01
Title: 03, Length: 00:02:26.120 Chapters: 01, Cells: 01, Audio streams: 02, Subpictures: 01
Longest track: 01
In the example above, we found that Title 01 is the longest at 1 hour 26 minutes, has 13 chapters and 2 audio streams.
Use lsdvd
again to gather additional information about video properties of this specific title.
lsdvd -v -t 1 /dev/dvd
Disc Title: DVD_TITLE
Title: 01, Length: 01:26:08.200 Chapters: 13, Cells: 13, Audio streams: 02, Subpictures: 01
VTS: 01, TTN: 01, FPS: 25.00, Format: PAL, Aspect ratio: 4/3, Width: 720, Height: 576, DF: ?
From the output above, we see that this video is in the PAL format at 25.00 frames per second and an aspect ratio of 4/3. Use mplayer to play this title and verify it’s the one you want.
mplayer dvd://1
Gathering Source Audio Information
Use lsdvd to give you more detail on the available audio streams for the title you’re working on.
lsdvd -a -t 1 /dev/dvd
Disc Title: DVD_TITLE
Title: 01, Length: 01:26:08.200 Chapters: 13, Cells: 13, Audio streams: 02, Subpictures: 01
Audio: 1, Language: nl - Nederlands, Format: ac3, Frequency: 48000, Quantization: drc, Channels: 2, AP: 0, Content: Undefined, Stream id: 0x80
Audio: 2, Language: en - English, Format: ac3, Frequency: 48000, Quantization: drc, Channels: 2, AP: 0, Content: Undefined, Stream id: 0x81
The output above shows that there are two audio streams, both AC3 Dolby Digital, however only the second one is in English. Mencoder and mplayer allow you to specify your desired audio stream by language as shown in the following example.
mencoder dvd://1 -alang eng (other options)
If your source has multiple English streams, you can specify which particular audio ID (aid) you want. Mplayer can be used to display all available audio identifiers of a DVD. The following command is a little long but it should serve you well.
mplayer dvd://1 -identify -frames 0 -vo null 2>&1 | grep aid
audio stream: 0 format: ac3 (stereo) language: nl aid: 128.
audio stream: 1 format: ac3 (stereo) language: en aid: 129.
From the output above, the English AC3 audio stream we want is identified by aid 129. It can be specified when using mplayer and mencoder as shown below.
mencoder dvd://1 -aid 129 (other options)
Advanced Single-Pass XviD Encoding
As mentioned before, you can encode your video using a single-pass fixed quantizer mode. It may not be as efficient in size and quality as opposed to a two-pass method, but it can save some time and complexity. Here’s the more advanced encoding options I tend to use for virtually all of my XviD encoding jobs, coupled with the information we gathered from above. A fixed_quant
value between 2 and 4 work very well. The lower the number the higher the quality and larger the resulting file size.
mencoder dvd://1 -alang eng -oac mp3lame -lameopts q=0:aq=0
-ovc xvid -xvidencopts fixed_quant=4:autoaspect:max_key_interval=25:
vhq=2:bvhq=1:trellis:hq_ac:chroma_me:chroma_opt:quant_type=mpeg
-o video.avi
I added a number of quality settings as discussed both in the mencoder
man page and this useful link here.
One option that seems to lack a lot of documentation is the max_key_interval
setting. It influences the seekability of the encoded video. By default, the max_key_interval
is set to a value of 250, which adds an I-frame at a maximum interval of 250 frames. This equates to approximately every 10 seconds depending on the frame rate of your source video. I like to set the value to 25 which is pretty low and results in a slightly larger file, but provides a seek accuracy of about 1 second. That’s just my preference, so feel free to change it as you wish.
Advanced Two-Pass XviD Encoding
Using the same advanced XviD encoding options as above, here’s what a two pass encoding job would look like.
mencoder dvd:// -nosound -passlogfile pass1.log
-ovc xvid -xvidencopts pass=1:turbo:autoaspect:vhq=0:max_key_interval=25
-o /dev/null
mencoder dvd:// -oac mp3lame -lameopts q=0:aq=0 -passlogfile pass1.log
-ovc xvid -xvidencopts pass=2:autoaspect:max_key_interval=25:bitrate=1500:
vhq=2:bvhq=1:trellis:hq_ac:chroma_me:chroma_opt:quant_type=mpeg -o video.avi
Cropping Black Borders
If your video source has black borders, you can crop them out to reduce the overall size of your video. For example, you video may resemble the following diagram.
Video with black borders
These borders can be cropped with a video filter -vf crop=w:h:x:y
where w, h, x and y are the width, height, x and y coordinates. To help determine which crop values are appropriate, first play your video with mplayer
using the -vf cropdetect
option, and seek through the movie to bright points of the movie where the black borders are clearly visible. Dark opening scenes may give you inaccurate edge readings.
mencoder dvd:// -vf cropdetect
(snipped for brevity)
[CROP] Crop area: X: 6..711 Y: 0..575 (-vf crop=704:576:8:0).0 0
[CROP] Crop area: X: 6..711 Y: 0..575 (-vf crop=704:576:8:0).0 0
[CROP] Crop area: X: 6..711 Y: 0..575 (-vf crop=704:576:8:0).0 0
[CROP] Crop area: X: 6..711 Y: 0..575 (-vf crop=704:576:8:0).0 0
[CROP] Crop area: X: 6..711 Y: 0..575 (-vf crop=704:576:8:0).0 0
Copy the values that mplayer
displays in the background terminal as the example above shows and use them like the following.
mencoder dvd:// -vf crop=704:576:8:0 (other options)
Conclusion
I hope this post provides you with detail that helps you with your DVD encoding endeavors. Please feel free to post your comments, questions and tips. If needed, I’ll adjust the post to include your valuable input!
Posted by admin on December 15, 2009 under Tech Tips |
Previously, I described how to Extract Audio from Video Files to WAV using Mplayer. Another method using FFmpeg instead of Mplayer was also pointed out in the post titled Add Stereo Audio Tracks to MKV Files, and I figured it would be useful to outline the quick one-step process in a post all by itself.
Here’s an example of extracting the audio from a video file called video.mkv
and saving it to a file called audio.wav
. This very well could have been an AVI, MPEG, or any other video format that FFmpeg can decode.
ffmpeg -i video.mkv -acodec pcm_s16le -ac 2 audio.wav
It should also be mentioned that your source video file may have multiple audio channels or streams. For example, you may have both English AC3 and DTS channels, but you may also have other audio streams for other languages, directors comments, etc. If you want more control over which stream you are using, first identify them all with ffmpeg.
ffmpeg -i video.mkv
[snipped for brevity]
Input #0, matroska, from 'video.mkv':
Duration: 01:30:38.78, start: 0.000000, bitrate: N/A
Stream #0.0(eng): Video: h264, yuv420p, 1280x720, PAR 1:1 DAR 16:9, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, s16
Stream #0.2(eng): Subtitle: 0x0000
Stream #0.3(heb): Audio: mp3, 48000 Hz, stereo, s16
Stream #0.4(heb): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000
At least one output file must be specified
From the example above, you see that Stream #0.0 is labeled as being an English video stream with h264 encoding. Stream #0.1 and #0.3 are both audio streams, but #0.1 is English AC3 5.1 and #0.3 is Hebrew MP3 stereo. Simply reference the stream id with the -map option in the following format.
ffmpeg -i video.mkv -map 0:1 -acodec pcm_s16le -ac 2 audio.wav
[snipped for brevity]
Output #0, wav, to 'audio.wav':
Stream #0.0(eng): Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Stream mapping:
Stream #0.1 -> #0.0
[snipped for brevity]
Now that you have a PCM WAV file, you can manipulated it however you like, e.g. encode to MP3, OGG, FLAC, etc.
lame -V0 -q0 --vbr-new audio.wav audio.mp3
oggenc -q6 audio.wav
flac audio.wav
Posted by admin on December 2, 2007 under Tech Tips |
If you have a number of audio files that you would like to convert to mp3, but don’t want to hassle with graphical applications, there is a simple way to accomplish the task using Linux, LAME and a little shell scripting. By performing a basic “for loop” to invoke LAME, you can easily convert any group of audio files using one line of shell code.
Here is an example of a “for loop” that runs the command “lame” against a set of files in your current working directory with the .wav file extension.
$ for f in *.wav ; do lame $f ; done
If your audio file names have spaces in them, then you will need to use quotation marks around “$f” variable.
$ for f in *.wav ; do lame "$f" ; done
I typically create my original audio files without the file name extension of .wav or .au. This is because when you run lame against a file name, and do not omit the extension in the output option, the resulting file will have two extensions in the file name. e.g. filename.wav.mp3. Yes, I can use sed or basename in the for loop to prevent this, but to keep it simple, I just choose to not use the file extension to begin with.
If you are working with a group of files that have all been named using the convention of “Artist – Album – ## – Track Title”, (notice the spaces in the name), the following will work.
$ for f in Artist - Album* ; do lame "$f" ; done
Once the job is finished, you will be left with a directory full of your original audio files, and your newly created mp3’s.
Extra Credit
Okay, since we’re on the topic of shell scripting. If you want to delete all the original audio files (the ones without any file name extensions), and without first moving the new mp3’s to a different directory, one overly complicated example would be the following.
for f in *.mp3 ; do AUFILE=`basename "$f" .mp3` ; rm "$AUFILE"; done
This would have been easier if the original files could have been identified with .wav extensions, (rm *.wav), but since they had no file extensions to begin with, a wild card alone would not work. Now folks, this is just an example, and there’s a million other ways you can go about this. But in any case, I hope it helps you start exploring on your own!