Skip to content

Commit a2fbca6

Browse files
committed
fix: resolve encoding issues with less common input pixel formats
1 parent 2c1b16c commit a2fbca6

2 files changed

Lines changed: 13 additions & 11 deletions

File tree

lib/ffmpeg/presets/dash/h264.rb

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -291,23 +291,22 @@ def initialize(
291291
# We also apply the desired pixel format to the video stream,
292292
# as well as set the display aspect ratio to the calculated aspect ratio
293293
# to resolve potential issues with different aspect ratios.
294-
stream_filters =
294+
stream_filter_graphs =
295295
h264_presets.each_with_index.map do |h264_preset, index|
296296
fps_filter = Filters.fps(adjusted_frame_rate(h264_preset.frame_rate))
297+
format_filter = h264_preset.format_filter
297298
scale_filter = h264_preset.scale_filter(media)
298299
dar_filter = Filters.set_dar(media.calculated_aspect_ratio) if media.calculated_aspect_ratio
299-
format_filter = Filters.format(pixel_formats: [h264_preset.pixel_format])
300300

301-
Filter.join(*[
302-
fps_filter.with_input_link!("v#{index}"),
303-
scale_filter,
304-
dar_filter,
305-
format_filter.with_output_link!("v#{index}out")
306-
].compact)
301+
stream_filters = [fps_filter, format_filter, scale_filter, dar_filter].compact
302+
stream_filters.first.with_input_link!("v#{index}")
303+
stream_filters.last.with_output_link!("v#{index}out")
304+
305+
Filter.join(*stream_filters)
307306
end
308307

309308
# Apply the generated filter complex to the output.
310-
filter_complex split_filter, *stream_filters
309+
filter_complex split_filter, *stream_filter_graphs
311310

312311
# Force keyframes at the specified interval.
313312
force_key_frames "expr:gte(t,n_forced*#{preset.keyframe_interval})"

lib/ffmpeg/presets/h264.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,7 @@ def initialize(
316316
video_profile preset.video_profile
317317
frame_rate preset.frame_rate
318318
constant_rate_factor preset.constant_rate_factor
319-
pixel_format preset.pixel_format
320-
filter preset.scale_filter(media)
319+
filters preset.format_filter, preset.scale_filter(media)
321320
end
322321

323322
map media.audio_mapping_id do
@@ -344,6 +343,10 @@ def fits?(media)
344343
end
345344
end
346345

346+
def format_filter
347+
Filters.format(pixel_formats: @pixel_format)
348+
end
349+
347350
def scale_filter(media)
348351
return unless @max_width || @max_height
349352

0 commit comments

Comments
 (0)