Erstellen Sie ein Video aus einem Stapel von 400 Bildern mit unterschiedlicher Zeit für jedes Bild

675
Amr Ali

Ich möchte ein Video oder eine Diashow aus einem Stapel von 400 Bildern (.jpg) mit unterschiedlichem Zeitraffer erstellen (ich habe eine Textdatei, die anzeigt, wie viel Zeit für jedes Bild in Millisekunden benötigt wird).

Zum Beispiel:

image 0001.jpg is 225 msec image 0002.jpg is 480 msec image 0003.jpg is 1200 msec 

Wie kann ich ein solches Video mit minimalem Aufwand erstellen?

2

1 Antwort auf die Frage

2
Nattgew

Eine Möglichkeit besteht darin, aus jedem Bild ein Video zu erstellen und dann alle zu kombinieren. Mit können mencoderSie folgendes tun:

Dadurch wird ein Video mit 1 Bild pro Sekunde erstellt aus image.jpg:

mencoder "mf://image.jpg" -ovc x264 -mf fps=1 -o output.avi 

Dies wird zwei Videos aufnehmen und verschmelzen sie zu einem:

mencoder -ovc copy -oac copy video1.avi video2.avi -o completevideos.avi 

Es könnte so aussehen. Jede Zeile durations.txtenthält eine Dauer (in Millisekunden hier), und Bilder werden wie in Ihrem Beispiel benannt. Dies ist als Beispiel gedacht und funktioniert möglicherweise nicht wie dargestellt:

i = 0 while read line; do padded = $(printf "%04d\n" $i) fps = $(echo "scale=3; 1/$i/1000" | bc -q 2>/dev/null) if [ i -eq 0 ]; then mencoder "mf://image$padded.jpg" -ovc x264 -mf fps=$fps -o previous.avi else mencoder "mf://image$padded.jpg" -ovc x264 -mf fps=$fps -o next.avi mencoder -ovc copy -oac copy previous.avi next.avi -o building.avi rm previous.avi mv building.avi previous.avi fi i = $[i + 1]; done < durations.txt 

Das ffmpegTool hat ähnliche Funktionen:

ffmpeg -loop 1 -i img.png -c:v libx264 -t 30 -pix_fmt yuv420p out.mp4 ffmpeg -i concat:"intermediate1.mpg|intermediate2.mpg" -c copy intermediate_all.mpg