ffmpeg-screenrecorder 1.0.0.beta7 → 1.0.0.beta8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a472f64b6ba70b1f6b74ca6023f97ceba33c8d9977e8c6df2263513b60520af8
4
- data.tar.gz: 33355f5984cca8c017ed1ec5dbfa065478bf3c512a7a40927a660bed4687c2f2
3
+ metadata.gz: b93c3e8b673ad688449c8af7a13f3b936f6f9c0665d9b265e0a4ffd5d5820018
4
+ data.tar.gz: 9fc25d97554efee3a142bbadaf4699220221dacec0e7e6158484593be13f206d
5
5
  SHA512:
6
- metadata.gz: 32b9efa443e4ee7c7e25c8fd61fe173c207efa31c00cb41c3cbff8177014149a166a11d4560790a09337d5763870ebf8c8555f9362e4fe85b2b7dd7cc9c1b80e
7
- data.tar.gz: 92d7c4b4f3c5db9fe021a0938353abb5979ba9bf4aff6f1607d16fb8b23f08145b01cf01ff94ce302f3809e8623f8bc45efc7f6a5c3a54fee1fea12c838c73bc
6
+ metadata.gz: fa97bae768e73ad1175005d9e13a51874d443e692c539b3cd329fd6a412f84bb5c00e9bb07c2683b198a79ef7d8876c57be0d71b3e8ee30ebb9141fbd2d42e19
7
+ data.tar.gz: 9fa3025ffae72d29381d0342f88fa938e6800374e967d4e741f47df201ec820e5e289ba57a1277eba61b332720c95a8fba8e4a79ce7350c20c6ec80b265b3d94
data/.rubocop.yml CHANGED
@@ -42,3 +42,6 @@ Style/Documentation:
42
42
  # SupportedStyles: when_needed, always, never
43
43
  Style/FrozenStringLiteralComment:
44
44
  Enabled: false
