Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .ruby-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.3.6
3.4.1
1 change: 1 addition & 0 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ruby 3.4.1
9 changes: 9 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
== 7.0.0-beta.2 2025-01-29

Fixes:
* Make sure the DASH H.264 preset includes at least one video stream.

Improvements:
* Added LD H.264 presets for the DASH H.264 preset that are only included when no other preset fits the specific media.
* Added more options to customize most presets.

== 7.0.0-beta.1 2025-01-22

Fixes:
Expand Down
18 changes: 12 additions & 6 deletions lib/ffmpeg/presets/aac.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,39 +10,45 @@ class << self
def aac_128k(
name: 'AAC 128k',
filename: '%<basename>s.aac',
metadata: nil
metadata: nil,
&
)
AAC.new(
name:,
filename:,
metadata:,
audio_bit_rate: '128k'
audio_bit_rate: '128k',
&
)
end

def aac_192k(
name: 'AAC 192k',
filename: '%<basename>s.aac',
metadata: nil
metadata: nil,
&
)
AAC.new(
name:,
filename:,
metadata:,
audio_bit_rate: '192k'
audio_bit_rate: '192k',
&
)
end

def aac_320k(
name: 'AAC 320k',
filename: '%<basename>s.aac',
metadata: nil
metadata: nil,
&
)
AAC.new(
name:,
filename:,
metadata:,
audio_bit_rate: '320k'
audio_bit_rate: '320k',
&
)
end
end
Expand Down
26 changes: 21 additions & 5 deletions lib/ffmpeg/presets/dash.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,39 @@ module FFMPEG
module Presets
# Preset to encode DASH media files.
class DASH < Preset
attr_reader :segment_duration, :min_keyframe_interval, :max_keyframe_interval, :scene_change_threshold

# @param name [String] The name of the preset.
# @param filename [String] The filename format of the output.
# @param metadata [Object] The metadata to associate with the preset.
# @param segment_duration [Integer] The duration of each segment in seconds.
# @param min_keyframe_interval [Integer] The minimum keyframe interval in frames.
# @param max_keyframe_interval [Integer] The maximum keyframe interval in frames.
# @param scene_change_threshold [Integer] The scene change threshold.
# @yield The block to execute to compose the command arguments.
def initialize(
name: nil,
filename: nil,
metadata: nil,
segment_duration: 2,
min_keyframe_interval: 48,
max_keyframe_interval: 48,
scene_change_threshold: 0,
&
)
super do
@segment_duration = segment_duration
@min_keyframe_interval = min_keyframe_interval
@max_keyframe_interval = max_keyframe_interval
@scene_change_threshold = scene_change_threshold
preset = self

super(name:, filename:, metadata:) do
format_name 'dash'
adaptation_sets 'id=0,streams=v id=1,streams=a'
segment_duration 2
min_keyframe_interval 48
max_keyframe_interval 48
scene_change_threshold 0
segment_duration preset.segment_duration
min_keyframe_interval preset.min_keyframe_interval
max_keyframe_interval preset.max_keyframe_interval
scene_change_threshold preset.scene_change_threshold

muxing_flags '+faststart'
map_chapters '-1'
Expand Down
27 changes: 20 additions & 7 deletions lib/ffmpeg/presets/dash/aac.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,39 +11,51 @@ class << self
def aac_128k(
name: 'DASH AAC 128k',
filename: '%<basename>s.mpd',
metadata: nil
metadata: nil,
segment_duration: 2,
&
)
AAC.new(
name:,
filename:,
metadata:,
audio_bit_rate: '128k'
segment_duration:,
audio_bit_rate: '128k',
&
)
end

def aac_192k(
name: 'DASH AAC 192k',
filename: '%<basename>s.mpd',
metadata: nil
metadata: nil,
segment_duration: 2,
&
)
AAC.new(
name:,
filename:,
metadata:,
audio_bit_rate: '192k'
segment_duration:,
audio_bit_rate: '192k',
&
)
end

def aac_320k(
name: 'DASH AAC 320k',
filename: '%<basename>s.mpd',
metadata: nil
metadata: nil,
segment_duration: 2,
&
)
AAC.new(
name:,
filename:,
metadata:,
audio_bit_rate: '320k'
segment_duration:,
audio_bit_rate: '320k',
&
)
end
end
Expand All @@ -61,13 +73,14 @@ def initialize(
name: nil,
filename: nil,
metadata: nil,
segment_duration: 2,
audio_bit_rate: '128k',
&
)
@audio_bit_rate = audio_bit_rate
preset = self

super(name:, filename:, metadata:) do
super(name:, filename:, metadata:, segment_duration:) do
audio_codec_name 'aac'

instance_exec(&) if block_given?
Expand Down
Loading