#!/bin/bash SCRIPT_DIR="$(dirname "$(realpath "$0")")" source "$SCRIPT_DIR/sky-cam.conf" # Get today's date in the format YYYY-MM-DD current_date=$(date +%Y-%m-%d) output_date=$(date +%Y-%m) # Define the directory where images are stored (using today's date) image_dir="$BASE_DIR/$CAM_NAME/$current_date" # Set output directory output_dir="$BASE_DIR/movies/$CAM_NAME/$output_date/sunrise-only" # Make sure the output directory exists mkdir -p "$output_dir" # Get the sunrise time for today using the sunrise.py script sunrise_time=$(python3 "$SCRIPT_DIR/sunrise.py") # Check if the sunrise time was fetched successfully if [[ -z "$sunrise_time" ]]; then echo "Error: Failed to retrieve sunrise time." exit 1 fi # Output the sunrise time in UTC echo "Sunrise time (UTC): $sunrise_time" # Set the time zone to Eastern US time (America/New_York) export TZ="America/New_York" # Convert sunrise time from UTC to Eastern Time (ET) sunrise_time_et=$(TZ="America/New_York" date -d "$sunrise_time" +"%H-%M-%S") # Output the converted sunrise time in Eastern Time echo "Sunrise time (Eastern Time): $sunrise_time_et" # Function to convert time to seconds since midnight time_to_seconds() { IFS='-' read -r h m s <<< "$1" echo $((10#$h * 3600 + 10#$m * 60 + 10#$s)) } # Convert sunrise time (in Eastern Time) to seconds since midnight sunrise_seconds=$(time_to_seconds "$sunrise_time_et") # Calculate the start and end times (60 minutes before sunrise and 15 minutes after sunrise) start_seconds=$((sunrise_seconds - 70 * 60)) # 60 minutes before sunrise end_seconds=$((sunrise_seconds + 10 * 60)) # 20 minutes after sunrise # Output the start and end times in seconds for debugging echo "Start seconds: $start_seconds" echo "End seconds: $end_seconds" echo "Sunrise seconds: $sunrise_seconds" # Check if the image directory exists if [ ! -d "$image_dir" ]; then echo "Error: The directory for images does not exist: $image_dir" exit 1 fi # Create a temporary file to store the list of image files temp_file=$(mktemp) # Find, sort, and process images in the specified directory # Sort files by filename, which will order them correctly by MM-DD-SS find "$image_dir" -type f -name "*.jpg" | sort -n | while read -r image; do # Extract the time portion of the filename (e.g., 09-16-00 from 09-16-00.jpg) image_time=$(basename "$image" .jpg) # MM-DD-SS # Convert image time to seconds since midnight image_seconds=$(time_to_seconds "$image_time") # Debug: Output the image time and its seconds since midnight echo "Image: $image, Time: $image_time, Seconds: $image_seconds" # Check if the image time falls within the specified range if [[ $image_seconds -ge $start_seconds && $image_seconds -le $end_seconds ]]; then echo "Image $image_time ($image_seconds) is within the range [$start_seconds, $end_seconds]" # Add the image to the temporary file echo "file '$image'" >> "$temp_file" fi done # Check if any images were found in the time range if [ ! -s "$temp_file" ]; then echo "No images found within the specified time range." exit 1 fi # Calculate the number of images num_images=$(wc -l < "$temp_file") echo "Total images to be included in the video: $num_images" # Output video filename for the first movie (no speed adjustments) first_movie="$output_dir/$current_date-sunrise-day.mp4" # Create the first movie at the default frame rate (no speed adjustments) echo "Creating video at default frame rate..." ffmpeg -f concat -safe 0 -i "$temp_file" -c:v libx264 -pix_fmt yuv420p -crf 28 -vsync 2 -y "$first_movie" # Check the duration of the created video video_duration=$(ffmpeg -i "$first_movie" 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//) echo "Initial video duration: $video_duration" # Get the video duration in seconds (from HH:MM:SS format) IFS=':' read -r hours minutes seconds <<< $(echo $video_duration | cut -d '.' -f1) # Extract time total_seconds=$(($hours * 3600 + $minutes * 60 + $seconds)) # Convert to total seconds # Target video duration: 10 seconds target_duration=8 # Calculate the speed-up factor to make the video fit into the target duration of 10 seconds speed_up_factor=$(echo "scale=3; $total_seconds / $target_duration" | bc) echo "Calculated speed-up factor: $speed_up_factor" # Output filename for the second movie (speed-adjusted) final_video="$output_dir/$current_date-sunrise-10s.mp4" # Apply the speed adjustment using the setpts filter echo "Adjusting video speed to target duration of 10 seconds..." ffmpeg -i "$first_movie" -filter:v "setpts=PTS/$speed_up_factor" -y "$final_video" # Check the duration of the adjusted video adjusted_duration=$(ffmpeg -i "$final_video" 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//) echo "Adjusted video duration: $adjusted_duration" # Check for ffmpeg success if [ $? -ne 0 ]; then echo "Error: ffmpeg failed to create the final video." exit 1 fi # Inform user the video has been created echo "Video created at $final_video" # Clean up temporary files rm "$temp_file" # Run the sunrise_overlay.py script to add the sunrise overlay python3 "$SCRIPT_DIR/sunrise_overlay.py" "$final_video" # Run the sunrise2mm.py script to upload the video python3 "$SCRIPT_DIR/sunrise2mm.py" # Check if the Python script was successful if [ $? -eq 0 ]; then echo "Successfully uploaded the video to Mattermost." else echo "There was an issue uploading the video to Mattermost." fi