Last active
March 22, 2024 18:57
-
-
Save mkatychev/c1edf136ad36bc137134d098198903b3 to your computer and use it in GitHub Desktop.
Concatenate and convert differently sized videos into one
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
join_files() { | |
local input_n=() | |
local scale_to_n=("$SEP") | |
local concat_n=() | |
for i in $(seq $#); do | |
input_n+=("-i ${!i}") | |
((n = i - 1)) | |
concat_n+=("[v${n}][${n}:a]") | |
local scale_to="" | |
scale_to+="[${n}:v]scale=$SCALE:force_original_aspect_ratio=decrease:eval=frame," | |
scale_to+="pad=$SCALE:-1:-1:color=black[v${n}];$SEP" | |
scale_to_n+=("$scale_to") | |
done | |
local filter_complex="" | |
filter_complex+="${scale_to_n[*]}" | |
filter_complex+="${concat_n[*]}" | |
filter_complex+=" concat=n=$#:v=1:a=1 [v] [a]" | |
# shellcheck disable=SC2068 | |
command $FFMPEG ${input_n[@]} -n -filter_complex "$filter_complex" \ | |
-map "[v]" -map "[a]" -s hd480 -vcodec libx264 "$OUT_FILE" | |
} | |
FFMPEG="ffmpeg" | |
ARGS=() | |
SEP="" | |
while [[ $# -gt 0 ]]; do | |
case "$1" in | |
--scale) | |
SCALE="$2" | |
shift | |
shift | |
;; | |
--out) | |
OUT_FILE="$2" | |
shift | |
shift | |
;; | |
--debug) | |
FFMPEG="echo -e \nffmpeg" | |
SEP="\n" | |
shift | |
;; | |
*) | |
ARGS+=("$1") | |
shift | |
;; | |
esac | |
done | |
OUT_FILE=${OUT_FILE:?"--out <file> is undefined"} | |
SCALE=${SCALE:?"--scale <width:height> is undefined"} | |
# shellcheck disable=SC2068 | |
join_files ${ARGS[@]} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment