forked from streamio/streamio-ffmpeg
-
Notifications
You must be signed in to change notification settings - Fork 1
/
encoding_options_spec.rb
139 lines (109 loc) · 5.08 KB
/
encoding_options_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
require 'spec_helper.rb'
module FFMPEG
describe EncodingOptions do
describe "ffmpeg arguments conversion" do
it "should convert video codec" do
EncodingOptions.new(:video_codec => "libx264").to_s.should == "-vcodec libx264"
end
it "should convert cropping options" do
EncodingOptions.new(:croptop => 20).to_s.should == "-croptop 20"
EncodingOptions.new(:cropbottom => 20).to_s.should == "-cropbottom 20"
EncodingOptions.new(:cropleft => 20).to_s.should == "-cropleft 20"
EncodingOptions.new(:cropright => 20).to_s.should == "-cropright 20"
end
it "should know the width from the resolution or be nil" do
EncodingOptions.new(:resolution => "320x240").width.should == 320
EncodingOptions.new.width.should be_nil
end
it "should know the height from the resolution or be nil" do
EncodingOptions.new(:resolution => "320x240").height.should == 240
EncodingOptions.new.height.should be_nil
end
it "should convert frame rate" do
EncodingOptions.new(:frame_rate => 29.9).to_s.should == "-r 29.9"
end
it "should convert the resolution" do
EncodingOptions.new(:resolution => "640x480").to_s.should include("-s 640x480")
end
it "should add calculated aspect ratio" do
EncodingOptions.new(:resolution => "640x480").to_s.should include("-aspect 1.3333333")
EncodingOptions.new(:resolution => "640x360").to_s.should include("-aspect 1.7777777777777")
end
it "should use specified aspect ratio if given" do
output = EncodingOptions.new(:resolution => "640x480", :aspect => 1.77777777777778).to_s
output.should include("-s 640x480")
output.should include("-aspect 1.77777777777778")
end
it "should convert video bitrate" do
EncodingOptions.new(:video_bitrate => "600k").to_s.should == "-b 600k"
end
it "should use k unit for video bitrate" do
EncodingOptions.new(:video_bitrate => 600).to_s.should == "-b 600k"
end
it "should convert audio codec" do
EncodingOptions.new(:audio_codec => "aac").to_s.should == "-acodec aac"
end
it "should convert audio bitrate" do
EncodingOptions.new(:audio_bitrate => "128k").to_s.should == "-ab 128k"
end
it "should use k unit for audio bitrate" do
EncodingOptions.new(:audio_bitrate => 128).to_s.should == "-ab 128k"
end
it "should convert audio sample rate" do
EncodingOptions.new(:audio_sample_rate => 44100).to_s.should == "-ar 44100"
end
it "should convert audio channels" do
EncodingOptions.new(:audio_channels => 2).to_s.should == "-ac 2"
end
it "should convert maximum video bitrate" do
EncodingOptions.new(:video_max_bitrate => 600).to_s.should == "-maxrate 600k"
end
it "should convert mininimum video bitrate" do
EncodingOptions.new(:video_min_bitrate => 600).to_s.should == "-minrate 600k"
end
it "should convert video bitrate tolerance" do
EncodingOptions.new(:video_bitrate_tolerance => 100).to_s.should == "-bt 100k"
end
it "should convert buffer size" do
EncodingOptions.new(:buffer_size => 2000).to_s.should == "-bufsize 2000k"
end
it "should convert threads" do
EncodingOptions.new(:threads => 2).to_s.should == "-threads 2"
end
it "should convert duration" do
EncodingOptions.new(:duration => 30).to_s.should == "-t 30"
end
it "should convert keyframe interval" do
EncodingOptions.new(:keyframe_interval => 60).to_s.should == "-g 60"
end
it "should convert video preset" do
EncodingOptions.new(:video_preset => "max").to_s.should == "-vpre max"
end
it "should convert audio preset" do
EncodingOptions.new(:audio_preset => "max").to_s.should == "-apre max"
end
it "should convert file preset" do
EncodingOptions.new(:file_preset => "max.ffpreset").to_s.should == "-fpre max.ffpreset"
end
it "should specify seek time" do
EncodingOptions.new(:seek_time => 1).to_s.should == "-ss 1"
end
it "should put the parameters in order of codecs, presets, others" do
opts = Hash.new
opts[:frame_rate] = 25
opts[:video_codec] = "libx264"
opts[:video_preset] = "normal"
opts[:custom] = "-g 25"
converted = EncodingOptions.new(opts).to_s
converted.should == "-vcodec libx264 -vpre normal -r 25 -g 25"
end
it "should convert a lot of them simultaneously" do
converted = EncodingOptions.new(:video_codec => "libx264", :audio_codec => "aac", :video_bitrate => "1000k").to_s
converted.should match(/-acodec aac/)
end
it "should ignore options with nil value" do
EncodingOptions.new(:video_codec => "libx264", :frame_rate => nil).to_s.should == "-vcodec libx264 "
end
end
end
end