"Modern" slideshow keszitese ingyenesen? mp4-be

Fórumok

A modern alatt azt ertem, hogy a kepek kulonbozo beuszasokkal jojjenek be, transzforaciokkal, azaz "fancy" legyen.

Va erre ingyenes Linux/Windows alatti tool, vagy akar webes online oldal, ami NEM rak vizjelet vagy limitaciot a keszitett mp4 filera?

 

Otletek? kosz

Hozzászólások

En DaVinci-t hasznalok erre (is), de ha most fogod eloszor kiprobalni, akkor eleinte szopni fogsz vele rendesen.

Szerkesztve: 2024. 09. 19., cs – 18:07

ffmpeg?

Claude

👨🏼‍💻: Can you create a slide show with ffmpeg from images with custom transitions? 

🤖: Certainly! I can help you create a slide show using FFmpeg with custom transitions between images. This is a great way to create dynamic presentations or video montages from still images. Let me provide you with a script that accomplishes this task.

This script creates a slideshow using FFmpeg with custom fade transitions between images. Here's a breakdown of what the script does:

  1. It sets variables for the input directory, output file, image display duration, and transition duration.
  2. It collects all JPG images from the specified directory.
  3. It creates a complex filter that applies a fade transition between each image.
  4. It uses FFmpeg to create the final video, applying the transitions and setting the duration for each image.

To use this script:

  1. Save it as a .sh file (e.g., create_slideshow.sh).
  2. Make it executable with chmod +x create_slideshow.sh.
  3. Edit the input_dir variable to point to your image directory.
  4. Adjust the duration and transition_duration variables as needed.
  5. Run the script with ./create_slideshow.sh.

This script assumes your images are in JPG format. If you have different formats, you'll need to modify the file extension in the script.

------

#!/bin/bash

# Set variables
input_dir="path/to/your/images"
output_file="output_slideshow.mp4"
duration=5  # Duration each image is displayed
transition_duration=1  # Duration of the transition effect

