cria um vídeo a partir de um lote de 400 imagens com tempo diferente para cada imagem

2

Eu quero criar um vídeo ou uma apresentação de slides a partir de um lote de 400 imagens (.jpg) com lapso de tempo diferente (eu tenho um arquivo de texto que mostra quanto tempo para cada imagem em milissegundos)

Por exemplo:

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

Como posso criar um vídeo com o mínimo de esforço?

    
por Amr Ali 05.06.2014 / 14:16

1 resposta

2

Uma maneira é criar um vídeo de cada imagem e depois combiná-las todas. Com mencoder , você pode fazer o seguinte:

Isso cria um vídeo com 1 quadro por segundo de image.jpg :

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

Isso levará dois vídeos e mesclá-los / a> em um:

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

Pode parecer algo assim. Cada linha de durations.txt contém uma duração (em milissegundos aqui) e as imagens são nomeadas como no seu exemplo. Isto serve como um exemplo e pode não funcionar como apresentado:

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

A ferramenta ffmpeg tem funções semelhantes :

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
    
por 05.06.2014 / 19:24