83 lines
2.6 KiB
Bash
Executable File
83 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Nastav proměnné
|
|
input_dir="/run/media/kof/kof17/recordings/field/2024/101NIKON"
|
|
output_file="Sběr_kof_24.mp4"
|
|
interval=9.42 # každých 15 sekund
|
|
duration=0.04 # délka klipu
|
|
|
|
|
|
rm /tmp/*.mp4
|
|
# Dočasný soubor pro seznam klipů
|
|
temp_list=$(mktemp)
|
|
|
|
|
|
# Vymaž dočasný seznam, pokud existuje
|
|
> "$temp_list"
|
|
|
|
# Funkce pro porovnávání dvou čísel pomocí bc
|
|
compare_numbers() {
|
|
local num1="$1"
|
|
local num2="$2"
|
|
if [ "$(echo "$num1 < $num2" | bc)" -eq 1 ]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Funkce pro sčítání dvou čísel pomocí bc
|
|
add_numbers() {
|
|
local num1="$1"
|
|
local num2="$2"
|
|
echo "$num1 + $num2" | bc
|
|
}
|
|
|
|
# Projdi všechny soubory ve složce
|
|
for video in "$input_dir"/*.MP4; do
|
|
# Zjisti délku videa (v sekundách, s přesností na tři desetinná místa)
|
|
total_seconds=$(ffmpeg -i "$video" 2>&1 | grep "Duration" | awk '{split($2,a,":"); print a[1]*3600 + a[2]*60 + a[3]}' | bc)
|
|
|
|
# Kontrola, zda byl správně získán total_seconds
|
|
if [ -z "$total_seconds" ] || [ "$(echo "$total_seconds < 0" | bc)" -eq 1 ]; then
|
|
echo "Nelze získat délku videa pro $video. Přeskočeno."
|
|
continue
|
|
fi
|
|
|
|
# Každých $interval sekund vystřihni klip o délce $duration sekund
|
|
start="0"
|
|
while compare_numbers "$start" "$total_seconds"; do
|
|
output_clip=$(mktemp --suffix=.mp4)
|
|
|
|
# Přidání nuly před desetinné číslo, pokud je potřeba
|
|
start_formatted=$(printf "%.6f\n" "$start")
|
|
start_formatted=$(echo "$start_formatted" | awk '{print ($1 < 1 && $1 > 0) ? "0"$0 : $0}')
|
|
|
|
# Výstup z ffmpeg se nyní zapisuje do /dev/null pro odstranění výstupu
|
|
|
|
ffmpeg -y -ss "$start_formatted" -i "$video" -t "$duration" -vf "setpts=N/FRAME_RATE/TB" -af "asetpts=N/SR/TB" -c:v h264 -qp 19 -c:a aac -b:a 256K -bsf:v h264_mp4toannexb -f mpegts "$output_clip"
|
|
#ffmpeg -y -ss "$start_formatted" -i "$video" -t "$duration" -vf "setpts=N/FRAME_RATE/TB" -af "asetpts=N/SR/TB" -c h264 -qp 19 -c:a aac -b:a 256K "$output_clip"
|
|
|
|
# Ověření, že klip byl správně vytvořen
|
|
if [ $? -eq 0 ]; then
|
|
echo "file '$output_clip'" >> "$temp_list"
|
|
else
|
|
echo "Při zpracování souboru $video došlo k chybě, přeskočeno."
|
|
rm "$output_clip"
|
|
fi
|
|
|
|
# Zvýšíme startovací čas o interval
|
|
start=$(add_numbers "$start" "$interval")
|
|
done
|
|
done
|
|
|
|
# Spoj všechny klipy do jednoho souboru, pokud je seznam klipů neprázdný
|
|
if [ -s "$temp_list" ]; then
|
|
ffmpeg -fflags +genpts -loglevel panic -f concat -safe 0 -i "$temp_list" -c:v copy -c:a copy -absf aac_adtstoasc -flags global_header -y "$output_file"
|
|
else
|
|
echo "Žádné klipy nebyly vytvořeny."
|
|
fi
|
|
|
|
# Smaž dočasné soubory
|
|
rm "$temp_list"
|