PDA

View Full Version : Handbrake CLI for batch encoding


Blue_MiSfit
14th November 2009, 15:28
Hey guys,

I'm building out a workflow for batch encoding on linux.

I'm quite interested in Handbrake - as it seems to be pretty good at automatically handling the various idiosyncrasies with DVDs - i.e. aspect ratios, deinterlacing / IVTC etc...

Basically, I'm trying to figure out something that can be easily scripted, ideally to the point where I can simply specify input (a VOB), output, resolution, and bitrate, and have the app automatically deinterlace / ivtc as necessary, resize to appropriate square pixel resolution, and then encode in 2 passes using x264 into an MP4 container with the first audio track in the VOB encoded to AAC.

I have a feeling this can be done with a single command, using Handbrake.

If not, could anyone else suggest something else? It would be quite simple to do this all via ffmpeg etc, but handling deinterlacing / IVTC / crop / resize properly seems like it would be tricky for a batch flow, without knowing correct settings ahead of time.

I'm not expecting perfect results, of course. I also don't plan on having really exotic sources - like field blended or other brutal standards conversions. Most of the content will be fairly recent independent films, and I'm guessing most will be NTSC DVDs with either soft pulldown, or vanilla 3:2.

Any input would be greatly appreciated :) Simplicity is THE operative word here.

Thanks in advance,
~MiSfit

froggy1
14th November 2009, 15:50
write a Bash script. This can be easily done

buzzqw
14th November 2009, 16:38
hadnbrake has already a good command line support

just use it.. nothing fancy, but quite usefull

[andres@lucillex ~][andres@lucillex ~]$ HandBrakeCLI --help
Syntax: HandBrakeCLI [options] -i <device> -o <file>

### General Handbrake Options------------------------------------------------

-h, --help Print help
-u, --update Check for updates and exit
-v, --verbose <#> Be verbose (optional argument: logging level)
-C, --cpu Set CPU count (default: autodetected)
-Z. --preset <string> Use a built-in preset. Capitalization matters, and if the preset name has spaces, surround it with double quotation marks
-z, --preset-list See a list of available built-in presets
--dvdnav Use dvdnav (Experimental)

### Source Options-----------------------------------------------------------

-i, --input <string> Set input device
-t, --title <number> Select a title to encode (0 to scan only, default: 1)
-L, --longest Select the longest title
-c, --chapters <string> Select chapters (e.g. "1-3" for chapters 1 to 3, or "3" for chapter 3 only, default: all chapters)
--angle <number> Select the DVD angle
--previews <#:B> Select how many preview images are generated (max 30), and whether or not they're stored to disk (0 or 1). (default: 10:0)
--start-at-preview <#> Start encoding at a given preview.
--stop-at <unit:#> Stop encoding at a given frame, duration (in seconds), or pts (on a 90kHz clock)
### Destination Options------------------------------------------------------

-o, --output <string> Set output file name
-f, --format <string> Set output format (mp4/mkv, default: autodetected from file name)
-m, --markers Add chapter markers (mp4 and mkv output formats only)
-4, --large-file Use 64-bit mp4 files that can hold more than 4 GB. Note: Breaks iPod, PS3 compatibility.
-O, --optimize Optimize mp4 files for HTTP streaming
-I, --ipod-atom Mark mp4 files so 5.5G iPods will accept them

### Video Options------------------------------------------------------------

-e, --encoder <string> Set video library encoder (ffmpeg,x264,theora) (default: ffmpeg)
-x, --x264opts <string> Specify advanced x264 options in the same style as mencoder:
option1=value1:option2=value2
-q, --quality <float> Set video quality (0.0..1.0)
-Q, --cqp Use with -q for CQP instead of CRF
-S, --size <MB> Set target size
-b, --vb <kb/s> Set video bitrate (default: 1000)
-2, --two-pass Use two-pass mode
-T, --turbo When using 2-pass use the turbo options on the first pass to improve speed
(only works with x264, affects PSNR by about 0.05dB, and increases first pass speed two to four times)
-r, --rate Set video framerate (5/10/12/15/23.976/24/25/29.97)
Be aware that not specifying a framerate lets HandBrake preserve a source's time stamps,
potentially creating variable framerate video
--vfr, --cfr, --pfr Select variable, constant or peak-limited frame rate control. VFR preserves the source timing. CFR makes the output constant rate at the rate given by the -r flag (or the source's
average rate if no -r is given). PFR doesn't allow the rate to go over the rate specified with the -r flag but won't change the source timing if it's below that rate. If none of these flags are given, the default is --cfr when -r is given and -vfr otherwise

### Audio Options-----------------------------------------------------------

-a, --audio <string> Select audio track(s), separated by commas More than one output track can be used for one
input. ("none" for no audio, "1,2,3" for multiple tracks, default: first one)
-E, --aencoder <string> Audio encoder(s) (faac/lame/vorbis/ac3/dts) ac3 and dts meaning passthrough Separated by commas for more than one audio track. (default: guessed)
-B, --ab <kb/s> Set audio bitrate(s) (default: 160) Separated by commas for more than one audio track.
-6, --mixdown <string> Format(s) for surround sound downmixing
Separated by commas for more than one audio track. (mono/stereo/dpl1/dpl2/6ch, default: dpl2)
-R, --arate Set audio samplerate(s) (22.05/24/32/44.1/48 kHz) Separated by commas for more than one audio track.
-D, --drc <float> Apply extra dynamic range compression to the audio, making soft sounds louder. Range is 1.0 to 4.0 (too loud), with 1.5 - 2.5 being a useful range. Separated by commas for more than one audio track.
-A, --aname <string> Audio track name(s), Separated by commas for more than one audio track.

