Module: FFMPEG

Defined in:
lib/ffmpeg.rb,
lib/ffmpeg/media.rb,
lib/ffmpeg/errors.rb,
lib/ffmpeg/stream.rb,
lib/ffmpeg/command.rb,
lib/ffmpeg/railtie.rb,
lib/ffmpeg/version.rb,
lib/ffmpeg/transcoder.rb,
lib/ffmpeg/configuration.rb,
lib/ffmpeg/scene_detector.rb,
lib/ffmpeg/keyframe_extractor.rb,
lib/ffmpeg/active_storage/analyzer.rb,
lib/ffmpeg/active_storage/previewer.rb

Overview

FFMPEG - A modern Ruby wrapper for FFmpeg

Examples:

Basic usage

media = FFMPEG::Media.new("/path/to/video.mp4")
media.duration     # => 120.5
media.resolution   # => "1920x1080"
media.video_codec  # => "h264"

Transcoding

media.transcode("/path/to/output.mp4") do |progress|
  puts "Progress: #{progress}%"
end

Scene detection

detector = FFMPEG::SceneDetector.new(media)
scenes = detector.detect(threshold: 0.3)
# => [{ timestamp: 0.0 }, { timestamp: 5.2 }, ...]

Keyframe extraction

extractor = FFMPEG::KeyframeExtractor.new(media)
frames = extractor.extract_at_intervals(interval: 5.0, output_dir: "/tmp/frames")
# => ["/tmp/frames/frame_0000.jpg", ...]

Defined Under Namespace

Modules: ActiveStorage Classes: Command, CommandTimeout, Configuration, Error, FFmpegNotFound, FFprobeNotFound, InvalidFilter, InvalidMedia, KeyframeExtractionError, KeyframeExtractor, Media, MediaNotFound, PresetNotFound, Railtie, SceneDetectionError, SceneDetector, Stream, Transcoder, TranscodingError

Constant Summary collapse

VERSION =
"0.1.0"
MIN_FFMPEG_VERSION =

Minimum supported FFmpeg version

"4.0"
TESTED_FFMPEG_VERSIONS =

Tested FFmpeg versions

%w[4 5 6 7].freeze

Class Method Summary collapse

Class Method Details

.available?Boolean

Check if FFmpeg is installed and accessible

Returns:

  • (Boolean)


81
82
83
84
85
# File 'lib/ffmpeg.rb', line 81

def available?
  Command.run(ffmpeg_binary, "-version").success?
rescue Errno::ENOENT
  false
end

.configurationConfiguration

Global configuration

Returns:



51
52
53
# File 'lib/ffmpeg.rb', line 51

def configuration
  @configuration ||= Configuration.new
end

.configure {|Configuration| ... } ⇒ Object

Configure FFMPEG

Yields:



57
58
59
# File 'lib/ffmpeg.rb', line 57

def configure
  yield(configuration)
end

.ffmpeg_binaryString

Path to ffmpeg binary

Returns:

  • (String)


63
64
65
# File 'lib/ffmpeg.rb', line 63

def ffmpeg_binary
  configuration.ffmpeg_binary
end

.ffprobe_binaryString

Path to ffprobe binary

Returns:

  • (String)


69
70
71
# File 'lib/ffmpeg.rb', line 69

def ffprobe_binary
  configuration.ffprobe_binary
end

.loggerLogger?

Logger instance

Returns:

  • (Logger, nil)


75
76
77
# File 'lib/ffmpeg.rb', line 75

def logger
  configuration.logger
end

.versionString?

Get FFmpeg version

Returns:

  • (String, nil)


89
90
91
92
93
94
# File 'lib/ffmpeg.rb', line 89

def version
  result = Command.run(ffmpeg_binary, "-version")
  return nil unless result.success?

  result.output.match(/ffmpeg version (\S+)/i)&.[](1)
end