#!/usr/bin/env bash if [ "$#" -ne 2 ]; then echo "Uso: $0 " exit 1 fi INPUT="$1" OUTDIR="$2" # Controlli preliminari if [ ! -f "$INPUT" ]; then echo "Errore: file di input non trovato: $INPUT" exit 2 fi # Crea la directory di output se non esiste mkdir -p "$OUTDIR" chmod 0755 "$OUTDIR" MASTER="${OUTDIR%/}/master.m3u8" if [ -f "$MASTER" ]; then echo "Attenzione: master.m3u8 esistente verrà sovrascritto: $MASTER" fi # Rileva disponibilità encoder hardware Rockchip if ffmpeg -encoders 2>/dev/null | grep -q 'h264_rkmpp'; then echo "Encoder hardware h264_rkmpp disponibile: userò rkmpp" HWACCEL_OPTS=(-hwaccel rkmpp) VIDEO_CODEC="h264_rkmpp" PIX_FMT="nv12" EXTRA_CODEC_OPTS=() else echo "h264_rkmpp non disponibile: ricaduta su libx264 (software)" HWACCEL_OPTS=() VIDEO_CODEC="libx264" PIX_FMT="yuv420p" EXTRA_CODEC_OPTS=(-preset veryfast -tune zerolatency -x264-params "nal-hrd=cbr") fi echo "Codec video selezionato: $VIDEO_CODEC" echo "Formato pixel: $PIX_FMT" # Esegui ffmpeg (VOD: mantiene tutti i segmenti) ffmpeg -hide_banner -y "${HWACCEL_OPTS[@]}" -i "$INPUT" \ -c:v "$VIDEO_CODEC" "${EXTRA_CODEC_OPTS[@]}" -b:v 5000k -maxrate 6000k -bufsize 12000k \ -r 30 -g 90 -keyint_min 90 -sc_threshold 0 \ -pix_fmt "$PIX_FMT" \ -c:a aac -b:a 160k -ac 2 -ar 48000 \ -f hls \ -hls_time 3 -hls_list_size 0 -hls_playlist_type vod \ -hls_segment_type mpegts \ -hls_segment_filename "${OUTDIR%/}/segment_%05d.ts" \ "${MASTER}"