peasy-audio 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/peasy_audio/engine.rb +67 -0
- data/lib/peasy_audio/version.rb +5 -0
- data/lib/peasy_audio.rb +4 -0
- metadata +50 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: dda227c3f5c86de87fd28d19ab4994daf307f5a122289a1ae7e71e492d03c4d3
|
|
4
|
+
data.tar.gz: 717339562104d1709cdafb297e225128e107dfe99e54b8bf18ef93c09972df52
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: f0fcba0fc6e3e77c55589e5ba7225e50db877ba087be13dfc81484944ae6651c73544b564e2086446736eaf6b19455a7ef0a84b2b1dc3abf895c6b50912fb744
|
|
7
|
+
data.tar.gz: d423a84b6ace061734634d3920b5ddf9dd432b8dc5dac1d5bed4d87dd03fc93e8cdd7307faeec4c5d348e1dbe829016fddae446539428e623d7f6810c3c8e612
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "open3"
|
|
4
|
+
require "json"
|
|
5
|
+
require "tempfile"
|
|
6
|
+
|
|
7
|
+
module PeasyAudio
|
|
8
|
+
FORMATS = %w[mp3 wav ogg flac aac m4a].freeze
|
|
9
|
+
|
|
10
|
+
module_function
|
|
11
|
+
|
|
12
|
+
def info(path)
|
|
13
|
+
cmd = %W[ffprobe -v quiet -print_format json -show_format -show_streams #{path}]
|
|
14
|
+
out, err, st = Open3.capture3(*cmd)
|
|
15
|
+
raise Error, "ffprobe failed: #{err}" unless st.success?
|
|
16
|
+
data = JSON.parse(out)
|
|
17
|
+
fmt = data["format"] || {}
|
|
18
|
+
stream = (data["streams"] || []).find { |s| s["codec_type"] == "audio" } || {}
|
|
19
|
+
{
|
|
20
|
+
duration: fmt["duration"]&.to_f,
|
|
21
|
+
format: fmt["format_name"],
|
|
22
|
+
sample_rate: stream["sample_rate"]&.to_i,
|
|
23
|
+
channels: stream["channels"]&.to_i,
|
|
24
|
+
bitrate: fmt["bit_rate"]&.to_i,
|
|
25
|
+
size: fmt["size"]&.to_i,
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def convert(input, format:, output: nil)
|
|
30
|
+
raise Error, "unsupported format: #{format}" unless FORMATS.include?(format.to_s)
|
|
31
|
+
output ||= input.to_s.sub(/\.\w+$/, ".#{format}")
|
|
32
|
+
_o, err, st = Open3.capture3("ffmpeg", "-y", "-i", input.to_s, output)
|
|
33
|
+
raise Error, "convert failed: #{err}" unless st.success?
|
|
34
|
+
output
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def trim(input, start: 0, duration: nil, output: nil)
|
|
38
|
+
output ||= input.to_s.sub(/(\.\w+)$/, "_trimmed\\1")
|
|
39
|
+
args = ["ffmpeg", "-y", "-i", input.to_s, "-ss", start.to_s]
|
|
40
|
+
args += ["-t", duration.to_s] if duration
|
|
41
|
+
args << output
|
|
42
|
+
_o, err, st = Open3.capture3(*args)
|
|
43
|
+
raise Error, "trim failed: #{err}" unless st.success?
|
|
44
|
+
output
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def merge(inputs, output: nil)
|
|
48
|
+
output ||= "merged_#{Time.now.to_i}.mp3"
|
|
49
|
+
list = Tempfile.new(["concat", ".txt"])
|
|
50
|
+
inputs.each { |f| list.puts("file '#{File.expand_path(f)}'") }
|
|
51
|
+
list.close
|
|
52
|
+
_o, err, st = Open3.capture3("ffmpeg", "-y", "-f", "concat", "-safe", "0", "-i", list.path, "-c", "copy", output)
|
|
53
|
+
raise Error, "merge failed: #{err}" unless st.success?
|
|
54
|
+
output
|
|
55
|
+
ensure
|
|
56
|
+
list&.unlink
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def normalize(input, output: nil)
|
|
60
|
+
output ||= input.to_s.sub(/(\.\w+)$/, "_normalized\\1")
|
|
61
|
+
_o, err, st = Open3.capture3("ffmpeg", "-y", "-i", input.to_s, "-af", "loudnorm", output)
|
|
62
|
+
raise Error, "normalize failed: #{err}" unless st.success?
|
|
63
|
+
output
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
class Error < StandardError; end
|
|
67
|
+
end
|
data/lib/peasy_audio.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: peasy-audio
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- PeasyTools
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies: []
|
|
12
|
+
description: Audio processing library for Ruby — convert between formats (MP3, WAV,
|
|
13
|
+
OGG, FLAC, AAC), trim, merge, normalize volume. FFmpeg-powered with a clean Ruby
|
|
14
|
+
API.
|
|
15
|
+
email:
|
|
16
|
+
- hello@peasytools.com
|
|
17
|
+
executables: []
|
|
18
|
+
extensions: []
|
|
19
|
+
extra_rdoc_files: []
|
|
20
|
+
files:
|
|
21
|
+
- lib/peasy_audio.rb
|
|
22
|
+
- lib/peasy_audio/engine.rb
|
|
23
|
+
- lib/peasy_audio/version.rb
|
|
24
|
+
homepage: https://peasyaudio.com
|
|
25
|
+
licenses:
|
|
26
|
+
- MIT
|
|
27
|
+
metadata:
|
|
28
|
+
homepage_uri: https://peasyaudio.com
|
|
29
|
+
source_code_uri: https://github.com/peasytools/peasy-audio-rb
|
|
30
|
+
changelog_uri: https://github.com/peasytools/peasy-audio-rb/blob/main/CHANGELOG.md
|
|
31
|
+
documentation_uri: https://peasyaudio.com
|
|
32
|
+
bug_tracker_uri: https://github.com/peasytools/peasy-audio-rb/issues
|
|
33
|
+
rdoc_options: []
|
|
34
|
+
require_paths:
|
|
35
|
+
- lib
|
|
36
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '3.0'
|
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
requirements: []
|
|
47
|
+
rubygems_version: 4.0.3
|
|
48
|
+
specification_version: 4
|
|
49
|
+
summary: Audio processing — convert, trim, merge, normalize
|
|
50
|
+
test_files: []
|