#!/bin/bash set -ex # -e to exit on error, -x for debug output # Check arguments if [ $# -ne 2 ]; then echo "Usage: $0 " exit 1 fi VIDEO_URL="$1" OUTPUT_FILE="$2" PASSLOG="passlog" # Download video and get the filename echo "Downloading video..." DOWNLOADED_FILE=$(yt-dlp --print filename -o "%(title)s.%(ext)s" "$VIDEO_URL") # Actually download the file yt-dlp -o "$DOWNLOADED_FILE" "$VIDEO_URL" if [ ! -f "$DOWNLOADED_FILE" ]; then echo "Error: Download failed or file not found: $DOWNLOADED_FILE" exit 1 fi echo "Downloaded file: $DOWNLOADED_FILE" echo "Starting two-pass encoding..." # First pass echo "Running first pass..." ffmpeg -y -i "$DOWNLOADED_FILE" \ -passlogfile "$PASSLOG" \ -c:v libx264 \ -b:v 5000k \ -minrate 1000k \ -maxrate 8000k \ -pass 1 \ -an \ -f mp4 /dev/null # Check if first pass succeeded if [ $? -ne 0 ]; then echo "First pass failed!" exit 1 fi # Second pass echo "Running second pass..." ffmpeg -y -i "$DOWNLOADED_FILE" \ -passlogfile "$PASSLOG" \ -c:v libx264 \ -b:v 5000k \ -minrate 1000k \ -maxrate 8000k \ -pass 2 \ -c:a aac \ -b:a 192k \ -movflags faststart \ "$OUTPUT_FILE" # Check if second pass succeeded if [ $? -ne 0 ]; then echo "Second pass failed!" exit 1 fi # Clean up echo "Cleaning up..." rm -f "${PASSLOG}"*.log* # Optionally remove the downloaded file # rm -f "$DOWNLOADED_FILE" echo "Success! Output saved to: $OUTPUT_FILE"