#!/bin/bash output_folder="/var/www/html/watermarked_videos/" output_base_url="https://ca2324.ddns.net:8443/watermarked_videos/" # Input parameters input_video_url="$1" watermark_png_url="$2" pos_x="${3:-10}" # Default to 10 if not provided pos_y="${4:-10}" # Default to 10 if not provided size_w="${5:-0}" # Default to 0 (keep aspect ratio) if not provided size_h="${6:-0}" # Default to 0 (keep aspect ratio) if not provided # Validate required inputs if [ -z "$input_video_url" ] || [ -z "$watermark_png_url" ]; then echo "Error: Missing required parameters" >&2 echo "Usage: $0 input_video_url watermark_png_url [pos_x] [pos_y] [size_w] [size_h]" >&2 exit 1 fi # Create temp directory temp_dir="/tmp/watermark_$$" mkdir -p "$temp_dir" || { echo "Error: Failed to create temporary directory" >&2 exit 1 } # Download input video video_filename=$(basename "$input_video_url") local_video_path="$temp_dir/$video_filename" if ! curl -s -L -o "$local_video_path" "$input_video_url"; then echo "Error: Failed to download input video from $input_video_url" >&2 rm -rf "$temp_dir" exit 1 fi # Download watermark image watermark_filename=$(basename "$watermark_png_url") local_watermark_path="$temp_dir/$watermark_filename" if ! curl -s -L -o "$local_watermark_path" "$watermark_png_url"; then echo "Error: Failed to download watermark image from $watermark_png_url" >&2 rm -rf "$temp_dir" exit 1 fi # Validate downloaded files if [ ! -f "$local_video_path" ]; then echo "Error: Downloaded video file not found" >&2 rm -rf "$temp_dir" exit 1 fi if [ ! -f "$local_watermark_path" ]; then echo "Error: Downloaded watermark file not found" >&2 rm -rf "$temp_dir" exit 1 fi # Generate a UUID-style output filename output_uuid=$(uuidgen) output_file="$temp_dir/$output_uuid.mp4" # Prepare ffmpeg filter for watermark if [ "$size_w" -eq 0 ] && [ "$size_h" -eq 0 ]; then # No resizing filter_complex="overlay=$pos_x:$pos_y" else # Resize watermark before overlay filter_complex="overlay=$pos_x:$pos_y:scale=$size_w:$size_h" fi # Add watermark using ffmpeg and encode to HEVC (H.265) if ! ffmpeg -y -loglevel error -i "$local_video_path" -i "$local_watermark_path" \ -filter_complex "$filter_complex" \ -c:v libx265 -tag:v hvc1 -crf 24 -preset veryfast \ -c:a copy \ -movflags +faststart \ "${output_file}" 1>&2 ; then echo "Error: Failed to add watermark to video" >&2 rm -rf "$temp_dir" exit 1 fi # Move output file to the output folder if ! mv "$output_file" "$output_folder"; then echo "Error: Failed to move output file to $output_folder" >&2 rm -rf "$temp_dir" exit 1 fi # Clean up temporary files rm -rf "$temp_dir" # Generate the final output file path output_file="$output_folder/$output_uuid.mp4" # Generate the final output URL output_file_url="${output_base_url}${output_uuid}.mp4" # Return JSON with parameters and output filename cat << EOF { "input_video_url": "$input_video_url", "watermark_png_url": "$watermark_png_url", "pos_x": $pos_x, "pos_y": $pos_y, "size_w": $size_w, "size_h": $size_h, "output_file_name": "$output_file", "output_file_url": "$output_file_url" } EOF # Note: We're not deleting the temp directory so that the output file remains available exit 0