aboutsummaryrefslogtreecommitdiff
path: root/transcode.sh.1
diff options
context:
space:
mode:
authorDennis Fink2026-05-30 21:16:51 +0200
committerDennis Fink2026-05-30 21:16:51 +0200
commit8d98f988a52dbfd7edc074725c628f24c20c270a (patch)
tree8899c3567e0cf0808fedf85a750b61ad3b375580 /transcode.sh.1
parent0d2d0535c9eada6beb928e57ac8f992801f00602 (diff)
downloadtranscode.sh-8d98f988a52dbfd7edc074725c628f24c20c270a.tar.gz
transcode.sh-8d98f988a52dbfd7edc074725c628f24c20c270a.zip
feat(output): add no-replacement output mode
Add --output-dir and [processing].output_dir so encoded files can be written to an existing output directory without replacing, moving, or deleting originals. Preserve input paths below the output directory, avoid overwriting existing outputs with numeric suffixes, and keep --backup-dir compatible with --output-dir. Update finalization, backup, and size-report handling so replacement mode and output-dir mode share the same output path flow. Document the new mode in the README and man page, add bash completion for the new option, and expand the size report schema with input and output paths. Closes #7.
Diffstat (limited to 'transcode.sh.1')
-rw-r--r--transcode.sh.167
1 files changed, 60 insertions, 7 deletions
diff --git a/transcode.sh.1 b/transcode.sh.1
index 7093397..7d39eca 100644
--- a/transcode.sh.1
+++ b/transcode.sh.1
@@ -11,7 +11,8 @@ transcode.sh \- batch transcode helper for media files using ffmpeg
is a batch transcoding wrapper around
.BR ffmpeg (1)
that processes one or more media files in place, replacing each with a
-re-encoded version.
+re-encoded version unless no-replacement output mode is enabled with
+.BR \-\-output\-dir .
.PP
Encoding parameters are not hard-coded; instead they are supplied by
.IR presets ,
@@ -153,10 +154,23 @@ Copy originals to \fIDIR\fR before replacing them after successful encoding.
not. Backups preserve the source file's absolute path below \fIDIR\fR, and
existing backup files are not overwritten.
.TP
+.BR \-\-output\-dir " \fIDIR\fR, " \-\-output\-dir= \fIDIR\fR
+Write encoded files below \fIDIR\fR instead of replacing originals.
+\fIDIR\fR must already exist; the script exits with a usage error if it does
+not. Relative input paths are preserved below \fIDIR\fR, while absolute input
+paths are stored without their leading slash. Existing output files are not
+overwritten; numeric suffixes such as
+.B .1
+or
+.B .2
+are appended when needed.
+.TP
.BR \-l ", " \-\-only\-if\-smaller
-After encoding, replace the original only when the new file is strictly
-smaller. If the transcoded file is larger the temporary file is removed
-and the original is kept unchanged.
+After encoding, keep the new output only when it is strictly smaller than the
+original. In replacement mode, a larger output is removed and the original is
+kept unchanged. In
+.BR \-\-output\-dir
+mode, a larger output is removed and no encoded copy is kept.
.TP
.BR \-\-no\-only\-if\-smaller
After encoding, replace the original also if the new file is bigger.
@@ -275,7 +289,7 @@ which prints every command as it is executed.
.B XDG_CONFIG_HOME
Base directory for user configuration. Defaults to
.BR $HOME/.config .
-.SH BACKUPS
+.SH BACKUPS AND OUTPUT DIRECTORIES
When
.BR \-\-backup\-dir
is used, backups are only created after
@@ -292,6 +306,25 @@ already exists, a numeric suffix such as
or
.B .2
is appended.
+.PP
+When
+.BR \-\-output\-dir
+is used, originals are never replaced, moved, or deleted. Encoded files are
+written below the existing output directory. Relative input paths are preserved
+(for example,
+.I movies/a.mp4
+becomes
+.I encoded/movies/a.mp4
+when the output directory is
+.IR encoded ),
+and absolute input paths are stored without their leading slash. Existing output
+files are not overwritten; numeric suffixes are appended as needed.
+.PP
+.BR \-\-backup\-dir
+and
+.BR \-\-output\-dir
+are compatible. When both are set, the original is copied to the backup
+directory and the encoded file is written to the output directory.
.SH SIZE REPORT TSV
When
.BR \-\-size\-report
@@ -299,7 +332,7 @@ is enabled, the TSV log uses this schema:
.PP
.RS
.nf
-status filename original_bytes new_bytes saved_pct
+status input_path output_path original_bytes new_bytes saved_pct
.fi
.RE
.PP
@@ -309,7 +342,13 @@ The status column is one of
.BR skipped_larger
or
.BR failed .
-Failed rows may leave output-size fields empty when no encoded output exists.
+The
+.B input_path
+field records the original input. The
+.B output_path
+field records the final encoded path for successful encodes and size-based
+skips, and may be empty when no encoded output exists. Failed rows may leave
+output-size fields empty when no encoded output exists.
.PP
.SH FILES
.TP
@@ -461,6 +500,12 @@ encoding and before replacement. Equivalent to
.BR \-\-backup\-dir .
CLI \fB--backup-dir\fR takes precedence.
.TP
+.B [processing] output_dir
+String. Existing directory where encoded files are written without replacing
+originals. Equivalent to
+.BR \-\-output\-dir .
+CLI \fB--output-dir\fR takes precedence.
+.TP
.B [processing] only_if_smaller
Boolean. Equivalent to
.BR \-\-only\-if\-smaller / \-\-no\-only\-if\-smaller .
@@ -547,6 +592,14 @@ transcode.sh \-n \-v my_movie.mkv
.fi
.RE
.PP
+Write encoded copies elsewhere without replacing originals:
+.PP
+.RS
+.nf
+transcode.sh \-\-preset av1 \-\-output\-dir ./encoded video.mp4
+.fi
+.RE
+.PP
Use a custom preset and only keep the result if it is smaller:
.PP
.RS