     (seq-do (lambda (util)
               (cl-assert (executable-find util) nil
                          (format "%s not installed" util)))
-            utils)
+            check-utils)
     (with-current-buffer proc-buffer
       (require 'shell)
       (shell-mode))

    (progress-reporter-update reporter))
  (comint-output-filter process string))

(defun dwim-shell-command--on-marked-files (script name utils &optional post-process-template on-completion)
  "Execute SCRIPT, using buffer NAME, FILES, and bin UTILS."
  (dwim-shell-command-execute-script script name (dwim-shell-command--marked-files) utils
                                     post-process-template on-completion))

(defun dwim-shell-command--marked-files ()
  "Return buffer file (if available) or marked files for a `dired' buffer."

  "Drop audio from all marked videos."
  (interactive)
  (dwim-shell-command--on-marked-files
   "Drop audio" "ffmpeg -i <<f>> -c copy -an <<fne>>_no_audio.<<e>>"
   :check-utils "ffmpeg"))

(defun dwim-shell-command ()
  "Execute DWIM shell command."
  (interactive)
  (dwim-shell-command--on-marked-files
   "DWIM shell command" (read-shell-command "DWIM shell command: ")))

(cl-defun dwim-shell-command-execute-script (buffer-name script &key files check-extensions check-utils post-process-template on-completion)
  "Execute SCRIPT, with BUFFER-NAME."
  (cl-assert buffer-name nil "Script must have a buffer name")
  (cl-assert (not (string-empty-p script)) nil "Script must not be empty")
  (when (stringp check-extensions)
    (setq check-extensions (list check-extensions)))
  (when (stringp check-utils)
    (setq check-utils (list check-utils)))
  (let* ((proc-buffer (generate-new-buffer buffer-name))
         (template script)
         (script "")
         (files-before)
