<feed xmlns='http://www.w3.org/2005/Atom'>
<title>transcode.sh, branch v1.0.1</title>
<subtitle>Batch transcode helper for media files using ffmpeg.</subtitle>
<id>https://git.dennisfink.me/transcode.sh/atom/?h=v1.0.1</id>
<link rel='self' href='https://git.dennisfink.me/transcode.sh/atom/?h=v1.0.1'/>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/'/>
<updated>2026-02-25T20:05:58Z</updated>
<entry>
<title>chore: bump version</title>
<updated>2026-02-25T20:05:58Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T20:05:58Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=9c47ae0deeee4ff2b70720e9e8fc9a2a33da0d7e'/>
<id>urn:sha1:9c47ae0deeee4ff2b70720e9e8fc9a2a33da0d7e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>revert(preset): return ffargs via nameref instead of global variable</title>
<updated>2026-02-25T20:03:25Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T20:02:08Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=d2de34528dd9ed67957b09b294abb28154d4a4c6'/>
<id>urn:sha1:d2de34528dd9ed67957b09b294abb28154d4a4c6</id>
<content type='text'>
Reverts commit b10b81fefbe529be7db14ca65ec4b4a293782d39.

The nameref approach did not work as intended; reverting to restore
correct behaviour.
</content>
</entry>
<entry>
<title>chore: update revision date</title>
<updated>2026-02-25T19:23:52Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T19:23:52Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=71ee4e8b74e8c9eeeb5529ce17f922418f800b38'/>
<id>urn:sha1:71ee4e8b74e8c9eeeb5529ce17f922418f800b38</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(skip): join codec keys before passing to verbose()</title>
<updated>2026-02-25T19:21:08Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T19:21:08Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=f3efff4ecf5ee68c4c8b00197e7706b3c91b6c9b'/>
<id>urn:sha1:f3efff4ecf5ee68c4c8b00197e7706b3c91b6c9b</id>
<content type='text'>
Joining into a single string ensures the entire list renders uniformly.
</content>
</entry>
<entry>
<title>feat(core): add warn() and downgrade --saving-file diagnostic to warning</title>
<updated>2026-02-25T19:20:48Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T19:18:32Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=c5726497460845f55b74e19d9a40d5f949656499'/>
<id>urn:sha1:c5726497460845f55b74e19d9a40d5f949656499</id>
<content type='text'>
The --saving-file without --saving condition is non-fatal, so using
error() was misleading. Introduce warn() (yellow output, respects
--quiet) and use it for this diagnostic instead.
</content>
</entry>
<entry>
<title>feat(core): add batch progress counter to processing output</title>
<updated>2026-02-25T08:17:57Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T08:17:57Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=c7b0c8790709186811ba44bda04ebcc8c81f8256'/>
<id>urn:sha1:c7b0c8790709186811ba44bda04ebcc8c81f8256</id>
<content type='text'>
encode_one now receives the current index and total file count and
includes them in the "Processing" message (e.g. "Processing [2/7]:
file.mkv"). Both the CLI and encode-file paths pre-collect their file
lists into arrays so the total is known before encoding begins.

Also fix a typo in the encode_one step comment ("preserverse" -&gt;
"preserves") and add a note on the filename variable explaining the
single-extension stripping behaviour for multi-dot filenames.
</content>
</entry>
<entry>
<title>refactor(core): combine ffprobe calls and simplify pixel format selection</title>
<updated>2026-02-25T08:17:24Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T08:17:24Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=6061504cdc9216c085ef334726bbf7ed3af4ea3f'/>
<id>urn:sha1:6061504cdc9216c085ef334726bbf7ed3af4ea3f</id>
<content type='text'>
Merge the two separate ffprobe invocations for codec and pixel format
into one, halving the per-file probe overhead on large batches. Both
error messages now include the filename for easier diagnosis in batch
runs.

Replace the three-way nested if/elif/else for pixel format selection
with two independent case statements — one for chroma subsampling, one
for bit depth — that compose the output format string from two parts.
This eliminates the repetition across the three subsampling branches
and makes adding a new bit depth or subsampling variant a single-line
change. Also add a verbose fallback warning for exotic formats that
don't match any known subsampling pattern.
</content>
</entry>
<entry>
<title>refactor(preset): return ffargs via nameref instead of global variable</title>
<updated>2026-02-25T08:16:23Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T08:16:23Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=b10b81fefbe529be7db14ca65ec4b4a293782d39'/>
<id>urn:sha1:b10b81fefbe529be7db14ca65ec4b4a293782d39</id>
<content type='text'>
load_preset now accepts the name of the caller's array as a second
argument and populates it via a nameref (local -n), replacing the
previous implicit global ffargs. The preset is sourced into a local
ffargs contained within load_preset's scope and copied to the caller
on return.

encode_one declares its own local ffargs=() and passes its name to
load_preset, making the data flow explicit and eliminating the implicit
coupling through the global. The nameref variable is prefixed with an
underscore to avoid accidental aliasing of any same-named local in the
calling scope.
</content>
</entry>
<entry>
<title>fix(cli): improve output consistency and verbose diagnostics</title>
<updated>2026-02-25T08:14:53Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T08:14:53Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=48e3265ea845437bce4c4895275470e8a1776073'/>
<id>urn:sha1:48e3265ea845437bce4c4895275470e8a1776073</id>
<content type='text'>
Replace the full help page on no-args with a short usage hint to stderr,
reserving the full help for explicit -h/--help invocations.

Print the active codec skip list at startup under --verbose so
unexpected skips can be diagnosed without resorting to DEBUG mode.

Include the resolved ffmpeg command in dry-run --verbose output, which
is useful for preset authors verifying their ffargs expansion.

Fix the only-if-smaller message to follow the "label: value" convention
used throughout the script.
</content>
</entry>
<entry>
<title>fix(cli): validate empty option values and improve --saving-file handling</title>
<updated>2026-02-25T08:13:36Z</updated>
<author>
<name>Dennis Fink</name>
</author>
<published>2026-02-25T08:13:36Z</published>
<link rel='alternate' type='text/html' href='https://git.dennisfink.me/transcode.sh/commit/?id=fa3530b214b63701dda5fd8b53aefeb0f0d776c3'/>
<id>urn:sha1:fa3530b214b63701dda5fd8b53aefeb0f0d776c3</id>
<content type='text'>
Reject empty values for --encodefile, --saving-file, and --preset in
both the space-separated and equals forms (e.g. --preset= now exits
with a clear error instead of failing later with a confusing message
from the allowlist check).

Track whether --saving-file was set explicitly via SAVING_FILE_EXPLICIT.
Warn when --saving-file is used without --saving, but do not exit, to
allow the combination in aliases and wrapper scripts.

Change the savings log format from space-separated to TSV and write a
header line on first creation, making the file easier to parse both by
eye and programmatically.
</content>
</entry>
</feed>
