54 lines
1.5 KiB
Bash
Executable file
54 lines
1.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
if [ "$#" -ne 2 ]; then
|
|
echo "Uso: $0 <input_file> <output_dir>"
|
|
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}"
|