### Picture Settings---------------------------------------------------------

-w, --width <number> Set picture width
-l, --height <number> Set picture height
--crop <T:B:L:R> Set cropping values (default: autocrop)
-Y, --maxHeight <#> Set maximum height
-X, --maxWidth <#> Set maximum width
--strict-anamorphic Store pixel aspect ratio in video stream
--loose-anamorphic Store pixel aspect ratio with specified width
--custom-anamorphic Store pixel aspect ratio in video stream and directly control all parameters.
--display-width Set the width to scale the actual pixels to
<number> at playback, for custom anamorphic.
--keep-display-aspect Preserve the source's display aspect ratio when using custom anamorphic
--pixel-aspect Set a custom pixel aspect for custom anamorphic <PARX:PARY>
(--display-width and --pixel-aspect are mutually exclusive and the former will override the latter)
--itu-par Use wider, ITU pixel aspect values for loose and custom anamorphic, useful with underscanned sources
--modulus Set the number you want the scaled pixel dimensions
<number> to divide cleanly by, for loose and custom anamorphic modes (default: 16)
-M --color-matrix Set the color space signaled by the output
<601 or 709> (Bt.601 is mostly for SD content, Bt.709 for HD,
default: set by resolution)

### Filters---------------------------------------------------------

-d, --deinterlace Deinterlace video with yadif/mcdeint filter
<YM:FD:MM:QP> (default 0:-1:-1:1)
or
<fast/slow/slower>
-5, --decomb Selectively deinterlaces when it detects combing
<MO:ME:MT:ST:BT:BX:BY> (default: 1:2:6:9:80:16:16)
-9, --detelecine Detelecine (ivtc) video with pullup filter
Note: this filter drops duplicate frames to
restore the pre-telecine framerate, unless you
specify a constant framerate (--rate 29.97)
<L:R:T:B:SB:MP> (default 1:1:4:4:0:0)
-8, --denoise Denoise video with hqdn3d filter
<SL:SC:TL:TC> (default 4:3:6:4.5)
or
<weak/medium/strong>
-7, --deblock Deblock video with pp7 filter
<QP:M> (default 5:2)
-g, --grayscale Grayscale encoding

### Subtitle Options------------------------------------------------------------

-s, --subtitle <string> Select subtitle track(s), separated by commas
More than one output track can be used for one
input.
("1,2,3" for multiple tracks.
A special track name "scan" adds an extra 1st pass.
This extra pass scans subtitles matching the
language of the first audio or the language
selected by --native-language.
The one that's only used 10 percent of the time
or less is selected. This should locate subtitles
for short foreign language segments. Best used in
conjunction with --subtitle-forced.
-F, --subtitle-forced Only display subtitles from the selected stream if
<string> the subtitle has the forced flag set. May be used in
conjunction with "scan" track to auto-select
a stream if it contains forced subtitles.
Separated by commas for more than one audio track.
("1,2,3" for multiple tracks.
If "string" is omitted, the first trac is forced.
--subtitle-burn "Burn" the selected subtitle into the video track
<number> If "number" is omitted, the first trac is burned.
--subtitle-default Flag the selected subtitle as the default subtitle
<number> to be displayed upon playback. Setting no default
means no subtitle will be automatically displayed
If "number" is omitted, the first trac is default.
-N, --native-language Specifiy the your language preference. When the first
<string> audio track does not match your native language then
select the first subtitle that does. When used in
conjunction with --native-dub the audio track is
changed in preference to subtitles. Provide the
language's iso639-2 code (fre, eng, spa, dut, et cetera)
--native-dub Used in conjunction with --native-language
requests that if no audio tracks are selected the
default selected audio track will be the first one
that matches the --native-language. If there are no
matching audio tracks then the first matching
subtitle track is used instead.
--srt-file <string> SubRip SRT filename(s), separated by commas.
--srt-codeset Character codeset(s) that the SRT file(s) are
<string> encoded in, separted by commas.
Use 'iconv -l' for a list of valid
codesets. If not specified latin1 is assumed
--srt-offset Offset in milli-seconds to apply to the SRT file(s)
<string> separted by commas. If not specified zero is assumed.
Offsets may be negative.
--srt-lang <string> Language as an iso639-2 code fra, eng, spa et cetera)
for the SRT file(s) separated by commas. If not specified
then 'und' is used.
--srt-default Flag the selected srt as the default subtitle
<number> to be displayed upon playback. Setting no default
means no subtitle will be automatically displayed
If "number" is omitted, the first srt is default.
"number" is an 1 based index into the srt-file list

txporter
16th November 2009, 16:05
Here is a profile that Tivo users of kmttg use for converting to x264 with HandbrakeCLI:
handbrakeCLI -i inputFile.mpg -f mp4 -p -e x264 -b 5000 -a 1 -E ac3 -x ref=3:mixed-refs=1:bframes=3:
b-pyramid=1:weightb=1:analyse=all:8x8dct=1:me=umh:subq=9:direct=auto:keyint=24:min-keyint=2:
no-fast-pskip=1:no-dct-decimate=1 -v -o outputFile.mp4

It is fairly easy to modify from there using the info that buzzqw posted above. For 2-pass change -b to -2. You can probably strip out the keyint/min-keyint, we use it to provide better seek performance on the Tivo.

buzzqw
16th November 2009, 16:27
one more thing:
all custom x264 parameters use the mencoder notation

BHH