ffmprb 0.11.3 → 0.12.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 +5 -5
- data/Dockerfile +18 -0
- data/Gemfile +8 -1
- data/Gemfile.lock +121 -0
- data/README.md +65 -21
- data/TODO.md +0 -0
- data/bin/dev +12 -0
- data/bin/test +13 -0
- data/coverage/assets/0.10.0/application.css +799 -0
- data/coverage/assets/0.10.0/application.js +1707 -0
- data/coverage/assets/0.10.0/colorbox/border.png +0 -0
- data/coverage/assets/0.10.0/colorbox/controls.png +0 -0
- data/coverage/assets/0.10.0/colorbox/loading.gif +0 -0
- data/coverage/assets/0.10.0/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.10.0/favicon_green.png +0 -0
- data/coverage/assets/0.10.0/favicon_red.png +0 -0
- data/coverage/assets/0.10.0/favicon_yellow.png +0 -0
- data/coverage/assets/0.10.0/loading.gif +0 -0
- data/coverage/assets/0.10.0/magnify.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.10.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.10.2/application.css +799 -0
- data/coverage/assets/0.10.2/application.js +1707 -0
- data/coverage/assets/0.10.2/colorbox/border.png +0 -0
- data/coverage/assets/0.10.2/colorbox/controls.png +0 -0
- data/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
- data/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.10.2/favicon_green.png +0 -0
- data/coverage/assets/0.10.2/favicon_red.png +0 -0
- data/coverage/assets/0.10.2/favicon_yellow.png +0 -0
- data/coverage/assets/0.10.2/loading.gif +0 -0
- data/coverage/assets/0.10.2/magnify.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_asc.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_both.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_desc.png +0 -0
- data/coverage/assets/0.12.2/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
- data/coverage/assets/0.12.2/application.css +1 -0
- data/coverage/assets/0.12.2/application.js +7 -0
- data/coverage/assets/0.12.2/colorbox/border.png +0 -0
- data/coverage/assets/0.12.2/colorbox/controls.png +0 -0
- data/coverage/assets/0.12.2/colorbox/loading.gif +0 -0
- data/coverage/assets/0.12.2/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.12.2/favicon_green.png +0 -0
- data/coverage/assets/0.12.2/favicon_red.png +0 -0
- data/coverage/assets/0.12.2/favicon_yellow.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.12.2/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.12.2/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.12.2/loading.gif +0 -0
- data/coverage/assets/0.12.2/magnify.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png +0 -0
- data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
- data/coverage/assets/0.12.3/application.css +1 -0
- data/coverage/assets/0.12.3/application.js +7 -0
- data/coverage/assets/0.12.3/colorbox/border.png +0 -0
- data/coverage/assets/0.12.3/colorbox/controls.png +0 -0
- data/coverage/assets/0.12.3/colorbox/loading.gif +0 -0
- data/coverage/assets/0.12.3/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.12.3/favicon_green.png +0 -0
- data/coverage/assets/0.12.3/favicon_red.png +0 -0
- data/coverage/assets/0.12.3/favicon_yellow.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.12.3/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.12.3/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.12.3/loading.gif +0 -0
- data/coverage/assets/0.12.3/magnify.png +0 -0
- data/coverage/index.html +47324 -0
- data/exp/EXP +7 -0
- data/exp/av-cut-mp4you60.ffmprb +10 -0
- data/exp/docker-compose.yml +9 -0
- data/exp/gop-cut-cat-you60 +141 -0
- data/exp/present/Dockerfile +13 -0
- data/exp/present/Gemfile +3 -0
- data/exp/present/Gemfile.lock +22 -0
- data/exp/present/bin/up-deps +8 -0
- data/exp/present/docker-compose.yml +21 -0
- data/exp/present/exp/present +10 -0
- data/exp/present/exp/present.rb +37 -0
- data/exp/run +9 -0
- data/exp/stitch2.ffmprb +5 -0
- data/exp/unzip-mp4you60 +58 -0
- data/exp/youtubby/Dockerfile +13 -0
- data/exp/youtubby/Gemfile +7 -0
- data/exp/youtubby/Gemfile.lock +73 -0
- data/exp/youtubby/README.md +21 -0
- data/exp/youtubby/bin/up-deps +8 -0
- data/exp/youtubby/docker-compose.yml +20 -0
- data/exp/youtubby/exp/gop-raw-cut-you-HD60 +13 -0
- data/exp/youtubby/exp/gop-raw-cut-you-HD60.rb +230 -0
- data/exp/youtubby/exp/media-upload +13 -0
- data/exp/youtubby/exp/tmp/CURRENT +2 -0
- data/exp/youtubby/google_youtube.rb +39 -0
- data/exp/youtubby/old-ul.py +181 -0
- data/exp/youtubby/old-ul.rb +87 -0
- data/exp/youtubby/py-Dockerfile +11 -0
- data/exp/youtubby/py-docker-compose.yml +13 -0
- data/exp/youtubby/requirements.txt +19 -0
- data/exp/youtubby/upload.rb +38 -0
- data/exp/zip-cut-mp4you60 +42 -0
- data/exp/zip2mp4k60 +27 -0
- data/ffmprb.gemspec +34 -14
- data/lib/defaults.rb +6 -6
- data/lib/ffmprb/execution.rb +1 -1
- data/lib/ffmprb/file/sample.rb +2 -2
- data/lib/ffmprb/file/threaded_buffered.rb +4 -4
- data/lib/ffmprb/file.rb +20 -20
- data/lib/ffmprb/filter.rb +100 -61
- data/lib/ffmprb/find_silence.rb +5 -2
- data/lib/ffmprb/process/input/chain_base.rb +6 -4
- data/lib/ffmprb/process/input/channeled.rb +1 -1
- data/lib/ffmprb/process/input/cropped.rb +4 -1
- data/lib/ffmprb/process/input/cut.rb +2 -2
- data/lib/ffmprb/process/input/looping.rb +11 -16
- data/lib/ffmprb/process/input/loud.rb +1 -1
- data/lib/ffmprb/process/input/paced.rb +35 -0
- data/lib/ffmprb/process/input/postprocessed.rb +29 -0
- data/lib/ffmprb/process/input/reversed.rb +29 -0
- data/lib/ffmprb/process/input.rb +7 -3
- data/lib/ffmprb/process/output.rb +45 -29
- data/lib/ffmprb/process.rb +8 -9
- data/lib/ffmprb/util/proc_vis.rb +5 -4
- data/lib/ffmprb/util/thread.rb +13 -11
- data/lib/ffmprb/util/threaded_io_buffer.rb +25 -22
- data/lib/ffmprb/util.rb +38 -13
- data/lib/ffmprb/version.rb +2 -2
- data/lib/ffmprb.rb +8 -5
- data/tmp/exp/docker-compose.yml +9 -0
- data/tmp/exp/src/SAM_3132.MP4 +0 -0
- data/tmp/ffmprb-0.11.4.gem +0 -0
- data/tmp/output.rb +383 -0
- metadata +159 -139
- data/.gitignore +0 -10
- data/.rspec +0 -4
- data/.ruby-version +0 -1
- data/.travis.yml +0 -3
- data/circle.yml +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 9dfd9dfa0902b6fa0f7e18655e385c11f968dfc73c51bc86a0828befffcdd039
|
|
4
|
+
data.tar.gz: 5c4721cbc6003848150dd8600939bf973dbd165b23177faeb38f1e7ed6444425
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2317d3d31ea09d3eae1dcd999a141431cf6fd8394c322dc407c1f5088763d1e566863fe6d012b0b92d1920fb25ff8bb9bcace1b508ac3f2b13ab5454c380b3e8
|
|
7
|
+
data.tar.gz: 2e40d1a392823480757fe7e045a6ca1412f05f4af09ab5cf2d1e8133e066efb96a2d538dc67f2bf6747a1313917ca287554800c02ce97f92041d206a0febf7c4
|
data/Dockerfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
FROM debian:bullseye
|
|
2
|
+
|
|
3
|
+
RUN bash -ec 'apt update; apt -y install ruby-all-dev=1:2.7+2 ffmpeg=7:4.3.5-0+deb11u1 sox=14.4.2+git20190427-2 build-essential=12.9 libmagickwand-dev=8:6.9.11.60+dfsg-1.3 git=1:2.30.2-1 pkg-config=0.29.2-1'
|
|
4
|
+
RUN gem install bundler -v '~> 2.0'
|
|
5
|
+
|
|
6
|
+
WORKDIR /ffmprb
|
|
7
|
+
|
|
8
|
+
COPY Gemfile Gemfile.lock ffmprb.gemspec ./
|
|
9
|
+
COPY lib/ffmprb/version.rb ./lib/ffmprb/version.rb
|
|
10
|
+
RUN bundle install
|
|
11
|
+
COPY . .
|
|
12
|
+
RUN gem build ffmprb.gemspec
|
|
13
|
+
RUN gem install *.gem
|
|
14
|
+
|
|
15
|
+
# TODO you know, whatever...
|
|
16
|
+
WORKDIR /
|
|
17
|
+
|
|
18
|
+
ENTRYPOINT ["ffmprb"]
|
data/Gemfile
CHANGED
|
@@ -3,4 +3,11 @@ source 'https://rubygems.org'
|
|
|
3
3
|
# Specify your gem's dependencies in ffmprb.gemspec
|
|
4
4
|
gemspec
|
|
5
5
|
|
|
6
|
-
gem '
|
|
6
|
+
gem 'byebug'
|
|
7
|
+
gem 'simplecov'
|
|
8
|
+
gem 'guard-rspec'
|
|
9
|
+
gem 'guard-bundler'
|
|
10
|
+
gem 'rake'
|
|
11
|
+
gem 'rmagick', '~> 4.1'
|
|
12
|
+
gem 'ruby-sox', '~> 0.0.3'
|
|
13
|
+
gem 'firebase', '~> 0.2.8'
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
ffmprb (0.12.1)
|
|
5
|
+
mkfifo (~> 0.1.1)
|
|
6
|
+
thor (~> 0.19.1)
|
|
7
|
+
|
|
8
|
+
GEM
|
|
9
|
+
remote: https://rubygems.org/
|
|
10
|
+
specs:
|
|
11
|
+
addressable (2.8.1)
|
|
12
|
+
public_suffix (>= 2.0.2, < 6.0)
|
|
13
|
+
byebug (11.1.3)
|
|
14
|
+
coderay (1.1.3)
|
|
15
|
+
diff-lcs (1.5.0)
|
|
16
|
+
docile (1.4.0)
|
|
17
|
+
faraday (2.7.2)
|
|
18
|
+
faraday-net_http (>= 2.0, < 3.1)
|
|
19
|
+
ruby2_keywords (>= 0.0.4)
|
|
20
|
+
faraday-net_http (3.0.2)
|
|
21
|
+
ffi (1.15.5)
|
|
22
|
+
firebase (0.2.8)
|
|
23
|
+
googleauth
|
|
24
|
+
httpclient (>= 2.5.3)
|
|
25
|
+
json
|
|
26
|
+
formatador (1.1.0)
|
|
27
|
+
googleauth (1.3.0)
|
|
28
|
+
faraday (>= 0.17.3, < 3.a)
|
|
29
|
+
jwt (>= 1.4, < 3.0)
|
|
30
|
+
memoist (~> 0.16)
|
|
31
|
+
multi_json (~> 1.11)
|
|
32
|
+
os (>= 0.9, < 2.0)
|
|
33
|
+
signet (>= 0.16, < 2.a)
|
|
34
|
+
guard (2.18.0)
|
|
35
|
+
formatador (>= 0.2.4)
|
|
36
|
+
listen (>= 2.7, < 4.0)
|
|
37
|
+
lumberjack (>= 1.0.12, < 2.0)
|
|
38
|
+
nenv (~> 0.1)
|
|
39
|
+
notiffany (~> 0.0)
|
|
40
|
+
pry (>= 0.13.0)
|
|
41
|
+
shellany (~> 0.0)
|
|
42
|
+
thor (>= 0.18.1)
|
|
43
|
+
guard-bundler (3.0.0)
|
|
44
|
+
bundler (>= 2.1, < 3)
|
|
45
|
+
guard (~> 2.2)
|
|
46
|
+
guard-compat (~> 1.1)
|
|
47
|
+
guard-compat (1.2.1)
|
|
48
|
+
guard-rspec (4.7.3)
|
|
49
|
+
guard (~> 2.1)
|
|
50
|
+
guard-compat (~> 1.1)
|
|
51
|
+
rspec (>= 2.99.0, < 4.0)
|
|
52
|
+
httpclient (2.8.3)
|
|
53
|
+
json (2.6.3)
|
|
54
|
+
jwt (2.6.0)
|
|
55
|
+
listen (3.7.1)
|
|
56
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
57
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
|
58
|
+
lumberjack (1.2.8)
|
|
59
|
+
memoist (0.16.2)
|
|
60
|
+
method_source (1.0.0)
|
|
61
|
+
mkfifo (0.1.1)
|
|
62
|
+
multi_json (1.15.0)
|
|
63
|
+
nenv (0.3.0)
|
|
64
|
+
notiffany (0.1.3)
|
|
65
|
+
nenv (~> 0.1)
|
|
66
|
+
shellany (~> 0.0)
|
|
67
|
+
os (1.1.4)
|
|
68
|
+
pry (0.14.1)
|
|
69
|
+
coderay (~> 1.1)
|
|
70
|
+
method_source (~> 1.0)
|
|
71
|
+
public_suffix (5.0.1)
|
|
72
|
+
rake (13.0.6)
|
|
73
|
+
rb-fsevent (0.11.2)
|
|
74
|
+
rb-inotify (0.10.1)
|
|
75
|
+
ffi (~> 1.0)
|
|
76
|
+
rmagick (4.3.0)
|
|
77
|
+
rspec (3.12.0)
|
|
78
|
+
rspec-core (~> 3.12.0)
|
|
79
|
+
rspec-expectations (~> 3.12.0)
|
|
80
|
+
rspec-mocks (~> 3.12.0)
|
|
81
|
+
rspec-core (3.12.0)
|
|
82
|
+
rspec-support (~> 3.12.0)
|
|
83
|
+
rspec-expectations (3.12.1)
|
|
84
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
85
|
+
rspec-support (~> 3.12.0)
|
|
86
|
+
rspec-mocks (3.12.1)
|
|
87
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
88
|
+
rspec-support (~> 3.12.0)
|
|
89
|
+
rspec-support (3.12.0)
|
|
90
|
+
ruby-sox (0.0.3)
|
|
91
|
+
ruby2_keywords (0.0.5)
|
|
92
|
+
shellany (0.0.1)
|
|
93
|
+
signet (0.17.0)
|
|
94
|
+
addressable (~> 2.8)
|
|
95
|
+
faraday (>= 0.17.5, < 3.a)
|
|
96
|
+
jwt (>= 1.5, < 3.0)
|
|
97
|
+
multi_json (~> 1.10)
|
|
98
|
+
simplecov (0.21.2)
|
|
99
|
+
docile (~> 1.1)
|
|
100
|
+
simplecov-html (~> 0.11)
|
|
101
|
+
simplecov_json_formatter (~> 0.1)
|
|
102
|
+
simplecov-html (0.12.3)
|
|
103
|
+
simplecov_json_formatter (0.1.4)
|
|
104
|
+
thor (0.19.4)
|
|
105
|
+
|
|
106
|
+
PLATFORMS
|
|
107
|
+
ruby
|
|
108
|
+
|
|
109
|
+
DEPENDENCIES
|
|
110
|
+
byebug
|
|
111
|
+
ffmprb!
|
|
112
|
+
firebase (~> 0.2.8)
|
|
113
|
+
guard-bundler
|
|
114
|
+
guard-rspec
|
|
115
|
+
rake
|
|
116
|
+
rmagick (~> 4.1)
|
|
117
|
+
ruby-sox (~> 0.0.3)
|
|
118
|
+
simplecov
|
|
119
|
+
|
|
120
|
+
BUNDLED WITH
|
|
121
|
+
2.1.4
|
data/README.md
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
# ffmprb
|
|
2
2
|
[](http://badge.fury.io/rb/ffmprb)
|
|
3
|
-
|
|
4
|
-
## your audio/video montage pal, based on [ffmpeg](https://ffmpeg.org)
|
|
3
|
+
## your audio/video manipulation pal, based on [ffmpeg](https://ffmpeg.org)
|
|
5
4
|
|
|
6
5
|
A video and audio composing DSL (Damn-Simple Language) and a micro-engine for ffmpeg and ffriends (with CLI)
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
Any script-able person can manipulate video/audio media -- or automate such processing -- with ffmprb.
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
_ATTENTION_
|
|
10
|
+
|
|
11
|
+
The actual usage currently depends on having ffmpeg v3.x installed in the system
|
|
12
|
+
(ffmpeg v4.x has broken some of this gem's features), see the sample `./Dockerfile` for working containerisation.
|
|
11
13
|
|
|
12
14
|
Allows for scripts like
|
|
13
15
|
```ruby
|
|
@@ -24,8 +26,28 @@ ffmpeg -y -noautorotate -i flick.mp4 -i track.mp3 -filter_complex "[0:v] fps=fps
|
|
|
24
26
|
```
|
|
25
27
|
...that's the idea, but there's much more to it.
|
|
26
28
|
|
|
27
|
-
The docs,
|
|
28
|
-
So you're
|
|
29
|
+
The docs, more than other parts of this gem, are a work in progress.
|
|
30
|
+
So, if you're really curious about using `ffmprb`, you have to check the [specs](https://github.com/costa/ffmprb/tree/master/spec) for the actual functionality coverage.
|
|
31
|
+
A hint on the ideas you might find there: you can use constructs like
|
|
32
|
+
```
|
|
33
|
+
Ffmprb::File.temp_fifo('.flv') do |av_pipe|
|
|
34
|
+
thr = Thread.new do
|
|
35
|
+
Ffmprb.process(..., av_pipe) do |..., stream_output|
|
|
36
|
+
output(stream_output) do
|
|
37
|
+
...
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
begin
|
|
42
|
+
Ffmprb.process(av_pipe, ...) do |stream_input, ...|
|
|
43
|
+
...
|
|
44
|
+
end
|
|
45
|
+
ensure
|
|
46
|
+
thr.join
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
```
|
|
50
|
+
in order to implement process pipelines.
|
|
29
51
|
|
|
30
52
|
|
|
31
53
|
## Installation
|
|
@@ -120,10 +142,12 @@ The `ffmprb` command-line utility expects a script on its standard input:
|
|
|
120
142
|
```ruby
|
|
121
143
|
# episode_01.ffmprb
|
|
122
144
|
|
|
123
|
-
|
|
124
|
-
|
|
145
|
+
output 'episode_01_tease.mpg' do
|
|
146
|
+
# Play your _episode_ teaser snippet:
|
|
147
|
+
lay input('episode_01.mov').cut(to: 60), transition: {blend: 3}
|
|
125
148
|
|
|
126
149
|
...
|
|
150
|
+
end
|
|
127
151
|
```
|
|
128
152
|
|
|
129
153
|
$ ffmprb < episode_01.ffmprb
|
|
@@ -133,20 +157,28 @@ And it can take parameters for the sake of automation convenience:
|
|
|
133
157
|
|
|
134
158
|
```ruby
|
|
135
159
|
# episode_make.ffmprb
|
|
136
|
-
|episode, logo, intro, badge, title, promo, credits, outro|
|
|
137
|
-
|
|
138
|
-
# Play your _episode_ teaser snippet:
|
|
139
|
-
lay input(episode).cut(to: 60), transition: {blend: 3}
|
|
160
|
+
|episode, logo, intro, badge, title, promo, credits, outro, final|
|
|
140
161
|
|
|
141
|
-
|
|
162
|
+
output final do
|
|
163
|
+
# Play your _episode_ teaser snippet:
|
|
164
|
+
lay input(episode).cut(to: 60), transition: {blend: 1}
|
|
165
|
+
overlay input(logo).loop.cut(to: 24), after: 3, transition: {blend: 1}
|
|
166
|
+
lay input(intro).cut(to: 30), transition: {blend: 3}
|
|
167
|
+
lay input(title), transition: {blend: 1}
|
|
168
|
+
overlay input(badge), transition: {blend: 1}
|
|
169
|
+
lay input(episode).cut(from: 60), transition: {blend: 1}
|
|
170
|
+
lay input(promo).cut(from: 60), transition: {blend: 1}
|
|
171
|
+
lay input(credits), transition: {blend: 3}
|
|
172
|
+
lay input(outro), transition: {blend: 3}
|
|
173
|
+
end
|
|
142
174
|
```
|
|
143
175
|
|
|
144
|
-
$ ffmprb ep01raw.mov logo.png intro.avi new_new.gif ep01tit.mov
|
|
176
|
+
$ ffmprb ep01raw.mov logo.png intro.avi new_new.gif ep01tit.mov promo.mp4 ep01creds.avi ep01out.mov ep01.mpg < episode_make.ffmprb
|
|
145
177
|
|
|
146
178
|
|
|
147
179
|
### The defaults
|
|
148
180
|
|
|
149
|
-
The defaults [defaults](https://github.com/
|
|
181
|
+
The defaults [defaults](https://github.com/costa/ffmprb/tree/master/lib/defaults.rb) are provided for every possible configuration option (optional options' defaults for the methods below in particular), you're welcome to config anything in your ffmprb scripts.
|
|
150
182
|
|
|
151
183
|
|
|
152
184
|
### Advanced usage
|
|
@@ -167,7 +199,7 @@ naturally, the latter use the former:
|
|
|
167
199
|
Ffmprb.process do
|
|
168
200
|
|
|
169
201
|
in_main = input(av_input1)
|
|
170
|
-
output(av_output1, video: {resolution:
|
|
202
|
+
output(av_output1, video: {resolution: HD_720p, fps: 25}) do
|
|
171
203
|
lay in_main.crop(0.05), transition: {blend: 1}
|
|
172
204
|
end
|
|
173
205
|
|
|
@@ -192,6 +224,10 @@ end
|
|
|
192
224
|
|
|
193
225
|
### Available reel modifier (filter) methods
|
|
194
226
|
|
|
227
|
+
`audio`
|
|
228
|
+
|
|
229
|
+
`audio` channels just the audio from the reel.
|
|
230
|
+
|
|
195
231
|
`crop`({_ratio_ | {[top: _ratio_][, left: _ratio_][, bottom: _ratio_][, right: _ratio_][, width: _ratio_][, height: _ratio_]}})
|
|
196
232
|
|
|
197
233
|
`crop` crops the reel frames (e.g. `in1.crop(0.1)` will remove 1/10th of the frame from each side)
|
|
@@ -206,6 +242,18 @@ end
|
|
|
206
242
|
|
|
207
243
|
`mute`
|
|
208
244
|
|
|
245
|
+
`pace`(_factor_)
|
|
246
|
+
|
|
247
|
+
`pace` changes the reel speed by the given factor
|
|
248
|
+
|
|
249
|
+
`pp`
|
|
250
|
+
|
|
251
|
+
`pp` activates (some very simple) image postprocessing
|
|
252
|
+
|
|
253
|
+
`reverse`
|
|
254
|
+
|
|
255
|
+
`reverse` reverses the reel (works efficiently with small fragments only)
|
|
256
|
+
|
|
209
257
|
`volume`(_ratio_)
|
|
210
258
|
|
|
211
259
|
`volume` changes the volume proportionally to the source. `mute` mutes.
|
|
@@ -214,10 +262,6 @@ end
|
|
|
214
262
|
|
|
215
263
|
`video` channels just the video from the reel.
|
|
216
264
|
|
|
217
|
-
`audio`
|
|
218
|
-
|
|
219
|
-
`audio` channels just the audio from the reel.
|
|
220
|
-
|
|
221
265
|
`copy`(_reel_)
|
|
222
266
|
|
|
223
267
|
`copy` copies the reel's modifier chain _onto_ the given reel.
|
|
@@ -269,7 +313,7 @@ follow these simple principles:
|
|
|
269
313
|
|
|
270
314
|
## Contributing
|
|
271
315
|
|
|
272
|
-
1. Fork it ( https://github.com/
|
|
316
|
+
1. Fork it ( https://github.com/costa/ffmprb/fork )
|
|
273
317
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
274
318
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
275
319
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/TODO.md
ADDED
|
File without changes
|
data/bin/dev
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/bin/bash -e
|
|
2
|
+
test "$#" -ne 0 && echo "Unsupported args: $@" >&2 && exit 145
|
|
3
|
+
cd "$( dirname "${BASH_SOURCE[0]}" )"/..
|
|
4
|
+
|
|
5
|
+
export COMPOSE_FILE=spec/docker-compose.yml
|
|
6
|
+
export COMPOSE_PROJECT_NAME=ffmprb_dev
|
|
7
|
+
|
|
8
|
+
docker-compose rm -svf
|
|
9
|
+
|
|
10
|
+
docker-compose build --force-rm
|
|
11
|
+
|
|
12
|
+
DEBUG=y docker-compose run --entrypoint bundle tester exec guard -p -y 3 -l 3 && docker-compose rm -svf || ( docker-compose logs && exit 1 )
|
data/bin/test
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/bin/bash -e
|
|
2
|
+
cd "$( dirname "${BASH_SOURCE[0]}" )"/..
|
|
3
|
+
|
|
4
|
+
test_to_run="$*"
|
|
5
|
+
|
|
6
|
+
export COMPOSE_FILE=spec/docker-compose.yml
|
|
7
|
+
export COMPOSE_PROJECT_NAME=ffmprb_dev
|
|
8
|
+
|
|
9
|
+
docker-compose rm -svf
|
|
10
|
+
|
|
11
|
+
docker-compose build --force-rm
|
|
12
|
+
|
|
13
|
+
docker-compose run tester $test_to_run && docker-compose rm -svf || ( docker-compose logs && exit 1 )
|