I have noticed lots of nostriches posting hour long you tube links to #nostr while they actually want to share only a small one or two minute clip .. So here is a simple vibe code
a bash script to download clips from youtube :
- Copy paste this in any folder
- cd <folder> and then ./<script>
- It will ask a you tube usr , starting time of clip and the duration
- and run
- Video wil be downloaded to downloads folder and clip will be saved in the same folder where you have the script installed .. under subfolder "clips"
Post the clip to nostr and enjoy :-)
Dependencies ๐ฅ
Install ffmpeg and youtube-dl ( and or yt-dlp) before you run
Login to reply
Replies (3)
#!/bin/bash
# Function to check if a command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Check for required dependencies
check_dependencies() {
local missing_deps=()
if ! command_exists ffmpeg; then
missing_deps+=("ffmpeg")
fi
if ! command_exists yt-dlp && ! command_exists youtube-dl; then
missing_deps+=("yt-dlp or youtube-dl")
fi
if [ ${#missing_deps[@]} -ne 0 ]; then
echo "Error: The following dependencies are missing:"
for dep in "${missing_deps[@]}"; do
echo " - $dep"
done
echo "Please install them before running this script."
exit 1
fi
}
# Function to download YouTube video
download_video() {
local url="$1"
local output_dir="$2"
echo "Starting download in the background..."
if command_exists yt-dlp; then
yt-dlp -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' \
-o "$output_dir/%(title)s.%(ext)s" "$url" >/dev/null 2>&1 &
else
youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best' \
-o "$output_dir/%(title)s.%(ext)s" "$url" >/dev/null 2>&1 &
fi
local download_pid=$!
echo "Download started with PID: $download_pid"
return $download_pid
}
# Function to validate timestamp format
validate_timestamp() {
local timestamp="$1"
if ! [[ $timestamp =~ ^[0-9]{2}:[0-9]{2}:[0-9]{2}$ ]]; then
echo "Error: Invalid timestamp format. Use HH:MM:SS"
return 1
fi
return 0
}
# Function to extract clip
extract_clip() {
local input_file="$1"
local start_time="$2"
local duration="$3"
local output_file="$4"
echo "Extracting clip from $start_time for duration $duration..."
ffmpeg -i "$input_file" -ss "$start_time" -t "$duration" \
-c:v copy -c:a copy "$output_file"
if [ $? -eq 0 ]; then
echo "Successfully extracted clip to $output_file"
return 0
else
echo "Error: Failed to extract clip"
return 1
fi
}
# Main script
main() {
check_dependencies
# Create downloads directory if it doesn't exist
mkdir -p downloads
# Get YouTube URL
read -p "Enter YouTube URL: " youtube_url
# Start download in background
download_pid=$(download_video "$youtube_url" "downloads")
# Get clip details
echo -e "\nEnter the clip details:"
read -p "Start time (HH:MM:SS): " start_time
while ! validate_timestamp "$start_time"; do
read -p "Please enter a valid start time (HH:MM:SS): " start_time
done
read -p "Duration (HH:MM:SS): " duration
while ! validate_timestamp "$duration"; do
read -p "Please enter a valid duration (HH:MM:SS): " duration
done
# Wait for download to complete
echo -e "\nWaiting for download to complete..."
wait $download_pid
# Get the downloaded file
downloaded_file=$(ls -t downloads/*.mp4 | head -1)
if [ -z "$downloaded_file" ]; then
echo "Error: No video file found in downloads directory"
exit 1
fi
# Generate output filename
output_file="clips/$(basename "$downloaded_file" .mp4)_clip.mp4"
mkdir -p clips
# Ask for confirmation
echo -e "\nClip details:"
echo "Start time: $start_time"
echo "Duration: $duration"
echo "Output file: $output_file"
read -p "Do you want to proceed with extraction? (y/n): " confirm
if [[ $confirm =~ ^[Yy]$ ]]; then
extract_clip "$downloaded_file" "$start_time" "$duration" "$output_file"
else
echo "Extraction cancelled"
exit 0
fi
}
# Run main function
main
Here is one I created
Here ..
I have noticed lots of nostriches posting hour long you tube links to #nostr while they actually want to share only a small one or two minute clip .. So here is a simple vibe code
a bash script to download clips from youtube :
- Copy paste this in any folder
- cd <folder> and then ./<script>
- It will ask a you tube usr , starting time of clip and the duration
- and run
- Video wil be downloaded to downloads folder and clip will be saved in the same folder where you have the script installed .. under subfolder "clips"
Post the clip to nostr and enjoy :-)
Dependencies ๐ฅ
Install ffmpeg and youtube-dl ( and or yt-dlp) before you run
View quoted note →