]> git.phdru.name Git - audio-cdr-video.git/blob - video/ff_encode
Pass crop filter
[audio-cdr-video.git] / video / ff_encode
1 #! /bin/sh
2
3 if [ -z "$1" ]; then
4    echo "Usage: [vcodec=s] [vbitrate=n] [vscale=s] [acodec=s] [abitrate=n] [ascale=s] [pass=n] [input_opts=input_opts] [output_opts=output_opts] [output=output.avi] [crop=w:h:x:y] $0 input1 [input2...]"
5    exit 1
6 fi
7
8 if [ -z "$vcodec" ]; then
9    vcodec=mpeg4
10 fi
11
12 if [ -z "$vbitrate" ]; then
13    vbitrate=1600k
14 fi
15
16 if [ -n "$vscale" ]; then
17    vscale="-s $vscale"
18 fi
19
20 if [ -z "$acodec" ]; then
21    acodec=libmp3lame
22 fi
23
24 if [ -z "$abitrate" ]; then
25    abitrate=256k
26 fi
27
28 if [ -z "$pass" ]; then
29    pass=1
30 fi
31
32 if [ -n "$crop" ]; then
33    crop="-vf crop=$crop"
34 fi
35
36 if [ $# -eq 1 ]; then
37    input="$1"
38 else
39    input=concat:"`echo \"$@\" | sed 's/ /|/g'`"
40 fi
41
42 if [ -z "$output" ]; then
43    output=output.avi
44 fi
45
46 if [ "$vcodec" = mpeg4 ]; then
47    vopts="-g 300 -bf 2"
48
49 elif [ "$vcodec" = mpeg4-hq ]; then
50    vcodec=mpeg4
51    vopts="-g 300 -bf 2 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2"
52
53 elif [ "$vcodec" = mpeg4-vhq ]; then
54    vcodec=mpeg4
55    vopts="-g 200 -bf 2 -mbd rd -flags +mv4+aic+qprd+mv0 -flags2 skiprd -trellis 2 -cmp 2 -subcmp 2"
56
57 elif [ "$vcodec" = x264 ]; then
58    vcodec=libx264
59
60 elif [ "$vcodec" = x264-hq ]; then
61    vcodec=libx264
62    vopts="-preset slow"
63
64 elif [ "$vcodec" = x264-vhq ]; then
65    vcodec=libx264
66    vopts="-preset veryslow"
67
68 else
69    echo "Unknown video codec $vcodec; known codecs are {mpeg4,x264}[-[v]hq], copy" >&2
70    exit 1
71 fi
72
73 if [ "$pass" -eq 1 ]; then
74    exec ffmpeg -threads auto $input_opts -i "$input" -c:v "$vcodec" $vopts $vscale -b:v "$vbitrate" -c:a "$acodec" -b:a "$abitrate" $output_opts $crop "$output"
75
76 elif [ "$pass" -eq 2 ]; then
77    ffmpeg -pass 1 -threads auto $input_opts -i "$input" -c:v "$vcodec" $vopts $vscale -b:v "$vbitrate" -an -f rawvideo -y /dev/null $output_opts $crop &&
78    exec ffmpeg -pass 2 -threads auto $input_opts -i "$input" -c:v "$vcodec" $vopts $vscale -b:v "$vbitrate" -c:a "$acodec" -b:a "$abitrate" $output_opts $crop "$output"
79
80 else
81    echo "Can only do 1 or 2 passes." >&2
82    exit 1
83 fi