| 
									
										
										
										
											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=($@) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	[[ ${#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; } | 
					
						
							|  |  |  | } |