2023-02-21 18:44:27 -07:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								#!/bin/zsh
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								use media/youtube
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								#####################################################################
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2024-02-06 14:06:44 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								MAIN() {
							 | 
						
					
						
							
								
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
									local URLS=($@)
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2024-02-12 23:44:43 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
									[[ ${#URLS[@]} -eq 0 ]] && URLS=($(echo '' | FZF_USER_INPUT 'enter URL'))
							 | 
						
					
						
							
								
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
									[[ ${#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; }
							 | 
						
					
						
							
								
									
										
										
										
											2024-02-12 23:44:43 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
									START_TIME=$(echo 0 | FZF_USER_INPUT "enter start time (0 ≤ t < $LENGTH)")
							 | 
						
					
						
							
								
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
									[ ! $START_TIME ] && ABORT
							 | 
						
					
						
							
								
									
										
										
										
											2024-02-12 23:44:43 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
									END_TIME=$(echo $LENGTH | FZF_USER_INPUT "enter end time ($START_TIME > t ≥ $LENGTH)")
							 | 
						
					
						
							
								
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
									[ ! $END_TIME ] && ABORT
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									STATUS
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									STATUS "video      : $FILENAME"
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									STATUS "start time : $START_TIME"
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									STATUS "end time   : $END_TIME"
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									STATUS
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
									OUTPUT_FILE=$(echo '' \
							 | 
						
					
						
							
								
									
										
										
										
											2024-02-12 23:44:43 -07:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
										| FZF_USER_INPUT 'what should I call this clip? (.mp3)' \
							 | 
						
					
						
							
								
									
										
										
										
											2023-02-21 18:44:27 -07:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
										| 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; }
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								}
							 |