ffmpeg 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. data/.gitignore +4 -0
  2. data/LICENSE +20 -0
  3. data/README.textile +45 -0
  4. data/Rakefile +45 -0
  5. data/VERSION.yml +5 -0
  6. data/features/ffmpeg.feature +9 -0
  7. data/features/steps/ffmpeg_steps.rb +0 -0
  8. data/features/support/env.rb +11 -0
  9. data/ffmpeg.gemspec +86 -0
  10. data/lib/ffmpeg.rb +121 -0
  11. data/lib/ffmpeg/audio_options.rb +47 -0
  12. data/lib/ffmpeg/class_methods.rb +18 -0
  13. data/lib/ffmpeg/ffmpeg_command.rb +25 -0
  14. data/lib/ffmpeg/file_extensions.rb +150 -0
  15. data/lib/ffmpeg/helper_methods.rb +8 -0
  16. data/lib/ffmpeg/main_options.rb +165 -0
  17. data/lib/ffmpeg/meta_data.rb +22 -0
  18. data/lib/ffmpeg/video_advanced_options.rb +275 -0
  19. data/lib/ffmpeg/video_options.rb +197 -0
  20. data/rdoc/classes/FFMpeg.html +250 -0
  21. data/rdoc/classes/FFMpeg.src/M000005.html +27 -0
  22. data/rdoc/classes/FFMpeg.src/M000006.html +29 -0
  23. data/rdoc/classes/FFMpeg.src/M000007.html +18 -0
  24. data/rdoc/classes/FFMpeg.src/M000008.html +24 -0
  25. data/rdoc/classes/FFMpeg/AudioOptions.html +269 -0
  26. data/rdoc/classes/FFMpeg/AudioOptions.src/M000093.html +18 -0
  27. data/rdoc/classes/FFMpeg/AudioOptions.src/M000094.html +18 -0
  28. data/rdoc/classes/FFMpeg/AudioOptions.src/M000095.html +18 -0
  29. data/rdoc/classes/FFMpeg/AudioOptions.src/M000096.html +18 -0
  30. data/rdoc/classes/FFMpeg/AudioOptions.src/M000097.html +18 -0
  31. data/rdoc/classes/FFMpeg/AudioOptions.src/M000098.html +18 -0
  32. data/rdoc/classes/FFMpeg/AudioOptions.src/M000099.html +18 -0
  33. data/rdoc/classes/FFMpeg/AudioOptions.src/M000100.html +18 -0
  34. data/rdoc/classes/FFMpeg/ClassMethods.html +131 -0
  35. data/rdoc/classes/FFMpeg/ClassMethods.src/M000049.html +18 -0
  36. data/rdoc/classes/FFMpeg/HelperMethods.html +131 -0
  37. data/rdoc/classes/FFMpeg/HelperMethods.src/M000074.html +19 -0
  38. data/rdoc/classes/FFMpeg/MainOptions.html +494 -0
  39. data/rdoc/classes/FFMpeg/MainOptions.src/M000075.html +18 -0
  40. data/rdoc/classes/FFMpeg/MainOptions.src/M000076.html +18 -0
  41. data/rdoc/classes/FFMpeg/MainOptions.src/M000077.html +18 -0
  42. data/rdoc/classes/FFMpeg/MainOptions.src/M000078.html +18 -0
  43. data/rdoc/classes/FFMpeg/MainOptions.src/M000079.html +18 -0
  44. data/rdoc/classes/FFMpeg/MainOptions.src/M000080.html +18 -0
  45. data/rdoc/classes/FFMpeg/MainOptions.src/M000081.html +18 -0
  46. data/rdoc/classes/FFMpeg/MainOptions.src/M000082.html +18 -0
  47. data/rdoc/classes/FFMpeg/MainOptions.src/M000083.html +18 -0
  48. data/rdoc/classes/FFMpeg/MainOptions.src/M000084.html +18 -0
  49. data/rdoc/classes/FFMpeg/MainOptions.src/M000085.html +18 -0
  50. data/rdoc/classes/FFMpeg/MainOptions.src/M000086.html +18 -0
  51. data/rdoc/classes/FFMpeg/MainOptions.src/M000087.html +18 -0
  52. data/rdoc/classes/FFMpeg/MainOptions.src/M000088.html +18 -0
  53. data/rdoc/classes/FFMpeg/MainOptions.src/M000089.html +18 -0
  54. data/rdoc/classes/FFMpeg/MainOptions.src/M000090.html +18 -0
  55. data/rdoc/classes/FFMpeg/MainOptions.src/M000091.html +18 -0
  56. data/rdoc/classes/FFMpeg/MetaData.html +151 -0
  57. data/rdoc/classes/FFMpeg/MetaData.src/M000092.html +24 -0
  58. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.html +924 -0
  59. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000009.html +18 -0
  60. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000010.html +18 -0
  61. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000011.html +18 -0
  62. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000012.html +18 -0
  63. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000013.html +18 -0
  64. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000014.html +18 -0
  65. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000015.html +18 -0
  66. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000016.html +18 -0
  67. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000017.html +18 -0
  68. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000018.html +18 -0
  69. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000019.html +18 -0
  70. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000020.html +18 -0
  71. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000021.html +18 -0
  72. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000022.html +18 -0
  73. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000023.html +18 -0
  74. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000024.html +18 -0
  75. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000025.html +18 -0
  76. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000026.html +18 -0
  77. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000027.html +18 -0
  78. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000028.html +18 -0
  79. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000029.html +18 -0
  80. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000030.html +18 -0
  81. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000031.html +18 -0
  82. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000032.html +18 -0
  83. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000033.html +18 -0
  84. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000034.html +18 -0
  85. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000035.html +18 -0
  86. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000036.html +18 -0
  87. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000037.html +18 -0
  88. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000038.html +18 -0
  89. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000039.html +18 -0
  90. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000040.html +18 -0
  91. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000041.html +18 -0
  92. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000042.html +18 -0
  93. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000043.html +18 -0
  94. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000044.html +18 -0
  95. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000045.html +18 -0
  96. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000046.html +22 -0
  97. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000047.html +18 -0
  98. data/rdoc/classes/FFMpeg/VideoAdvancedOptions.src/M000048.html +18 -0
  99. data/rdoc/classes/FFMpeg/VideoOptions.html +630 -0
  100. data/rdoc/classes/FFMpeg/VideoOptions.src/M000050.html +18 -0
  101. data/rdoc/classes/FFMpeg/VideoOptions.src/M000051.html +18 -0
  102. data/rdoc/classes/FFMpeg/VideoOptions.src/M000052.html +18 -0
  103. data/rdoc/classes/FFMpeg/VideoOptions.src/M000053.html +18 -0
  104. data/rdoc/classes/FFMpeg/VideoOptions.src/M000054.html +18 -0
  105. data/rdoc/classes/FFMpeg/VideoOptions.src/M000055.html +18 -0
  106. data/rdoc/classes/FFMpeg/VideoOptions.src/M000056.html +18 -0
  107. data/rdoc/classes/FFMpeg/VideoOptions.src/M000057.html +18 -0
  108. data/rdoc/classes/FFMpeg/VideoOptions.src/M000058.html +18 -0
  109. data/rdoc/classes/FFMpeg/VideoOptions.src/M000059.html +18 -0
  110. data/rdoc/classes/FFMpeg/VideoOptions.src/M000060.html +18 -0
  111. data/rdoc/classes/FFMpeg/VideoOptions.src/M000061.html +18 -0
  112. data/rdoc/classes/FFMpeg/VideoOptions.src/M000062.html +18 -0
  113. data/rdoc/classes/FFMpeg/VideoOptions.src/M000063.html +18 -0
  114. data/rdoc/classes/FFMpeg/VideoOptions.src/M000064.html +18 -0
  115. data/rdoc/classes/FFMpeg/VideoOptions.src/M000065.html +18 -0
  116. data/rdoc/classes/FFMpeg/VideoOptions.src/M000066.html +18 -0
  117. data/rdoc/classes/FFMpeg/VideoOptions.src/M000067.html +18 -0
  118. data/rdoc/classes/FFMpeg/VideoOptions.src/M000068.html +18 -0
  119. data/rdoc/classes/FFMpeg/VideoOptions.src/M000069.html +18 -0
  120. data/rdoc/classes/FFMpeg/VideoOptions.src/M000070.html +18 -0
  121. data/rdoc/classes/FFMpeg/VideoOptions.src/M000071.html +18 -0
  122. data/rdoc/classes/FFMpeg/VideoOptions.src/M000072.html +18 -0
  123. data/rdoc/classes/FFMpeg/VideoOptions.src/M000073.html +18 -0
  124. data/rdoc/classes/FFMpegCommand.html +176 -0
  125. data/rdoc/classes/FFMpegCommand.src/M000001.html +18 -0
  126. data/rdoc/classes/FFMpegCommand.src/M000002.html +18 -0
  127. data/rdoc/classes/FFMpegCommand.src/M000003.html +18 -0
  128. data/rdoc/classes/FFMpegCommand.src/M000004.html +22 -0
  129. data/rdoc/classes/FileExtensions.html +118 -0
  130. data/rdoc/created.rid +1 -0
  131. data/rdoc/files/README_textile.html +171 -0
  132. data/rdoc/files/lib/ffmpeg/audio_options_rb.html +101 -0
  133. data/rdoc/files/lib/ffmpeg/class_methods_rb.html +101 -0
  134. data/rdoc/files/lib/ffmpeg/ffmpeg_command_rb.html +101 -0
  135. data/rdoc/files/lib/ffmpeg/file_extensions_rb.html +101 -0
  136. data/rdoc/files/lib/ffmpeg/helper_methods_rb.html +101 -0
  137. data/rdoc/files/lib/ffmpeg/main_options_rb.html +101 -0
  138. data/rdoc/files/lib/ffmpeg/meta_data_rb.html +101 -0
  139. data/rdoc/files/lib/ffmpeg/video_advanced_options_rb.html +101 -0
  140. data/rdoc/files/lib/ffmpeg/video_options_rb.html +101 -0
  141. data/rdoc/files/lib/ffmpeg_rb.html +116 -0
  142. data/rdoc/fr_class_index.html +36 -0
  143. data/rdoc/fr_file_index.html +36 -0
  144. data/rdoc/fr_method_index.html +126 -0
  145. data/rdoc/index.html +24 -0
  146. data/rdoc/rdoc-style.css +208 -0
  147. data/spec/audio_options_spec.rb +72 -0
  148. data/spec/ffmpeg_spec.rb +161 -0
  149. data/spec/files/terminal.mpg +0 -0
  150. data/spec/meta_spec.rb +15 -0
  151. data/spec/spec_helper.rb +11 -0
  152. data/spec/video_advanced_options_spec.rb +349 -0
  153. data/spec/video_options_spec.rb +200 -0
  154. metadata +213 -0
