urmi_downloader_converter/transcode.sh

86 lines
2.5 KiB
Bash

#!/bin/bash
# Configuration
QUEUE_DIR="/var/www/download/queue"
READY_DIR="/var/www/download/ready"
SETTINGS_FILE="/path/to/settings/settings.json"
LOG_FILE="/var/log/convert.log"
# Create directories if they don't exist
mkdir -p "$QUEUE_DIR"
mkdir -p "$READY_DIR"
# Load settings from JSON file
load_settings() {
VIDEO_FORMAT=$(jq -r '.video_format' "$SETTINGS_FILE")
AUDIO_FORMAT=$(jq -r '.audio_format' "$SETTINGS_FILE")
VIDEO_BITRATE=$(jq -r '.video_bitrate' "$SETTINGS_FILE")
AUDIO_BITRATE=$(jq -r '.audio_bitrate' "$SETTINGS_FILE")
RESOLUTION=$(jq -r '.resolution' "$SETTINGS_FILE")
FRAME_RATE=$(jq -r '.frame_rate' "$SETTINGS_FILE")
GOP=$(jq -r '.gop' "$SETTINGS_FILE")
}
# Function to sanitize filename
sanitize_filename() {
local filename="$1"
# Remove special characters, keep only a-z, A-Z, 0-9, and .
local sanitized=$(echo "$filename" | sed 's/[^a-zA-Z0-9.]*//g')
# If filename starts with number, add prefix
if [[ "$sanitized" =~ ^[0-9] ]]; then
sanitized="dev_${sanitized}"
fi
# If filename is empty after sanitization, use timestamp
if [[ -z "$sanitized" ]]; then
sanitized="dev_$(date +%s)"
fi
echo "$sanitized"
}
# Main processing loop
while true; do
# Load settings at start of each loop
load_settings
# Find all files in queue directory
for file in "$QUEUE_DIR"/*; do
# Skip if no files found
[ -f "$file" ] || continue
# Get original filename
original_name=$(basename "$file")
# Sanitize filename
sanitized_name=$(sanitize_filename "$original_name")
# Add .ts extension
sanitized_name="${sanitized_name}.ts"
# Set output path
output_file="$READY_DIR/$sanitized_name"
# Convert file with ffmpeg using settings from JSON
if ffmpeg -i "$file" \
-c:v "$VIDEO_FORMAT" \
-b:v "$VIDEO_BITRATE" \
-c:a "$AUDIO_FORMAT" \
-b:a "$AUDIO_BITRATE" \
-s "$RESOLUTION" \
-r "$FRAME_RATE" \
-g "$GOP" \
"$output_file" 2>>"$LOG_FILE"; then
# If conversion successful, remove original file
rm "$file"
echo "$(date): Successfully converted $original_name to $sanitized_name" >> "$LOG_FILE"
else
# If conversion failed, log error
echo "$(date): Failed to convert $original_name" >> "$LOG_FILE"
fi
done
# Wait before checking for new files
sleep 5
done