Skip to content

Commit 49135b4

Browse files
authored
feat: improve presets to be more customizable (#10)
1 parent ffc3c70 commit 49135b4

11 files changed

Lines changed: 346 additions & 93 deletions

File tree

.ruby-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.3.6
1+
3.4.1

.tool-versions

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ruby 3.4.1

CHANGELOG

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
== 7.0.0-beta.2 2025-01-29
2+
3+
Fixes:
4+
* Make sure the DASH H.264 preset includes at least one video stream.
5+
6+
Improvements:
7+
* Added LD H.264 presets for the DASH H.264 preset that are only included when no other preset fits the specific media.
8+
* Added more options to customize most presets.
9+
110
== 7.0.0-beta.1 2025-01-22
211

312
Fixes:

lib/ffmpeg/presets/aac.rb

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,39 +10,45 @@ class << self
1010
def aac_128k(
1111
name: 'AAC 128k',
1212
filename: '%<basename>s.aac',
13-
metadata: nil
13+
metadata: nil,
14+
&
1415
)
1516
AAC.new(
1617
name:,
1718
filename:,
1819
metadata:,
19-
audio_bit_rate: '128k'
20+
audio_bit_rate: '128k',
21+
&
2022
)
2123
end
2224

2325
def aac_192k(
2426
name: 'AAC 192k',
2527
filename: '%<basename>s.aac',
26-
metadata: nil
28+
metadata: nil,
29+
&
2730
)
2831
AAC.new(
2932
name:,
3033
filename:,
3134
metadata:,
32-
audio_bit_rate: '192k'
35+
audio_bit_rate: '192k',
36+
&
3337
)
3438
end
3539

3640
def aac_320k(
3741
name: 'AAC 320k',
3842
filename: '%<basename>s.aac',
39-
metadata: nil
43+
metadata: nil,
44+
&
4045
)
4146
AAC.new(
4247
name:,
4348
filename:,
4449
metadata:,
45-
audio_bit_rate: '320k'
50+
audio_bit_rate: '320k',
51+
&
4652
)
4753
end
4854
end

lib/ffmpeg/presets/dash.rb

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,39 @@ module FFMPEG
88
module Presets
99
# Preset to encode DASH media files.
1010
class DASH < Preset
11+
attr_reader :segment_duration, :min_keyframe_interval, :max_keyframe_interval, :scene_change_threshold
12+
1113
# @param name [String] The name of the preset.
1214
# @param filename [String] The filename format of the output.
1315
# @param metadata [Object] The metadata to associate with the preset.
16+
# @param segment_duration [Integer] The duration of each segment in seconds.
17+
# @param min_keyframe_interval [Integer] The minimum keyframe interval in frames.
18+
# @param max_keyframe_interval [Integer] The maximum keyframe interval in frames.
19+
# @param scene_change_threshold [Integer] The scene change threshold.
1420
# @yield The block to execute to compose the command arguments.
1521
def initialize(
1622
name: nil,
1723
filename: nil,
1824
metadata: nil,
25+
segment_duration: 2,
26+
min_keyframe_interval: 48,
27+
max_keyframe_interval: 48,
28+
scene_change_threshold: 0,
1929
&
2030
)
21-
super do
31+
@segment_duration = segment_duration
32+
@min_keyframe_interval = min_keyframe_interval
33+
@max_keyframe_interval = max_keyframe_interval
34+
@scene_change_threshold = scene_change_threshold
35+
preset = self
36+
37+
super(name:, filename:, metadata:) do
2238
format_name 'dash'
2339
adaptation_sets 'id=0,streams=v id=1,streams=a'
24-
segment_duration 2
25-
min_keyframe_interval 48
26-
max_keyframe_interval 48
27-
scene_change_threshold 0
40+
segment_duration preset.segment_duration
41+
min_keyframe_interval preset.min_keyframe_interval
42+
max_keyframe_interval preset.max_keyframe_interval
43+
scene_change_threshold preset.scene_change_threshold
2844

2945
muxing_flags '+faststart'
3046
map_chapters '-1'

lib/ffmpeg/presets/dash/aac.rb

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,51 @@ class << self
1111
def aac_128k(
1212
name: 'DASH AAC 128k',
1313
filename: '%<basename>s.mpd',
14-
metadata: nil
14+
metadata: nil,
15+
segment_duration: 2,
16+
&
1517
)
1618
AAC.new(
1719
name:,
1820
filename:,
1921
metadata:,
20-
audio_bit_rate: '128k'
22+
segment_duration:,
23+
audio_bit_rate: '128k',
24+
&
2125
)
2226
end
2327

2428
def aac_192k(
2529
name: 'DASH AAC 192k',
2630
filename: '%<basename>s.mpd',
27-
metadata: nil
31+
metadata: nil,
32+
segment_duration: 2,
33+
&
2834
)
2935
AAC.new(
3036
name:,
3137
filename:,
3238
metadata:,
33-
audio_bit_rate: '192k'
39+
segment_duration:,
40+
audio_bit_rate: '192k',
41+
&
3442
)
3543
end
3644

3745
def aac_320k(
3846
name: 'DASH AAC 320k',
3947
filename: '%<basename>s.mpd',
40-
metadata: nil
48+
metadata: nil,
49+
segment_duration: 2,
50+
&
4151
)
4252
AAC.new(
4353
name:,
4454
filename:,
4555
metadata:,
46-
audio_bit_rate: '320k'
56+
segment_duration:,
57+
audio_bit_rate: '320k',
58+
&
4759
)
4860
end
4961
end
@@ -61,13 +73,14 @@ def initialize(
6173
name: nil,
6274
filename: nil,
6375
metadata: nil,
76+
segment_duration: 2,
6477
audio_bit_rate: '128k',
6578
&
6679
)
6780
@audio_bit_rate = audio_bit_rate
6881
preset = self
6982

70-
super(name:, filename:, metadata:) do
83+
super(name:, filename:, metadata:, segment_duration:) do
7184
audio_codec_name 'aac'
7285

7386
instance_exec(&) if block_given?

0 commit comments

Comments
 (0)