skrypt do sklejania wideo

hej, potrzebuję pomocy kogoś kto potrafi w skrypty do ffmpega.

mam katalog z plikami video nazwanymi 1.mp4, 2.mp4, 3.mp4, itd.... Chcę je skleić razem w następujący sposób:
klatka 1 z pierwszego filmu - klatka 1 sklejonego filmu
klatka 2 z drugiego filmu - klatka 2 sklejonego filmu
klatka 3 z trzieciego filmu - klatka 3 sklejonego filmu
itd

myślę, że byłby to ciekawy eksperyment, ale kompletnie nie wiem jak coś takiego zrobić.
jeśli się uda coś z tym stworzyć, na pewno się podzielę :)

Żeby zapisać klatkę 001 z filmu 001.mp4 to np z shella:
ffmpeg -i 001.mp4 -vf "select=eq(n\,001)" -vsync vfr 001.png
( dla n filmów to sobie wrzucisz w pętlę )
i potem mając te klatki skleisz np przez:
ffmpeg -framerate 30 -i ./%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p film.mp4

Udało mi się coś sklecić. Pierwszy eksperyment. 1 sekunda z każdego filmu

(oryginalne filmy tutaj)

skrypt bash:

#!/bin/bash
VIDEO_DIR="./videos"
OUTPUT_VIDEO="output.mp4"

VIDEO_FILES=("$VIDEO_DIR"/*.mp4)
NUM_VIDEOS=${#VIDEO_FILES[@]}

TEMP_DIR=$(mktemp -d)

for ((j=0; j<NUM_VIDEOS; j++))
do
    video="${VIDEO_FILES[$j]}"
    output="$TEMP_DIR/clip_$j.mp4"

    ffmpeg -ss $j -i "$video" -t 1 -c copy "$output"
done

CONCAT_LIST="$TEMP_DIR/concat_list.txt"
> "$CONCAT_LIST"

for ((j=0; j<NUM_VIDEOS; j++))
do
    echo "file '$TEMP_DIR/clip_${j}.mp4'" >> "$CONCAT_LIST"
done

ffmpeg -f concat -safe 0 -i "$CONCAT_LIST" -c copy "$OUTPUT_VIDEO"

rm -rf "$TEMP_DIR"
1 Like

No i na pewno wyszło lepiej niż wybieranie po jednej klatce bo wtedy to by musiałobyć zupełnie bez audio oryginalnego.
Ale chyba jeszcze wiekszy potencjał byłby na pocięcie tych filmów precyzyjnie ręcznie tak, żeby w warstwie audio był jakiś czytelny przekaz czyli np wycinanie klipów na granicy poszczególnych słów.