# Get all image files
images=(${input_dir}/*.jpg)

# Create a temporary file for the filter complex
filter_complex_file=$(mktemp)

# Start building the filter complex
echo "[0:v]format=rgba,fade=d=$transition_duration:t=in:alpha=1,setpts=PTS-STARTPTS+$duration/TB[v0];" > $filter_complex_file

# Process each image
for i in "${!images[@]}"; do
    next=$((i+1))
    if [[ $next -eq ${#images[@]} ]]; then
        next=0
    fi
    
    echo "[${next}:v]format=rgba,fade=d=$transition_duration:t=in:alpha=1,setpts=PTS-STARTPTS+$duration/TB[v$next];" >> $filter_complex_file
    
    if [[ $i -ne 0 ]]; then
        echo "[tmp][v$i]overlay,trim=duration=$duration[tmp$i];" >> $filter_complex_file
        echo "[tmp$i][v$next]overlay=shortest=1[tmp];" >> $filter_complex_file
    else
        echo "[v0][v$next]overlay=shortest=1[tmp];" >> $filter_complex_file
    fi
done

# Finalize the filter complex
sed -i '$ s/\[tmp\]/[v]/' $filter_complex_file

# Run FFmpeg command
ffmpeg -y \
    $(for img in "${images[@]}"; do echo "-loop 1 -t $((duration+transition_duration)) -i $img"; done) \
    -filter_complex_script $filter_complex_file \
    -map "[v]" \
    -c:v libx264 -pix_fmt yuv420p \
    $output_file

# Clean up temporary file
rm $filter_complex_file

----

Nem próbáltam ki, lehet hogy kicsit játszani kell a scripttel. Claude/ChatGPT biztos tud segíteni a testreszabásban.

----

Szerk: ha kell valami egyszerű UI is, azt is lehet generáltatni vele:

https://claude.site/artifacts/aed455f3-70de-4960-88d7-843180f128e5

Nem feltétlen kell hozzá Bash, vagy POSIX shell se, meg lehet oldani 1 soros ffmpeg-gel is, csak akkor nagyon sok paramétert utána kell írni, körmeid legépeled, az se lesz könnyebb, mint egy shell script.

Én csináltam pár éve pont ilyen slideshow-t, ffmpeg-gel, de azt meg ne kérdezzétek, hogy mik voltak a paraméterek, fogalmam sincs már, főleg, hogy akkor is vért hugyoztam mire összehoztam. Annyira emlékszem, hogy a framerate-et vettem le nagyon, hogy x ideig látszódjon minden kép.

Az ffmpeg tud mindent, ha valaki képes sok doksit olvasni, hogy milyen paramétereket kell használni és van türelme kísérletezni, mert néha az is számít, hogy bizonyos paraméterek mely másik paraméterek után, milyen sorrendben vannak.

The world runs on Excel spreadsheets. (Dylan Beattie)

Megnéztem. Amit első ránézésre szerintem nem látszik a scripten, hogy ha van a feldolgozandó bármelyik fájlnévben szóköz (vagy tabulátor, soremelés - bár ez a kettő azért jóval ritkább,  mint az első) akkor fejreáll a végén amikor meghívja az ffmpeg -et a generáláshoz (nem létező fájlra hivatkozással). Nekem egyszerűen nem sikerült javítanom (beszúrt \" nem jó).

Ami nagyobb baj, hogy a fájlátnevezgetések után meg ott akadt meg, hogy "Invalid stream specifier: v1." - a rohadt ronda, szintén generált filter_complex-ben.

(Egyelőre még rágom.)

- ha belerakná az ffmpeg opciói közé -hide_banner opciót, akkor a felesleges sallang az elejéről eltűnik

- a mjpeg helyett fullHD MP4 már csak kb 2 plusz opció lenne

 

de a fő hiba, hogy valami el van cseszve a filtergraph generálásánál. Azt kellene rendbetenni és tényleg használható lenne.

 

ez nem megy, gyerekek

 

a hiba:

  Stream #13:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #14, image2, from '/mnt/nfs1600/images/20220418_124630.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 854401 kb/s
  Stream #14:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #15, image2, from '/mnt/nfs1600/images/20220418_130323.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 539607 kb/s
  Stream #15:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4000x2250, 25 fps, 25 tbr, 25 tbn

 

[image2 @ 0x76f67c20] Invalid stream specifier: v1.
    Last message repeated 1 times
Stream specifier 'v1' in filtergraph description [0:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v0];
[1:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v1];
[v0][v1]overlay=shortest=1[tmp];
 

manualisan neztem ra, bedobom neked ide a teljes outputot:

 

ss@sss:~ $ ./_slideshow_hup.sh
ffmpeg version 6.0-homebridge-alpine-armv7l-static Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12.2.1 (Alpine 12.2.1_git20220924-r10) 20220924
  configuration: --enable-hardcoded-tables --enable-nonfree --enable-gpl --enable-hardcoded-tables --enable-hardcoded-tables --enable-openssl --enable-libdav1d --enable-libsvtav1 --enable-libx264 --enable-libxvid --enable-libvidstab --enable-libzimg --enable-lv2 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libtheora --enable-libfdk-aac --enable-libwebp --enable-libsrt --disable-debug --disable-shared --enable-pthreads --enable-static --enable-version3 --extra-cflags='-I/build/workspace/include -I/build/workspace/include/lilv-0' --extra-ldexeflags=-static --extra-ldflags=-L/build/workspace/lib --extra-libs='-ldl -lpthread -lm -lz' --pkgconfigdir=/build/workspace/lib/pkgconfig --pkg-config-flags=--static --prefix=/build/workspace --extra-version=homebridge-alpine-armv7l-static
  libavutil      58.  2.100 / 58.  2.100
  libavcodec     60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter     9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample   4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Input #0, image2, from '/mnt/nfs1600/images/20211106_103527.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 399292 kb/s
  Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x3024, 25 fps, 25 tbr, 25 tbn
Input #1, image2, from '/mnt/nfs1600/images/20211106_111857.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 881112 kb/s
  Stream #1:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4000x3000, 25 fps, 25 tbr, 25 tbn
Input #2, image2, from '/mnt/nfs1600/images/20211106_114541.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 724109 kb/s
  Stream #2:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4000x3000, 25 fps, 25 tbr, 25 tbn
Input #3, image2, from '/mnt/nfs1600/images/20211106_114546.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 498128 kb/s
  Stream #3:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4000x3000, 25 fps, 25 tbr, 25 tbn
Input #4, image2, from '/mnt/nfs1600/images/20220416_184925.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 329430 kb/s
  Stream #4:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #5, image2, from '/mnt/nfs1600/images/20220417_184505.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 384957 kb/s
  Stream #5:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #6, image2, from '/mnt/nfs1600/images/20220417_192759.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 597314 kb/s
  Stream #6:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #7, image2, from '/mnt/nfs1600/images/20220417_193431.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 602838 kb/s
  Stream #7:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #8, image2, from '/mnt/nfs1600/images/20220417_193435.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 511465 kb/s
  Stream #8:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #9, image2, from '/mnt/nfs1600/images/20220417_195118.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 621372 kb/s
  Stream #9:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #10, image2, from '/mnt/nfs1600/images/20220417_195123.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 568592 kb/s
  Stream #10:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #11, image2, from '/mnt/nfs1600/images/20220417_195228.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 519645 kb/s
  Stream #11:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #12, image2, from '/mnt/nfs1600/images/20220417_213513.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 735453 kb/s
  Stream #12:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #13, image2, from '/mnt/nfs1600/images/20220418_124051.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 528773 kb/s
  Stream #13:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #14, image2, from '/mnt/nfs1600/images/20220418_124630.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 854401 kb/s
  Stream #14:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4032x2268, 25 fps, 25 tbr, 25 tbn
Input #15, image2, from '/mnt/nfs1600/images/20220418_130323.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 539607 kb/s
  Stream #15:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 4000x2250, 25 fps, 25 tbr, 25 tbn
[image2 @ 0x76f67c20] Invalid stream specifier: v1.
    Last message repeated 1 times
Stream specifier 'v1' in filtergraph description [0:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v0];
[1:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v1];
[v0][v1]overlay=shortest=1[tmp];
[2:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v2];
[tmp][v1]overlay,trim=duration=8[tmp1];
[tmp1][v2]overlay=shortest=1[tmp];
[3:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v3];
[tmp][v2]overlay,trim=duration=8[tmp2];
[tmp2][v3]overlay=shortest=1[tmp];
[4:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v4];
[tmp][v3]overlay,trim=duration=8[tmp3];
[tmp3][v4]overlay=shortest=1[tmp];
[5:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v5];
[tmp][v4]overlay,trim=duration=8[tmp4];
[tmp4][v5]overlay=shortest=1[tmp];
[6:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v6];
[tmp][v5]overlay,trim=duration=8[tmp5];
[tmp5][v6]overlay=shortest=1[tmp];
[7:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v7];
[tmp][v6]overlay,trim=duration=8[tmp6];
[tmp6][v7]overlay=shortest=1[tmp];
[8:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v8];
[tmp][v7]overlay,trim=duration=8[tmp7];
[tmp7][v8]overlay=shortest=1[tmp];
[9:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v9];
[tmp][v8]overlay,trim=duration=8[tmp8];
[tmp8][v9]overlay=shortest=1[tmp];
[10:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v10];
[tmp][v9]overlay,trim=duration=8[tmp9];
[tmp9][v10]overlay=shortest=1[tmp];
[11:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v11];
[tmp][v10]overlay,trim=duration=8[tmp10];
[tmp10][v11]overlay=shortest=1[tmp];
[12:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v12];
[tmp][v11]overlay,trim=duration=8[tmp11];
[tmp11][v12]overlay=shortest=1[tmp];
[13:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v13];
[tmp][v12]overlay,trim=duration=8[tmp12];
[tmp12][v13]overlay=shortest=1[tmp];
[14:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v14];
[tmp][v13]overlay,trim=duration=8[tmp13];
[tmp13][v14]overlay=shortest=1[tmp];
[15:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v15];
[tmp][v14]overlay,trim=duration=8[tmp14];
[tmp14][v15]overlay=shortest=1[tmp];
[0:v]format=rgba,fade=d=3:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[v0];
[tmp][v15]overlay,trim=duration=8[tmp15];
[tmp15][v0]overlay=shortest=1[v];
 matches no streams.
 

9 iterációval (10 perccel) később, de működik :)

Input/output:

input_dir="${script_dir}/images"
output_file="${script_dir}/output_slideshow.mp4"

Teljes script:

#!/bin/bash

# Set variables
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
input_dir="${script_dir}/images"
output_file="${script_dir}/output_slideshow.mp4"
duration=5  # Duration each image is displayed
transition_duration=1  # Duration of the transition effect

# Get all image files with absolute paths
images=()
while IFS= read -r -d $'\0' file; do
    images+=("$file")
done < <(find "$input_dir" -maxdepth 1 -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" \) -print0 | sort -z)

# Check if images were found
if [ ${#images[@]} -eq 0 ]; then
    echo "No images found in $input_dir"
    exit 1
fi

# Print found images and their permissions for debugging
echo "Found ${#images[@]} images:"
for img in "${images[@]}"; do
    echo "$img"
    ls -l "$img"
done

# Start building the filter complex
filter_complex=""

# Process each image
for i in "${!images[@]}"; do
    filter_complex+="[${i}:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1,format=yuv420p,fade=t=in:st=0:d=$transition_duration,fade=t=out:st=$((duration-transition_duration)):d=$transition_duration[v$i];"
done

# Concat all processed images
for i in "${!images[@]}"; do
    filter_complex+="[v$i]"
done
filter_complex+="concat=n=${#images[@]}:v=1:a=0,format=yuv420p[v]"

# Prepare FFmpeg input arguments with proper escaping
input_args=""
for img in "${images[@]}"; do
    input_args+="-loop 1 -t $((duration)) -i $(printf %q "$img") "
done

# Print FFmpeg command for debugging
echo "FFmpeg command:"
echo ffmpeg -hide_banner -y $input_args -filter_complex \""$filter_complex"\" -map "[v]" -c:v libx264 -preset slow -crf 18 -movflags +faststart -profile:v high -level 4.1 -pix_fmt yuv420p $(printf %q "$output_file")

# Run FFmpeg command
eval ffmpeg -hide_banner -y $input_args \
    -filter_complex \""$filter_complex"\" \
    -map "[v]" \
    -c:v libx264 -preset slow -crf 18 \
    -movflags +faststart \
    -profile:v high -level 4.1 \
    -pix_fmt yuv420p \
    $(printf %q "$output_file")

Hát van benne néhány (valószínűleg fölösleges) bashizm, de valóban működik, még a hülye fájlnevekkel is - ezt persze lehetett sejteni a find -print0, meg a sort -z -je - és a printf %q-ja - alapján. És persze nem véletlen az ffmpeg hívásában az eval.

Mondjuk a generálás nem gyors, de legalább lassú. Én 3 képpel próbáltam meg, nem biztos, hogy szeretném végigvárni egy pár száz képes diavetítés legenerálását.

Ettől ettekintve gratulálok, szép munka.

mukodik, gratulalok.

Illetve hat kisebb memorias gepeken ezt dobja:

 

Output #0, mp4, to '/mnt/images/output_slideshow.mp4':
  Metadata:
    encoder         : Lavf60.3.100
  Stream #0:0: Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt470bg/unknown/unknown, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 12800 tbn
    Metadata:
      encoder         : Lavc60.3.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[image2 @ 0x76f60420] Could not open file : /mnt/images/20211106_103527.jpg/s speed=N/A
Error demuxing input file 0: I/O error
x264 [error]: malloc of size 6954336 failed
[vost#0:0/libx264 @ 0x76f60ac0] Error submitting video frame to the encoder
Conversion failed!
---------------

 

Memoria keves...kb. 30 db JPG fileom volt, nagymeretuek

Azért a konverzió időtartamát ugyanúgy bele kell majd számítani a végső időbe. És ha lehet, akkor nem az ImageMagickot használni erre a funkcióra, mert az szerintem bődületesen lassú. Mondjuk most így kapásból nem nagyon tudnék mondani másik olyan eszközt, ami ezt viszonylag kényelmesen "batch"-ben megcsinálja könnyen programozható módon - és még gyors is az IM-hez képest. GraphicMagick? Vagy a netpbm-csomag? Esetleg valami Gimp-fu? A VIPS-en alapuló nips2 ? De tényleg nem tudom.

Én most csak az átméretezés és konverziós részére koncentrálva szintén megkérdeztem az agyat a fentiek többségéről. Némileg módosítva (egyes esetben teljesen kijavítva) az eredmények, lehet mérni futási időket:

 

ImageMagick (a mogrify felülírja az eredetit, a convert nem) :

mogrify -resize 1920x1280! -format png *.jpg

for img in *.jpg ; do convert "$img" -resize 1920x1280! IM_output/"${img%.jpg}.png" ; done

 

GraphicMagick:

for img in *.jpg ; do gm convert "$img" -resize 1920x1280^ GM_output/"${img%.jpg}.png" ; done

 

NetPBM:

for img in *.jpg ; do jpegtopnm $img | pamscale -width 1920 | pnmtopng > NETPBM_output/${img%.jpg}.png ; done

 

VIPS:

for img in *.jpg ; do vips resize "$img" VIPS_output/${img%.jpg}.png 1920/$(vipsheader "$img" | awk '/Height:/ {print $2}' ) ; done

 

Saját tapasztalat: a netpbm volt a leggyorsabb (és azt a parancssort kellett leginkább javítani), az IM és az abból forkolt GM kb. fej-fej mellett, a VIPS pedig noha explicit szerepel a leírásában,hogy marha jól bánik a memóriával és milyen gyors, egyelőre még nem tudta befejezni a teszt 3 képéből az elsőt sem (igaz már 4 nagyságrenddel nagyobb a fájl, mint a legkisebb konvertált). Szóval azzal inkább ne.

És akkor még a minőséget nem is néztem.

IM:
real    2m59.187s
user    4m24.051s
sys     0m12.298s

real    2m59.615s
user    4m24.521s
sys     0m12.734s

NetPBM:
real    3m43.668s
user    3m54.021s
sys     0m8.210s

real    3m43.406s
user    3m53.603s
sys     0m8.165s

 

Én itt elengedtem.

Kdenlive szerintem is a legjobb videószerkesztő. Majd ha újraírt kódja elkészül Olive lehet hasonlóan jó. Rendszeresen kipróbálom a fejlesztés alatt álló kódot, ma még nincs productivity állapotban. 

Erre a feladatra viszont szerintem Prezi -vel lehetne elkészíteni a leglátványosabb slideshow-t. Annyi probléma van vele, hogy pofátlanul lehúzós az árazása. Ha ingyenesen használod, akkor pedig minden anyagod egyből publikus lesz. Egy fényévekkel modernebb Powerpoint alternatíva. Ma már van több opensource változata is. Sőt a Strut.io -t még telepítened sem kell, online használható. Bár kevesebbet tud ma még mint a Prezi, de ami nekem kell azt tudja. Tud slide-okra zoomolni, ráforogni, síkból térbe kifordulni. Ami hiányzik a Prezi-hez képest az a nagy template gyűjtemény. Viszont így egyedibb preziket tudsz készíteni vele, egy idő után lesz saját egyéni templete gyűjteményed. Egy-egy slide helyére videót vagy anim gif-et is be lehet tenni, így a két megoldás kombinálható is. Ez természetesen a Prezi-re is igaz. Strut-hoz még annyi megjegyzés, hogy a youtube az utóbbi időben eltörte az API-t, ezért jelenleg (azaz legutóbb  amikor használtam pár hete) épp nem lehetett videós slideot Youtube-ról betenni. Saját lokális webserver teljesen jó helyettesítő ha van. Webböngészőkkel kompatibilis szabványos videókat érdemes használni, úgy fájlként teljesen jó. 
Ha nincs szükséged a prezentáció léptetésekre, akkor a végén OBS-sel vagy bármilyen screenrecorderrel fel tudod venni videóra. 

Egy időben a Microsoft Photos-t használtam erre a célra, de sajnos kikerült belőle a funkció. :(

Azóta a Microsoft Clipchamp-et használom, ingyenes és teljesen jól teszi a dolgát, slideshow készítésre nekem bőven elég.

https://clipchamp.com/en/windows-video-editor/

Be akartam írni a Libreoffice Imress-t. Aztán kiderült, hogy nem tud videóba exportálni. Aztán továbbgondoltam - PPTX-be viszont tud és a gugli kb millió találatot ad arra, hogy PPTX to MP4. De tény, itt már nem mentem tovább, de hátha valaki ismer erre a lépésre is olyan eszközt, amelyik a feltételeknek megfelel.

Éreztem én, hogy ez a jó irány. E szerint a leírás szerint az MSO 2010 óta a Powerpoint Exportálás funkciója tud Videoklip létrehozást. Egy 2016-as verzióban megtaláltam a megfelelő menüpontot, és még jelzi is, hogy megőrzi az animációkat, áttűnéseket.

Szóval ha eleve Powerpointban csinálod azt a prezit, akkor simán őbelőle tudod videóba menteni. (A PP persze nem ingyenes, de kevés helyen hiányzik ;-) )

QED

===

How to create a PowerPoint slideshow from photos?

Once you've selected the photos that you want to import, just click on the "Insert" button and they will be added to your slide show. If you're using a pre-made theme, you can also right-click the image in the slide show and select “Change Picture.” Again, you will choose “This Device” to access your photo library.

===

Szóval PP elindít, megfelelő sablon kiválaszt, majd Beszúrás / Fényképalbum . Kitallózod a 100 képedet és beszúrod, lesz egy 101 diás prezid (csinál neki egy kezdőoldalt is), amit már csak exportálni kell. A lényeg a Beszúrás / Képek - nem jó, helyette kell a Fényképalbum.

Ja, akár ez is vagy Blender-ben is simán megcsinálható, vagy bármelyik másik videószerkesztőben, hogy képeket pakolsz fix időközönként a timeline-ra, ha valakinek van ilyen irányú tapasztalata, akkor simán egy jó megoldási útvonal.

The world runs on Excel spreadsheets. (Dylan Beattie)

4K Slideshow Maker, ingyenes, de nem opensource, és Linuxok közül csak Ubuntu-ra van telepítő. Bár Aliennel biztos megoldható, hogy más csomagformátumba rakd át.