Compare commits

...

2 commits

Author SHA1 Message Date
dabruh
b1b8ce749b refactor: standardize indentation in videncode script 2025-11-17 20:06:18 +01:00
dabruh
530c9307d4 feat: add audio mode option to videncode script 2025-11-17 20:04:14 +01:00

View file

@ -44,6 +44,7 @@ OVERWRITE_DIFFERENT=false
IS_BATCH=false
INPUT_DIR=""
INPUT_FILES=()
AUDIO_MODE="transcode"
# Prints usage information to stdout.
usage() {
@ -62,6 +63,7 @@ Usage: $(basename "$0") -i input.mp4 [options]
--max-h Maximum height in pixels (default: ${DEFAULT_MAX_H})
--overwrite-same Overwrite output even if duration matches input
--overwrite-different Overwrite output even if duration differs from input
--audio-mode Audio mode: transcode (default) or copy
-h, --help Show this help
EOF
}
@ -75,20 +77,67 @@ parse_args() {
while [[ $# -gt 0 ]]; do
case "$1" in
-i|--input) INFILE="$2"; shift 2 ;;
-o|--output) OUTFILE="$2"; shift 2 ;;
-c|--crf) CRF="$2"; shift 2 ;;
-p|--preset) PRESET="$2"; shift 2 ;;
-m|--maxrate) MAXRATE="$2"; shift 2 ;;
-b|--bufsize) BUFSIZE="$2"; shift 2 ;;
--extra) EXTRA_ARGS+=("$2"); shift 2 ;;
--max-w) MAX_W="$2"; shift 2 ;;
--max-h) MAX_H="$2"; shift 2 ;;
--overwrite-same) OVERWRITE_SAME=true; shift ;;
--overwrite-different) OVERWRITE_DIFFERENT=true; shift ;;
-h|--help) usage; exit 0 ;;
--) shift; break ;;
*) echo "Unknown argument: $1" >&2; usage; exit 1 ;;
-i | --input)
INFILE="$2"
shift 2
;;
-o | --output)
OUTFILE="$2"
shift 2
;;
-c | --crf)
CRF="$2"
shift 2
;;
-p | --preset)
PRESET="$2"
shift 2
;;
-m | --maxrate)
MAXRATE="$2"
shift 2
;;
-b | --bufsize)
BUFSIZE="$2"
shift 2
;;
--extra)
EXTRA_ARGS+=("$2")
shift 2
;;
--max-w)
MAX_W="$2"
shift 2
;;
--max-h)
MAX_H="$2"
shift 2
;;
--overwrite-same)
OVERWRITE_SAME=true
shift
;;
--overwrite-different)
OVERWRITE_DIFFERENT=true
shift
;;
--audio-mode)
AUDIO_MODE="$2"
shift 2
;;
-h | --help)
usage
exit 0
;;
--)
shift
break
;;
*)
echo "Unknown argument: $1" >&2
usage
exit 1
;;
esac
done
}
@ -148,8 +197,13 @@ validate_input_single() {
# Assembles the full ffmpeg command array with all configured options.
build_ffmpeg_cmd() {
# Sets audio flags to copy streams unchanged for fidelity.
local audio_flags=("-c:a" "copy")
# Sets audio flags to transcode to Opus or copy streams unchanged.
local audio_flags
if [[ "$AUDIO_MODE" == "transcode" ]]; then
audio_flags=("-c:a" "libopus")
else
audio_flags=("-c:a" "copy")
fi
# Constructs the ffmpeg video scaling filter to fit within max dimensions while preserving aspect ratio.
# Scale logic: for landscape (w>h), constrain width to MAX_W and height to MAX_H;