@@ -0,0 +1,150 @@
1
+ module FileExtensions
2
+ EXT = [
3
+ "3g2",
4
+ "3gp",
5
+ "4xm",
6
+ "IFF",
7
+ "ISS",
8
+ "MTV",
9
+ "RoQ",
10
+ "aac",
11
+ "ac3",
12
+ "adts",
13
+ "aiff",
14
+ "alaw",
15
+ "amr",
16
+ "apc",
17
+ "ape",
18
+ "asf",
19
+ "asf_stream",
20
+ "ass",
21
+ "au",
22
+ "avi",
23
+ "avm2",
24
+ "avs",
25
+ "bethsoftvid",
26
+ "bfi",
27
+ "c93",
28
+ "cavsvideo",
29
+ "crc",
30
+ "daud",
31
+ "dirac",
32
+ "dnxhd",
33
+ "dsicin",
34
+ "dts",
35
+ "dv",
36
+ "dvd",
37
+ "dxa",
38
+ "ea",
39
+ "ea_cdata",
40
+ "eac3",
41
+ "f32be",
42
+ "f32le",
43
+ "f64be",
44
+ "f64le",
45
+ "ffm",
46
+ "film_cpk",
47
+ "flac",
48
+ "flic",
49
+ "flv",
50
+ "framecrc",
51
+ "gif",
52
+ "gsm",
53
+ "gxf",
54
+ "h261",
55
+ "h263",
56
+ "h264",
57
+ "idcin",
58
+ "image2",
59
+ "image2pipe",
60
+ "ingenient",
61
+ "ipmovie",
62
+ "ipod",
63
+ "lmlm4",
64
+ "m4v",
65
+ "matroska",
66
+ "mjpeg",
67
+ "mlp",
68
+ "mm",
69
+ "mmf",
70
+ "mov",
71
+ "mov",
72
+ "mp4",
73
+ "m4a",
74
+ "3gp",
75
+ "mp2",
76
+ "mp3",
77
+ "mp4",
78
+ "mpc",
79
+ "mpc",
80
+ "mpeg",
81
+ "mpeg1video",
82
+ "mpeg2video",
83
+ "mpegts",
84
+ "mpegtsraw",
85
+ "mpegvideo",
86
+ "mpjpeg",
87
+ "msnwctcp",
88
+ "mulaw",
89
+ "mvi",
90
+ "mxf",
91
+ "mxf_d10",
92
+ "nc",
93
+ "nsv",
94
+ "null",
95
+ "nut",
96
+ "nuv",
97
+ "ogg",
98
+ "oma",
99
+ "psp",
100
+ "psxstr",
101
+ "pva",
102
+ "r3d",
103
+ "rawvideo",
104
+ "rcv",
105
+ "redir",
106
+ "rl2",
107
+ "rm",
108
+ "rpl",
109
+ "rtp",
110
+ "rtsp",
111
+ "s16be",
112
+ "s16le",
113
+ "s24be",
114
+ "s24le",
115
+ "s32be",
116
+ "s32le",
117
+ "s8",
118
+ "sdp",
119
+ "shn",
120
+ "siff",
121
+ "smk",
122
+ "sol",
123
+ "svcd",
124
+ "swf",
125
+ "thp",
126
+ "tiertexseq",
127
+ "tta",
128
+ "txd",
129
+ "u16be",
130
+ "u16le",
131
+ "u24be",
132
+ "u24le",
133
+ "u32be",
134
+ "u32le",
135
+ "u8",
136
+ "vc1",
137
+ "vc1test",
138
+ "vcd",
139
+ "vmd",
140
+ "vob",
141
+ "voc",
142
+ "wav",
143
+ "wc3movie",
144
+ "wsaud",
145
+ "wsvqa",
146
+ "wv",
147
+ "xa",
148
+ "yuv4mpegpipe"
149
+ ]
150
+ end
@@ -0,0 +1,8 @@
1
+ module FFMpeg
2
+ module HelperMethods
3
+ def returning(value)
4
+ yield value
5
+ return value
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,165 @@
1
+ module FFMpeg
2
+ module MainOptions
3
+
4
+ def source(*filename)
5
+ FFMpegCommand << "-i #{filename}"
6
+ end
7
+
8
+ def target(target)
9
+ FFMpegCommand << "#{target}"
10
+ end
11
+
12
+ #
13
+ # Overwrite output file if it already exists
14
+ #
15
+ def overwrite_existing_file
16
+ FFMpegCommand.add_at("-y", 0)
17
+ end
18
+
19
+ #
20
+ # Set the duration specified in seconds.
21
+ # hh:mm:ss[.xxx] syntax is also supported
22
+ #
23
+ # duration "600"
24
+ #
25
+ # or
26
+ #
27
+ # duration "00:10:00"
28
+ #
29
+ def duration(duration)
30
+ FFMpegCommand << "-t #{duration}"
31
+ end
32
+
33
+ #
34
+ # Set a file size limit in bytes
35
+ #
36
+ # file_size_limit 104_857_600
37
+ #
38
+ def file_size_limit(limit)
39
+ FFMpegCommand << "-fs #{limit.to_s}"
40
+ end
41
+
42
+ #
43
+ # Seek to given time position in seconds.
44
+ # hh:mm:ss[.xxx] syntax is also supported.
45
+ #
46
+ # seek "600"
47
+ #
48
+ # or
49
+ #
50
+ # seek "00:10:00"
51
+ #
52
+ def seek(position)
53
+ FFMpegCommand << "-ss #{position}"
54
+ end
55
+
56
+ #
57
+ # Set the input time offset in seconds.
58
+ # [-]hh:mm:ss[.xxx] syntax is also supported.
59
+ # This option affects all the input files that follow it.
60
+ # The offset is added to the timestamps of the input files.
61
+ # Specifying a positive offset means that the corresponding
62
+ # streams are delayed by 'offset' seconds.
63
+ #
64
+ # offset "600"
65
+ #
66
+ # or
67
+ #
68
+ # offset "00:10:00"
69
+ #
70
+ def offset(offset)
71
+ FFMpegCommand << "-itsoffset #{offset}"
72
+ end
73
+
74
+ #
75
+ # Set the title.
76
+ #
77
+ # title "Some Title"
78
+ #
79
+ def title(title)
80
+ FFMpegCommand << "-title '#{title}'"
81
+ end
82
+
83
+ #
84
+ # Set the author.
85
+ #
86
+ # author "PMH"
87
+ #
88
+ def author(author)
89
+ FFMpegCommand << "-author '#{author}'"
90
+ end
91
+
92
+ #
93
+ # Set the copyright.
94
+ #
95
+ # copyright "(c) Patrik Hedman 2009"
96
+ #
97
+ def copyright(copyright)
98
+ FFMpegCommand << "-copyright '#{copyright}'"
99
+ end
100
+
101
+ #
102
+ # Set the comment.
103
+ #
104
+ # comment "Some comment"
105
+ #
106
+ def comment(comment)
107
+ FFMpegCommand << "-comment '#{comment}'"
108
+ end
109
+
110
+ #
111
+ # Set the album.
112
+ #
113
+ # album "An awesome album"
114
+ #
115
+ def album(album)
116
+ FFMpegCommand << "-album '#{album}'"
117
+ end
118
+
119
+ #
120
+ # Set the track number:
121
+ #
122
+ # track 1
123
+ #
124
+ def track(track)
125
+ FFMpegCommand << "-track #{track}"
126
+ end
127
+
128
+ #
129
+ # Set the year.
130
+ #
131
+ # year 1985
132
+ #
133
+ def year(year)
134
+ FFMpegCommand << "-year #{year}"
135
+ end
136
+
137
+ #
138
+ # Specify target file type ("vcd", "svcd", "dvd", "dv", "dv50", "pal-vcd", "ntsc-svcd", ... ).
139
+ # All the format options (bitrate, codecs, buffer sizes) are then set automatically.
140
+ # Nevertheless you can specify additional options as long as you know they do not conflict
141
+ # with the standard.
142
+ #
143
+ # target "vcd"
144
+ #
145
+ def target(target)
146
+ FFMpegCommand << "-target #{target}"
147
+ end
148
+
149
+ #
150
+ # Set the number of frames to record.
151
+ #
152
+ # frames_to_record 50
153
+ #
154
+ def frames_to_record(frames)
155
+ FFMpegCommand << "-dframes #{frames}"
156
+ end
157
+
158
+ #
159
+ # Force subtitle codec ('copy' to copy stream)
160
+ #
161
+ def subtitle_codec(codec)
162
+ FFMpegCommand << "-scodec #{codec}"
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,22 @@
1
+ module FFMpeg
2
+ module MetaData
3
+ EXIF_UTILITY = 'exiftool'
4
+
5
+ #
6
+ # Retrieves meta data from the file using exiftool, and returned in a hash
7
+ # allowing for complex conversion rules.
8
+ #
9
+ # video_bitrate "300k" if meta[:video_bitrate].to_f > 300
10
+ #
11
+ def meta
12
+ if `which #{EXIF_UTILITY}`.empty?
13
+ {}
14
+ else
15
+ @meta_data ||= `#{EXIF_UTILITY} #{@from_file}`.split("\n").inject({}) {|hash, element|
16
+ hash.merge(((split = element.split(':')) && split.first.strip.downcase.gsub(/[^a-zA-Z0-9]/, "_").to_sym) => (split.shift && split).join(':').strip)
17
+ }
18
+ end
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,275 @@
1
+ module FFMpeg
2
+ module VideoAdvancedOptions
3
+ # Set pixel format. Use 'list' as parameter to show all the supported pixel formats.
4
+ def pixel_format(format)
5
+ FFMpegCommand << "-pix_fmt #{format}"
6
+ end
7
+
8
+ # Set SwScaler flags (only available when compiled with swscale support).
9
+ def swscaler_flags(flags)
10
+ FFMpegCommand << "-sws_flags #{flags}"
11
+ end
12
+
13
+ # Set the group of pictures size.
14
+ def group_of_pictures_size(size)
15
+ FFMpegCommand << "-g #{size}"
16
+ end
17
+
18
+ # Use only intra frames.
19
+ def use_only_intra_frames
20
+ FFMpegCommand << "-intra"
21
+ end
22
+
23
+ # Discard threshold.
24
+ def video_discard_threshold(number)
25
+ FFMpegCommand << "-vdt #{number}"
26
+ end
27
+
28
+ # Use fixed video quantizer scale (VBR).
29
+ def video_quantizer_scale(scale)
30
+ FFMpegCommand << "-qscale #{scale}"
31
+ end
32
+
33
+ # Use minimum video quantizer scale (VBR)
34
+ def video_minimum_quantizer_scale(scale)
35
+ FFMpegCommand << "-qmin #{scale}"
36
+ end
37
+
38
+ # Use maximum video quantizer scale (VBR)
39
+ def video_maximum_quantizer_scale(scale)
40
+ FFMpegCommand << "-qmax #{scale}"
41
+ end
42
+
43
+ # Use maximum difference between the quantizer scales (VBR)
44
+ def video_maximum_quantizer_difference(diff)
45
+ FFMpegCommand << "-qdiff #{diff}"
46
+ end
47
+
48
+ # Use video quantizer scale blur (VBR) (range 0.0 - 1.0)
49
+ def video_quantizer_scale_blur(blur)
50
+ FFMpegCommand << "-qblur #{blur}"
51
+ end
52
+
53
+ # Use video quantizer scale compression (VBR) (default 0.5). Constant of ratecontrol equation. Recommended range
54
+ # for default rc_eq: 0.0-1.0
55
+ def video_quantizer_scale_compression(compression)
56
+ FFMpegCommand << "-qcomp #{compression}"
57
+ end
58
+
59
+ # Use minimum video lagrange factor (VBR)
60
+ #
61
+ # This option uses 'lambda' units, but you may use the QP2LAMBDA constant to easily convert from 'q' units:
62
+ # ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
63
+ def video_minimum_lagrange_factor(lambda)
64
+ FFMpegCommand << "-lmin #{lambda}"
65
+ end
66
+
67
+ # Use max video lagrange factor (VBR)
68
+ #
69
+ # This option uses 'lambda' units, but you may use the QP2LAMBDA constant to easily convert from 'q' units:
70
+ # ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
71
+ def video_maximum_lagrange_factor(lambda)
72
+ FFMpegCommand << "-lmax #{lambda}"
73
+ end
74
+
75
+ # Use minimum macroblock quantizer scale (VBR)
76
+ #
77
+ # This option uses 'lambda' units, but you may use the QP2LAMBDA constant to easily convert from 'q' units:
78
+ # ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
79
+ def video_minimum_macroblock_scale(lambda)
80
+ FFMpegCommand << "-mblmin #{lambda}"
81
+ end
82
+
83
+ # Use maximum macroblock quantizer scale (VBR).
84
+ #
85
+ # This option uses 'lambda' units, but you may use the QP2LAMBDA constant to easily convert from 'q' units:
86
+ # ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
87
+ def video_maximum_macroblock_scale(lambda)
88
+ FFMpegCommand << "-mblmax #{lambda}"
89
+ end
90
+
91
+ # Use initial complexity for single pass encoding
92
+ def initial_complexity(complexity)
93
+ FFMpegCommand << "-rc_init_cplx #{complexity}"
94
+ end
95
+
96
+ # Use qp factor between P- and B-frames
97
+ def b_frame_factor(factor)
98
+ FFMpegCommand << "-b_qfactor #{factor}"
99
+ end
100
+
101
+ # Use qp factor between P- and I-frames
102
+ def i_frame_factor(factor)
103
+ FFMpegCommand << "-i_qfactor #{factor}"
104
+ end
105
+
106
+ # Use qp offset between P- and B-frames
107
+ def b_frame_offset(offset)
108
+ FFMpegCommand << "-b_qoffset #{offset}"
109
+ end
110
+
111
+ # Use qp offset between P- and I-frames
112
+ def i_frame_offset(offset)
113
+ FFMpegCommand << "-i_qoffset #{offset}"
114
+ end
115
+
116
+ # Set rate control equation (see section 3.11 FFmpeg formula evaluator) (default = tex^qComp).
117
+ def rate_control_equation(equation)
118
+ FFMpegCommand << "-rc_eq string"
119
+ end
120
+
121
+ # Set rate control override for specific intervals
122
+ def rate_control_override(override)
123
+ FFMpegCommand << "-rc_override #{override}"
124
+ end
125
+
126
+ # Set motion estimation method to method. Available methods are (from lowest to best quality):
127
+ #
128
+ # `zero' - Try just the (0, 0) vector.
129
+ # `phods'
130
+ # `log'
131
+ # `x1'
132
+ # `hex'
133
+ # `umh'
134
+ # `epzs' - (default method)
135
+ # `full' - exhaustive search (slow and marginally better than epzs)
136
+ def motion_estimation_method(method)
137
+ FFMpegCommand << "-me_method #{method}"
138
+ end
139
+
140
+ # Set DCT algorithm to algo. Available values are:
141
+ #
142
+ # `0' FF_DCT_AUTO (default)
143
+ # `1' FF_DCT_FASTINT
144
+ # `2' FF_DCT_INT
145
+ # `3' FF_DCT_MMX
146
+ # `4' FF_DCT_MLIB
147
+ # `5' FF_DCT_ALTIVEC
148
+ def dct_algorithm(algorithm)
149
+ FFMpegCommand << "-dct_algo #{algorithm}"
150
+ end
151
+
152
+ # Set IDCT algorithm to algo. Available values are:
153
+ #
154
+ # `0' FF_IDCT_AUTO (default)
155
+ # `1' FF_IDCT_INT
156
+ # `2' FF_IDCT_SIMPLE
157
+ # `3' FF_IDCT_SIMPLEMMX
158
+ # `4' FF_IDCT_LIBMPEG2MMX
159
+ # `5' FF_IDCT_PS2
160
+ # `6' FF_IDCT_MLIB
161
+ # `7' FF_IDCT_ARM
162
+ # `8' FF_IDCT_ALTIVEC
163
+ # `9' FF_IDCT_SH4
164
+ # `10' FF_IDCT_SIMPLEARM
165
+ def idct_algorithm(algorithm)
166
+ FFMpegCommand << "-idct_algo #{algorithm}"
167
+ end
168
+
169
+ # Set error resilience to n.
170
+ #
171
+ # `1' FF_ER_CAREFUL (default)
172
+ # `2' FF_ER_COMPLIANT
173
+ # `3' FF_ER_AGGRESSIVE
174
+ # `4' FF_ER_VERY_AGGRESSIVE
175
+ def error_resilience(number)
176
+ FFMpegCommand << "-er #{number}"
177
+ end
178
+
179
+ # Set error concealment to bit_mask. bit_mask is a bit mask of the following values:
180
+ #
181
+ # `1' FF_EC_GUESS_MVS (default = enabled)
182
+ # `2' FF_EC_DEBLOCK (default = enabled)
183
+ def error_concealment(mask)
184
+ FFMpegCommand << "-ec #{mask}"
185
+ end
186
+
187
+ # Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4).
188
+ def b_frames(frames)
189
+ FFMpegCommand << "-bf #{frames}"
190
+ end
191
+
192
+ # Macroblock decision mode
193
+ #
194
+ # `0' FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in FFmpeg).
195
+ # `1' FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
196
+ # `2' FF_MB_DECISION_RD: rate distortion
197
+ def macroblock_decision_mode(mode)
198
+ FFMpegCommand << "-mbd #{mode}"
199
+ end
200
+
201
+ # Use four motion vector by macroblock (MPEG-4 only).
202
+ def use_four_motion_vector
203
+ FFMpegCommand << "-4mv"
204
+ end
205
+
206
+ # Use data partitioning (MPEG-4 only).
207
+ def use_data_partitioning
208
+ FFMpegCommand << "-part"
209
+ end
210
+
211
+ # `-bug param'
212
+ # Work around encoder bugs that are not auto-detected.
213
+
214
+ # How strictly to follow the standards.
215
+ def strictness(strictness)
216
+ FFMpegCommand << "-strict #{strictness}"
217
+ end
218
+
219
+ # Enable Advanced intra coding (h263+).
220
+ def enable_advanced_intra_coding
221
+ FFMpegCommand << "-aic"
222
+ end
223
+
224
+ # Enable Unlimited Motion Vector (h263+)
225
+ def enable_unlimited_motion_vector
226
+ FFMpegCommand << "-umv"
227
+ end
228
+
229
+ # Deinterlace pictures.
230
+ def deinterlace
231
+ FFMpegCommand << "-deinterlace"
232
+ end
233
+
234
+ # Force interlacing support in encoder (MPEG-2 and MPEG-4 only). Use this option if your input file is interlaced
235
+ # and you want to keep the interlaced format for minimum losses. The alternative is to deinterlace the input stream
236
+ # with `-deinterlace', but deinterlacing introduces losses.
237
+ def interlacing_support
238
+ FFMpegCommand << "-ilme"
239
+ end
240
+
241
+ # Calculate PSNR of compressed frames.
242
+ def calculate_psnr
243
+ FFMpegCommand << "-psnr"
244
+ end
245
+
246
+ # Dump video coding statistics to `vstats_HHMMSS.log' or the supplied file.
247
+ def dump_video_statistics(file = nil)
248
+ unless file.nil?
249
+ FFMpegCommand << "-vstats_file #{file}"
250
+ else
251
+ FFMpegCommand << "-vstats"
252
+ end
253
+ end
254
+
255
+ # `-top n'
256
+ # top=1/bottom=0/auto=-1 field first
257
+
258
+ # `-dc precision'
259
+ # Intra_dc_precision.
260
+
261
+ # `-vtag fourcc/tag'
262
+ # Force video tag/fourcc.
263
+
264
+ # Show QP histogram.
265
+ def show_qp_histogram
266
+ FFMpegCommand << "-qphist"
267
+ end
268
+
269
+ # Bitstream filters available are "dump_extra", "remove_extra", "noise", "h264_mp4toannexb", "imxdump" and
270
+ # "mjpegadump".
271
+ def video_bitstream_filter(filter)
272
+ FFMpegCommand << "-vbsf #{filter}"
273
+ end
274
+ end
275
+ end