45
+
46
+ TrailingBlankLines:
47
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,7 +1,23 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.5.1
7
- before_install: gem install bundler -v 1.16.6
1
+ ---
2
+ sudo: required
3
+ os:
4
+ - linux
5
+ language: ruby
6
+ cache: bundler
7
+ branches:
8
+ only:
9
+ - master
10
+ rvm:
11
+ - 2.5.3
12
+ addons:
13
+ firefox: latest
14
+ before_install:
15
+ - gem update --system
16
+ - gem install bundler
17
+ - bundle update
18
+ before_script:
19
+ - sudo add-apt-repository -y ppa:mc3man/trusty-media
20
+ - sudo apt-get update
21
+ - sudo apt-get install -y ffmpeg
22
+ - ffmpeg -hwaccels
23
+ - echo $DISPLAY
data/CHANGES.md ADDED
@@ -0,0 +1,24 @@
1
+ ### 1.0.0.beta8 (2019-01-03)
2
+
3
+ * Fix a bug where the gem was incorrectly configured to be required as `ffmpeg/screenrecorder` instead of `ffmpeg-screenrecorder`.
4
+ * `ScreenRecorder#start` now returns the IO process object in case the user has a use case for it.
5
+ * `RecordingRegion#fetch` now logs a warning that `x11grab` for Linux does not supporting window recording.
6
+ * :warning: Parameter `infile` is now `input` to make it more intuitive.
7
+ g
8
+ ### 1.0.0.beta7 (2018-12-23)
9
+
10
+ * Fix bug in RecorderOptions where an incorrect object was referenced to read the user provided options.
11
+
12
+ ### 1.0.0.beta6 (2018-12-3)
13
+
14
+ * Stopping the screenrecorder now prints the failure reason given by the ffmpeg binary when `#stop` fails (Issue #7).
15
+ * Log file is now defaulted to `ffmpeg.log` instead of redirecting to nul.
16
+ * `log_level` now defaults to `Logger::ERROR` instead of `Logger::INFO`.
17
+
18
+ ### 1.0.0.beta5 (2018-11-26)
19
+
20
+ * `Screenrecorder` class is now `ScreenRecorder`.
21
+ * Add support for Linux.
22
+ * Now an exception raised if the gem fails to find `ffmpeg`.
23
+ * Fix a bug where a file named `nul` was created instead of directing the output to `NUL`.
24
+ * Fix a bug where `RecordingRegions#window_titles` was not returning anything because of missing return keyword.
data/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/ffmpeg-screenrecorder.svg)](https://badge.fury.io/rb/ffmpeg-screenrecorder)
4
4
  ![https://rubygems.org/gems/ffmpeg-screenrecorder](https://ruby-gem-downloads-badge.herokuapp.com/ffmpeg-screenrecorder?type=total)
5
+ [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](https://www.rubydoc.info/github/kapoorlakshya/ffmpeg-screenrecorder/master)
5
6
 
6
7
  Ruby gem to record your computer screen - desktop or specific application/window - using [FFmpeg](https://www.ffmpeg.org/).
7
8
 
@@ -11,9 +12,13 @@ Supports Windows and Linux as of version `1.0.0-beta5`. macOS support will be ad
11
12
 
12
13
  ## Installation
13
14
 
14
- [Download](https://www.ffmpeg.org/download.html), extract and add the location of `ffmpeg.exe` to your ENV `PATH` variable. Make sure you can execute ffmpeg:
15
+ On Microsoft Windows, [download](https://www.ffmpeg.org/download.html#build-windows), extract and add the location of `/bin` to your ENV `PATH` variable.
15
16
 
16
- C:\Users\Lakshya Kapoor>ffmpeg -version
17
+ For Linux, follow instructions here - https://ffmpeg.org/download.html#build-linux
18
+
19
+ Once installed, make sure ffmpeg is found:
20
+
21
+ $ ffmpeg -version
17
22
  ffmpeg version N-92132-g0a41a8bf29 Copyright (c) 2000-2018 the FFmpeg developers
18
23
  built with gcc 8.2.1 (GCC) 20180813
19
24
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-g
@@ -34,7 +39,7 @@ Supports Windows and Linux as of version `1.0.0-beta5`. macOS support will be ad
34
39
  libswresample 3. 2.100 / 3. 2.100
35
40
  libpostproc 55. 2.100 / 55. 2.100
36
41
 
37
- Add this line to your application's Gemfile:
42
+ Next, add this line to your application's Gemfile:
38
43
 
39
44
  ```ruby
40
45
  gem 'ffmpeg-screenrecorder'
@@ -50,29 +55,52 @@ Or install it yourself as:
50
55
 
51
56
  ## Usage
52
57
 
58
+ #### Required Options
59
+
60
+ - `:input` - `desktop` or application window name
61
+ - `:output` - Output file location/name
62
+ - `:framerate` - Capture FPS
63
+
64
+ #### Advanced Options
65
+
66
+ - `:log` - Defaults to `ffmpeg.log`
67
+ - `:log_level` for this gem
68
+
69
+ All other FFmpeg options can be passed through the `advanced` key. This feature is yet to be fully tested, so please feel free to report any bugs or request a feature.
70
+
71
+ <b>Example</b>:
72
+
73
+ ```
74
+ opts = { input: 'desktop',
75
+ output: 'recorder-test.mp4',
76
+ framerate: 30,
77
+ log: 'recorder.log',
78
+ log_level: Logger::DEBUG, # For gem
79
+ advanced: { loglevel: 'level+debug' } # For FFmpeg
80
+ }
81
+ ```
82
+
53
83
  ##### Record Desktop
54
84
 
55
85
  ```
56
- opts = { output: 'ffmpeg-screenrecorder-desktop.mp4',
57
- input: 'desktop',
86
+ opts = { input: 'desktop',
87
+ output: 'screenrecorder-desktop.mp4',
58
88
  framerate: 30.0 }
59
89
  @recorder = FFMPEG::ScreenRecorder.new(opts)
60
90
 
61
91
  # Start recording
62
- @recorder.start
92
+ @recorder.start #=> #<IO:fd 5>
63
93
 
64
94
  # ... Run tests or whatever you want to record
65
95
 
66
96
  # Stop recording
67
- @recorder.stop
97
+ @recorder.stop #=> #<FFMPEG::Movie...>
68
98
 
69
99
  # Recorded file
70
- @recorder.video #=> 'ffmpeg-screenrecorder-desktop.mp4'
71
-
72
- # ffmpeg log will be stored in 'ffmpeg.log'
100
+ @recorder.video #=> #<FFMPEG::Movie...>
73
101
  ```
74
102
 
75
- ##### Record Specific Application/Window - Windows Only
103
+ ##### Record Application Window - Microsoft Windows (`gdigrab`) Only
76
104
  ```
77
105
  require 'watir'
78
106
 
@@ -81,10 +109,10 @@ browser = Watir::Browser.new :firefox
81
109
  FFMPEG::RecordingRegions.fetch('firefox') # Name of exe
82
110
  #=> ["Mozilla Firefox"]
83
111
 
84
- opts = { output: 'ffmpeg-screenrecorder-firefox.mp4',
85
- input: FFMPEG::RecordingRegions.fetch('firefox').first,
112
+ opts = { input: FFMPEG::RecordingRegions.fetch('firefox').first,
113
+ output: 'screenrecorder-firefox.mp4',
86
114
  framerate: 30.0,
87
- log: 'ffmpeg-screenrecorder-firefox.txt' }
115
+ log: 'screenrecorder-firefox.log' }
88
116
  @recorder = FFMPEG::ScreenRecorder.new(opts)
89
117
 
90
118
  # Start recording
@@ -101,19 +129,28 @@ browser.quit
101
129
  ```
102
130
 
103
131
  <b>Note</b>:
104
- 1. Always stop the recording before closing the application. Otherwise, ffmpeg will force exit as soon as the window disappears and may produce an invalid video file.
105
- 2. If you're launching multiple applications or testing an application at different window sizes, recording the `desktop` is a better option.
132
+ - Always stop the recording before closing the application. Otherwise, ffmpeg will force exit as soon as the window disappears and may produce an invalid video file.
133
+ - If you're launching multiple applications or testing an application at different window sizes, recording the `desktop` is a better option.
106
134
 
107
135
  ## Development
108
136
 
109
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
137
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
110
138
 
111
139
  To install this gem onto your local machine, run `bundle exec rake install`.
112
140
 
113
141
  ## Contributing
114
142
 
115
- Bug reports and pull requests are welcome. Please follow the Ruby style guide here: https://github.com/rubocop-hq/ruby-style-guide
143
+ Bug reports and pull requests are welcome.
144
+
145
+ - Please update the specs for your code changes and run them locally with `bundle exec rake spec`.
146
+ - Follow the Ruby style guide and format your code - https://github.com/rubocop-hq/ruby-style-guide
116
147
 
117
148
  ## License
118
149
 
119
150
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
151
+
152
+ ## Credits
153
+
154
+ ![SauceLabs Logo](https://saucelabs.com/content/images/logo.png)
155
+
156
+ Thanks to [SauceLabs](https://saucelabs.com) for providing me with a free account. If you manage an open source project, you can get your free account [here](https://saucelabs.com/open-source).
data/bin/console CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'bundler/setup'
4
- require 'ffmpeg/screenrecorder'
4
+ require 'ffmpeg-screenrecorder'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -0,0 +1,3 @@
1
+ require 'streamio-ffmpeg'
2
+ require 'os'
3
+ require 'ffmpeg/screenrecorder'
@@ -22,10 +22,10 @@ module FFMPEG
22
22
  end
23
23
 
24
24
  #
25
- # Returns given input file or infile
25
+ # Returns given input file or input
26
26
  #
27
- def infile
28
- @options[:infile]
27
+ def input
28
+ @options[:input]
29
29
  end
30
30
 
31
31
  #
@@ -71,7 +71,7 @@ module FFMPEG
71
71
  vals = "-f #{determine_format} "
72
72
  vals << "-r #{@options[:framerate]} "
73
73
  vals << advanced_options if @options[:advanced]
74
- vals << "-i #{determine_infile} "
74
+ vals << "-i #{determine_input} "
75
75
  vals << @options[:output]
76
76
  vals << ffmpeg_log_to(@options[:log]) # If provided
77
77
  end
@@ -97,7 +97,7 @@ module FFMPEG
97
97
  # -r framerate
98
98
  # -i input
99
99
  # output
100
- return %i[framerate infile output] unless OS.linux?
100
+ return %i[framerate input output] unless OS.linux?
101
101
 
102
102
  %i[framerate output] # Linux
103
103
  end
@@ -126,18 +126,18 @@ module FFMPEG
126
126
  end
127
127
 
128
128
  #
129
- # Returns final infile parameter.
130
- # Adds title= qualifier to infile parameter
129
+ # Returns final input parameter.
130
+ # Adds title= qualifier to input parameter
131
131
  # unless the user is recording the desktop.
132
132
  #
133
- def determine_infile
133
+ def determine_input
134
134
  # x11grab doesn't support window capture
135
135
  return ':0.0' if OS.linux?
136
136
 
137
- return @options[:infile] if @options[:infile] == 'desktop'
137
+ return @options[:input] if @options[:input] == 'desktop'
138
138
 
139
139
  # Windows only
140
- %("title=#{@options[:infile]}")
140
+ %("title=#{@options[:input]}")
141
141
  end
142
142
 
143
143
  #
@@ -14,11 +14,10 @@ module FFMPEG
14
14
  #
15
15
  # Returns a cleaned up list of available window titles
16
16
  # for the given application (process) name.
17
- # Note: Only supports Windows OS as of version beta2.
18
17
  #
19
18
  def available_windows_for(application)
20
- return windows_os(application) if OS.windows?
21
- return linux_os(application) if OS.linux?
19
+ return windows_os_window(application) if OS.windows?
20
+ return linux_os_window(application) if OS.linux?
22
21
 
23
22
  raise NotImplementedError, 'Your OS is not supported.'
24
23
  end
@@ -26,12 +25,12 @@ module FFMPEG
26
25
  private
27
26
 
28
27
  #
29
- # Returns list of windows for Microsoft Windows
28
+ # Returns list of windows when using Microsoft Windows
30
29
  #
31
- def windows_os(application)
30
+ def windows_os_window(application)
32
31
  raw_list = `tasklist /v /fi "imagename eq #{application}.exe" /fo list | findstr Window`
33
- .split("\n")
34
- .reject { |title| title == 'Window Title: N/A' }
32
+ .split("\n")
33
+ .reject { |title| title == 'Window Title: N/A' }
35
34
  final_list = raw_list.map { |i| i.gsub('Window Title: ', '') } # Match ffmpeg expected format
36
35
  raise RecorderErrors::ApplicationNotFound, "No open windows found for: #{application}.exe" if final_list.empty?
37
36
 
@@ -39,15 +38,16 @@ module FFMPEG
39
38
  end
40
39
 
41
40
  #
42
- # Returns list of windows for Linux
41
+ # Returns list of windows when using Linux
43
42
  #
44
- def linux_os(application)
43
+ def linux_os_window(application)
44
+ FFMPEG.logger.warn 'Note: Default capture device x11grab on Linux does not support window recording.'
45
45
  raise DependencyNotFound, 'wmctrl is not installed. Run: sudo apt-get install wmctrl.' unless wmctrl_installed?
46
46
 
47
47
  final_list = `wmctrl -l | awk '{$3=""; $2=""; $1=""; print $0}'` # Returns all open windows
48
- .split("\n")
49
- .map(&:strip)
50
- .select { |t| t.match?(/#{application}/i) } # Narrow down to given application
48
+ .split("\n")
49
+ .map(&:strip)
50
+ .select { |t| t.match?(/#{application}/i) } # Narrow down to given application
51
51
  raise RecorderErrors::ApplicationNotFound, "No open windows found for: #{application}" if final_list.empty?
52
52
 
53
53
  final_list
@@ -1,5 +1,3 @@
1
- require 'streamio-ffmpeg'
2
- require 'os'
3
1
  require_relative 'recorder_errors'
4
2
  require_relative 'recorder_options'
5
3
  require_relative 'recording_regions'
@@ -26,6 +24,7 @@ module FFMPEG
26
24
  elapsed = Time.now - start_time
27
25
  FFMPEG.logger.debug "Process started in #{elapsed}s"
28
26
  FFMPEG.logger.info 'Recording...'
27
+ @process
29
28
  end
30
29
 
31
30
  #
@@ -62,10 +61,9 @@ module FFMPEG
62
61
  elapsed = wait_for_io_eof(5)
63
62
  @process.close_write # Close IO
64
63
  elapsed
65
-
66
64
  rescue Errno::EPIPE
67
65
  # Gets last line from log file
68
- err_line = get_lines_from_log(count = 2, :last)
66
+ err_line = get_lines_from_log(:last, 2)
69
67
  raise FFMPEG::Error, err_line
70
68
  end
71
69
 
@@ -117,7 +115,7 @@ module FFMPEG
117
115
  #
118
116
  # Returns lines from the log file
119
117
  #
120
- def get_lines_from_log(count = 2, position = :last)
118
+ def get_lines_from_log(position = :last, count = 2)
121
119
  f = File.open(options.log)
122
120
  lines = f.readlines
123
121
  lines = lines.last(count) if position == :last
@@ -1,5 +1,5 @@
1
1
  module FFMPEG
2
2
  class ScreenRecorder
3
- VERSION = '1.0.0.beta7'.freeze
3
+ VERSION = '1.0.0.beta8'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffmpeg-screenrecorder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta7
4
+ version: 1.0.0.beta8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lakshya Kapoor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-24 00:00:00.000000000 Z
11
+ date: 2019-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -134,6 +134,7 @@ files:
134
134
  - ".rspec"
135
135
  - ".rubocop.yml"
136
136
  - ".travis.yml"
137
+ - CHANGES.md
137
138
  - Gemfile
138
139
  - LICENSE.txt
139
140
  - README.md
@@ -141,7 +142,7 @@ files:
141
142
  - bin/console
142
143
  - bin/setup
143
144
  - ffmpeg-screenrecorder.gemspec
144
- - lib/ffmpeg.rb
145
+ - lib/ffmpeg-screenrecorder.rb
145
146
  - lib/ffmpeg/recorder_errors.rb
146
147
  - lib/ffmpeg/recorder_options.rb
147
148
  - lib/ffmpeg/recording_regions.rb
data/lib/ffmpeg.rb DELETED
@@ -1 +0,0 @@
1
- require 'ffmpeg/screenrecorder'