Fix twitch vid compression failing because of extra spaces in filename

This commit is contained in:
Michael Campagnaro 2024-07-26 11:15:04 -04:00
parent c773b46cbd
commit 2184b8bf40

View File

@ -63,6 +63,7 @@ expand_path() {
ret=$(readlink -m "$ret") ret=$(readlink -m "$ret")
echo $ret echo $ret
} }
is_absolute_unix_path() { is_absolute_unix_path() {
if [[ $1 =~ ^/ ]]; then echo 1; else echo 0; fi if [[ $1 =~ ^/ ]]; then echo 1; else echo 0; fi
} }
@ -119,6 +120,16 @@ open_explorer_here() {
fi fi
} }
remove_extra_spaces() {
# Replace consecutive spaces with a single space.
#
# We're using this in the various vid/audio download functions because
# Windows seems to strip extra spaces when creating a file, so we need
# to match this behaviour in order to do post-processing after downloading.
ret=$(echo "$1" | tr -s ' ')
echo "$ret"
}
################## ##################
# Building code # Building code
################## ##################
@ -352,6 +363,8 @@ make_vid_dir_and_cd_into() {
fi fi
fi fi
dir_name=$(remove_extra_spaces "$dir_name")
printf "${BOLD}Creating directory ${YELLOW}'$dir_name'${NORMAL}\n" printf "${BOLD}Creating directory ${YELLOW}'$dir_name'${NORMAL}\n"
mkdir "$dir_name" 2>/dev/null mkdir "$dir_name" 2>/dev/null
cd "$dir_name" cd "$dir_name"
@ -466,9 +479,10 @@ download_youtube_vid() {
# Get the video filename. # Get the video filename.
local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url) local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url)
filename=$(remove_extra_spaces "$filename")
printf "filename: $filename\n" printf "filename: $filename\n"
# Download # Download the video.
local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url" local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url"
eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string. eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string.
error=$? error=$?
@ -604,8 +618,10 @@ function download_youtube_audio() {
# Get the audio filename. # Get the audio filename.
local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url) local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url)
filename=$(remove_extra_spaces "$filename")
printf "filename: $filename\n" printf "filename: $filename\n"
# Download the audio.
local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url" local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url"
eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string. eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string.
error=$? error=$?
@ -625,6 +641,7 @@ function download_youtube_audio() {
actually_download_twitch_chat() { actually_download_twitch_chat() {
local url="$1" local url="$1"
local filename="$2" local filename="$2"
filename=$(remove_extra_spaces "$filename")
rechat.exe -d $url "$filename.json" rechat.exe -d $url "$filename.json"
if [[ -f "$filename.json" ]]; then if [[ -f "$filename.json" ]]; then
@ -738,16 +755,18 @@ download_twitch_vid() {
# Get the video filename. # Get the video filename.
local filename=$(yt-dlp.exe --get-filename -f $yt_dlp_format -o "$name_format.%(ext)s" $opts $url) local filename=$(yt-dlp.exe --get-filename -f $yt_dlp_format -o "$name_format.%(ext)s" $opts $url)
filename=$(remove_extra_spaces "$filename")
printf "filename: $filename\n"
# Download # Download the video.
if [[ $subscriber_vod == "0" ]]; then if [[ $subscriber_vod == "0" ]]; then
local cmd="streamlink.exe --twitch-low-latency --twitch-disable-ads --twitch-disable-hosting --force --force-progress $opts $url $streamlink_format -O | ffmpeg -i pipe:0 -c copy \"$filename\"" printf "${YELLOW}${BOLD}\nUsing streamlink to download...${NORMAL}\n"
local cmd="streamlink.exe --twitch-low-latency --twitch-disable-ads --twitch-disable-hosting --force --progress=force $opts $url $streamlink_format -O | ffmpeg -i pipe:0 -c copy \"$filename\""
else else
printf "${YELLOW}${BOLD}\nUsing yt-dlp to download...${NORMAL}\n"
local cmd="yt-dlp.exe -f $yt_dlp_format -o \"$filename\" $opts $url" local cmd="yt-dlp.exe -f $yt_dlp_format -o \"$filename\" $opts $url"
fi fi
printf "${YELLOW}${BOLD}Downloading video\n${NORMAL}"
eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string. eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string.
error=$? error=$?
@ -759,9 +778,9 @@ download_twitch_vid() {
if [[ $compress == "1" ]]; then if [[ $compress == "1" ]]; then
local temp_name="temp_${RANDOM}" local temp_name="temp_${RANDOM}"
extension="${filename##*.}"
# 0=cpu, 1=gpu # 0=cpu, 1=gpu
compress-video "$filename" "$temp_name" 0 compress-video "$filename" "$temp_name" 0
extension="${filename##*.}"
mv "$filename" "orig_$filename" mv "$filename" "orig_$filename"
mv $temp_name.$extension "$filename" mv $temp_name.$extension "$filename"
printf "${BOLD}Make sure to delete the original video file\n${NORMAL}" printf "${BOLD}Make sure to delete the original video file\n${NORMAL}"
@ -818,9 +837,12 @@ download_vimeo_vid() {
local name_format="%(upload_date>%Y-%m-%d)s-shortname-vimeo-%(id)s" local name_format="%(upload_date>%Y-%m-%d)s-shortname-vimeo-%(id)s"
fi fi
# Download the video. # Get the video filename.
local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url) local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url)
filename=$(remove_extra_spaces "$filename")
printf "filename: $filename\n"
# Download the video.
local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url" local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url"
eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string. eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string.
@ -885,9 +907,12 @@ download_twitter_vid() {
format="b" format="b"
fi fi
# Download the video. # Get the video filename.
local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url) local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url)
filename=$(remove_extra_spaces "$filename")
printf "filename: $filename\n"
# Download the video.
local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url" local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url"
eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string. eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string.
@ -934,9 +959,12 @@ download_instagram_vid() {
format="b" # best available format="b" # best available
# Download the video. # Get the video filename.
local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url) local filename=$(yt-dlp.exe --get-filename -f $format -o "$name_format.%(ext)s" $opts $url)
filename=$(remove_extra_spaces "$filename")
printf "filename: $filename\n"
# Download the video.
local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url" local cmd="yt-dlp.exe -f $format -o \"$filename\" $opts $url"
eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string. eval $cmd # Need to eval in order to preserve the quotes wrapping the filename format string.