Files
scwrypts/zsh/media/youtube/get-audio-clip
T

55 lines
1.5 KiB
Bash
Raw Normal View History

2023-02-21 18:44:27 -07:00
#!/bin/zsh
DEPENDENCIES+=()
REQUIRED_ENV+=()
use media/youtube
CHECK_ENVIRONMENT
#####################################################################
GET_AUDIO_CLIP() {
local URLS=($@)
[[ ${#URLS[@]} -eq 0 ]] && URLS=($(echo '' | FZF_HEAD 'enter URL'))
[[ ${#URLS[@]} -eq 0 ]] && ABORT
local FILENAME=$(YT__GET_FILENAME $URLS)
[ ! $FILENAME ] && ERROR "unable to download '$URLS'"
INPUT_FILE="$YT__OUTPUT_DIR/$FILENAME"
[ ! -f "$INPUT_FILE" ] && {
SCWRYPTS__RUN youtube/download -- $URLS || return 1
}
SUCCESS "video download '$FILENAME' detected!"
LENGTH=$(GET_VIDEO_LENGTH "$INPUT_FILE")
[ ! $LENGTH ] && { ERROR "unable to determine video length for '$INPUT_FILE'"; return 2; }
START_TIME=$(echo 0 | FZF_HEAD "enter start time (0 ≤ t < $LENGTH)")
[ ! $START_TIME ] && ABORT
END_TIME=$(echo $LENGTH | FZF_HEAD "enter end time ($START_TIME > t ≥ $LENGTH)")
[ ! $END_TIME ] && ABORT
STATUS
STATUS "video : $FILENAME"
STATUS "start time : $START_TIME"
STATUS "end time : $END_TIME"
STATUS
OUTPUT_FILE=$(echo '' \
| FZF_HEAD 'what should I call this clip? (.mp3)' \
| sed 's/\.mp3$//' \
)
[ ! $OUTPUT_FILE ] && ABORT
OUTPUT_FILE="$YT__OUTPUT_DIR/$OUTPUT_FILE.mp3"
ffmpeg -i "$INPUT_FILE" -q:a 0 -map a \
-ss $START_TIME -t $(($END_TIME - $START_TIME))\
"$OUTPUT_FILE" \
&& SUCCESS "created clip '$OUTPUT_FILE'" \
|| { ERROR "error creating clip '$(basename $OUTPUT_FILE)' (see above)"; return 3; }
}
#####################################################################
GET_AUDIO_CLIP $@