lib/ffmprb/util.rb in ffmprb-0.11.3 vs lib/ffmprb/util.rb in ffmprb-0.11.4
- old
+ new
@@ -16,12 +16,14 @@
def ffprobe(*args, limit: nil, timeout: cmd_timeout)
sh *ffprobe_cmd, *args, limit: limit, timeout: timeout
end
+ # TODO warn on broken pipes incompatibility with 4.x or something
def ffmpeg(*args, limit: nil, timeout: cmd_timeout, ignore_broken_pipes: true)
- args = ['-loglevel', 'debug'] + args if Ffmprb.ffmpeg_debug
+ args = ['-loglevel', 'debug'] + args if
+ Ffmprb.ffmpeg_debug
sh *ffmpeg_cmd, *args, output: :stderr, limit: limit, timeout: timeout, ignore_broken_pipes: ignore_broken_pipes
end
def sh(*cmd, input: nil, output: :stdout, limit: nil, timeout: cmd_timeout, ignore_broken_pipes: false)
cmd = cmd.map &:to_s unless cmd.size == 1
@@ -40,11 +42,11 @@
Thread.timeout_or_live(limit, log: "while waiting for `#{cmd_str}`", timeout: timeout) do |time|
value = wait_thr.value
status = value.exitstatus # NOTE blocking
if status != 0
- if value.signaled? && value.termsig == Signal.list['PIPE']
+ if value.signaled? && value.termsig == Signal.list['PIPE'] # TODO! this doesn't seem to work for ffmpeg 4.x (it ignores SIGPIPEs)
if ignore_broken_pipes
Ffmprb.logger.info "Ignoring broken pipe: #{cmd_str}"
else
fail BrokenPipeError, cmd_str
end
@@ -52,10 +54,10 @@
status ||= "sig##{value.termsig}"
fail Error, "#{cmd_str} (#{status}):\n#{stderr_r.read}"
end
end
end
- Ffmprb.logger.debug "FINISHED: #{cmd_str}"
+ Ffmprb.logger.debug{"FINISHED: #{cmd_str}"}
Thread.join_children! limit, timeout: timeout
# NOTE only one of them will return non-nil, see above
stdout_r.read || stderr_r.read