2

Я хочу создать видео или слайд-шоу из серии из 400 изображений (.jpg) с различным интервалом времени (у меня есть текстовый файл, который показывает, сколько времени для каждого изображения в миллисекундах)

Например:

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

Как я могу создать такое видео с минимальными усилиями?

1 ответ1

2

Одним из способов является создание видео из каждого изображения, а затем объединить их все. С mencoder вы можете сделать следующее:

Это создаст видео с 1 кадром в секунду из image.jpg:

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

Это займет два видео и объединит их в одно:

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

Это может выглядеть примерно так. Каждая строка durations.txt содержит длительность (в миллисекундах здесь), а изображения имеют имена, как в вашем примере. Это подразумевается в качестве примера и может не работать так, как представлено:

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

У инструмента ffmpeg есть похожие функции:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .