ffmepg video from uneven sequence of png images

谁说我不能喝 提交于 2019-11-26 22:09:27

问题


I'm going to make a video from series of screenshots (.png files). For each screenshot there is assosiated timestamp information about when it was taken. The time intervals between screenshots may vary and it's highly desired to preserve that difference in the video.

Is there a way to use single ffmpeg command/API providing to it sequence of image + time (or frame) offset and getting one video file as output? By now I have to generate short video files of custom length for each image, and then merge them manually:

ffmpeg -y -loop 1 -i image1.png -c:v libx264 -t 1.52 video1.avi
ffmpeg -y -loop 1 -i image2.png -c:v libx264 -t 2.28 video2.avi
...
ffmpeg -y -loop 1 -i imageN.png -c:v libx264 -t 1.04 videoN.avi


ffmpeg -i "concat:video1.avi|video2.avi|...videoN.avi" -c copy output.avi

This is quite ok, while intervals are large, but the whole approach seems to me a bit fragile.


回答1:


Use the concat demuxer.


Example using 2, 4, and 0.25 seconds.
  1. Make a text file indicating the desired duration per file:

    file 'image1.png'
    duration 1.52
    file 'image2.png'
    duration 2.28
    file 'image3.png'
    duration 1.04
    

    You may have to repeat the last file and duration lines to get it to display the last frame.

  2. Run the ffmpeg command:

    ffmpeg -f concat -i input.txt -c:v libx264 -pix_fmt yuv420p -movflags +faststart output.mp4
    



回答2:


If you can sequence the images based on the timestamp value, and if the images are of the same size, then you can the below command to get the video:

ffmpeg -framerate X -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

Refer to the below url which gives you various command option to generate the video:

FFmpeg Wiki: Create a video slideshow from images



来源:https://stackoverflow.com/questions/30453276/ffmepg-video-from-uneven-sequence-of-png-images

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!