class Bagel::Video::ClipSaver

Public Class Methods

new(clip) click to toggle source
# File lib/bagel/video/clip_saver.rb, line 5
def initialize(clip)
  @clip = clip
end

Public Instance Methods

save() click to toggle source
# File lib/bagel/video/clip_saver.rb, line 9
def save
  FFMPEG.trim(
    source: Bagel.config.source_video,
    start: clip.start,
    duration: clip.duration,
    destination: clip.trim_path
  )

  FFMPEG.filter(
    inputs: inputs,
    filters: filters,
    destination: clip.clip_path
  )
end

Private Instance Methods

fade_filter_clip() click to toggle source
# File lib/bagel/video/clip_saver.rb, line 34
def fade_filter_clip
  clip.fade ? [ FFMPEG::FadeFilter.for_clip(clip.fade) ] : []
end
fade_filters_overlay() click to toggle source
# File lib/bagel/video/clip_saver.rb, line 38
def fade_filters_overlay
  clip.overlays.map.with_index do |overlay, index|
    next unless overlay.fade
    FFMPEG::FadeFilter.for_overlay(overlay.fade, index)
  end.compact
end
filters() click to toggle source
# File lib/bagel/video/clip_saver.rb, line 30
def filters
  fade_filter_clip + fade_filters_overlay + overlay_filters
end
inputs() click to toggle source
# File lib/bagel/video/clip_saver.rb, line 26
def inputs
  [ clip.trim_path ] + clip.overlays.map(&:asset)
end
overlay_filters() click to toggle source
# File lib/bagel/video/clip_saver.rb, line 45
def overlay_filters
  clip.overlays.map.with_index do |overlay, index|
    is_last = index == clip.overlays.count - 1

    FFMPEG::OverlayFilter.new(
      fade: overlay.fade,
      padding: overlay.padding,
      orientation: overlay.orientation,
      index: index,
      is_last: is_last
    ).to_s
  end
end