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