| Commit message (Collapse) | Author | Age |
| | |
|
| |
|
|
|
| |
Replaces $$.$RANDOM with mktemp, which provides cryptographically
random names and atomic file creation.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Validate the nice value is an integer in [-20, 19] at startup rather
than letting nice(1) fail with a cryptic error at encode time.
In encode_one, move the "Processing" message after the empty-string
guard so it is not printed for blank lines, include the filename in the
"Not found" error, and add a readability check so unreadable files are
rejected with a clear message before ffprobe is invoked.
Validate that the encode file (-f) exists before entering the read
loop, exiting with a usage error rather than a silent empty run.
|
| |
|
|
|
|
|
|
|
|
| |
Preset files are executed as shell code. A world-writable preset file
could be modified by any local user to inject arbitrary commands.
Symlinks are resolved before the permission check because stat on a
symlink returns the permissions of the link itself (always 777 on
Linux) rather than those of the target. readlink -f is used with a
fallback to realpath for macOS/BSD compatibility.
|
| |
|
|
|
|
|
| |
Aliases are never defined or used in the script, making this option
redundant. Removing it reduces the attack surface slightly and avoids
unexpected behaviour if the script is ever sourced into a shell with
user-defined aliases.
|
| |
|
|
|
| |
Consistent with the DEBUG variable which is also compared against 1
throughout the script.
|
| |
|
|
|
|
|
| |
Aligns with the two-argument calling convention used elsewhere in the
script, where the bold label and the highlighted value are passed as
separate arguments. Also moves the preset name out of the error string
in load_preset for the same reason.
|
| |
|
|
|
|
|
| |
Previously only output_pixel_format was mentioned. All three variables
(input_codec, input_pixel_format, output_pixel_format) are now listed
with descriptions in the script header comment, the README, and the
man page.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
Both the README and the man page now explain that the script always
passes -map 0, -map_metadata 0, -map_chapters 0, and -c copy to
ffmpeg before appending the preset's ffargs array. This context is
important for preset authors, who only need to override the streams
they intend to re-encode.
Also fix a minor blockquote rendering issue in the README (missing
blank line before the fenced code block in the PATH note).
|
|
|
Batch transcode helper for media files using ffmpeg. Encoding parameters
are supplied by user-defined preset files (shell snippets that set an
`ffargs` array) stored under
${XDG_CONFIG_HOME:-$HOME/.config}/transcode.sh/presets/.
Key capabilities:
- Probes input codec and pixel format via ffprobe; derives an output
pixel format that preserves chroma subsampling and bit depth.
- Per-user and per-invocation codec skip lists to leave already-encoded
files untouched.
- Atomic in-place replacement: encodes to a temp file in the same
directory, then renames on success.
- --only-if-smaller: discard the result if it is larger than the
original.
- --saving: append filename, original/new sizes and percentage saved to
a log file after each successful encode.
- --dry-run, --verbose, --quiet, --nice and --continue flags.
- Respects the NO_COLOR standard.
- Script hardening: strict PATH, safe IFS, errtrace, nounset, pipefail.
Also included:
- Man page (transcode.sh.1)
- Bash completion script (transcode.sh.bash-completion)
- README.md
- .gitmessage commit message template
License: BSD-3-Clause
|