如何使用FFmpeg从图像创建视频?

时间:2014-07-25 17:18:22

标签: image ffmpeg slideshow

ffmpeg -r 1/5 -start_number 2 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

此行工作正常但我想从另一个文件夹中的图像创建视频文件。 我的文件夹中的图像名称是:

img001.jpg
img002.jpg
img003.jpg
...

如何从其他文件夹输入图像文件?示例:C:\mypics

我尝试了此命令,但ffmpeg仅生成了包含第一张图片(img001.jpg)的视频。

ffmpeg -r 1/5 -start_number 0 -i C:\myimages\img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

5 个答案:

答案 0 :(得分:108)

请参阅Create a video slideshow from images – FFmpeg

  

如果您的视频无法正确显示正确的内容如果您遇到问题,例如第一张图片被跳过或仅显示一帧,请使用 fps视频过滤器而不是输出帧速率 -r

ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
  

或者,可以将格式视频过滤器添加到过滤器链中以替换 -pix_fmt yuv420p ,例如" fps = 25,format = yuv420p" 。这种方法的优点是你可以控制哪个过滤器先行

ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4

我测试了以下参数,它对我有用

"e:\ffmpeg\ffmpeg.exe" -r 1/5 -start_number 0 -i "E:\images\01\padlock%3d.png" -c:v libx264 -vf "fps=25,format=yuv420p" e:\out.mp4

以下参数也有效但总是会跳过第一张图片

"e:\ffmpeg\ffmpeg.exe" -r 1/5 -start_number 0 -i "E:\images\01\padlock%3d.png" -c:v libx264 -r 30 -pix_fmt yuv420p e:\out.mp4

根据放置在不同文件夹中的图片制作视频

首先,将图像路径添加到 imagepaths.txt ,如下所示。

# this is a comment details https://trac.ffmpeg.org/wiki/Concatenate

file 'E:\images\png\images__%3d.jpg'
file 'E:\images\jpg\images__%3d.jpg'

示例用法如下;

"h:\ffmpeg\ffmpeg.exe" -y -r 1/5 -f concat -safe 0 -i "E:\images\imagepaths.txt" -c:v libx264 -vf "fps=25,format=yuv420p" "e:\out.mp4"

-safe 0 参数可防止不安全的文件名错误

相关链接

FFmpeg making a video from images placed in different folders

FFMPEG An Intermediate Guide/image sequence

Concatenate – FFmpeg

答案 1 :(得分:85)

-pattern_type glob

This great option makes it easier to select the images in many cases.

Slideshow video with one image per second:

ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
  -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

Here is a demo on YouTube with music added as well: https://www.youtube.com/watch?v=_6D05gCWh_I

时模拟对LinkBut​​ton的点击

正常速度视频,每帧一幅图像,30 FPS:

ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
  -c:v libx264 -pix_fmt yuv420p out.mp4

以下是一些合成测试输入图像:

wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle

使用How to use GLUT/OpenGL to render to a file?

生成的图片

使用https://askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574

生成的GIF

很难观察到视频压缩图像序列的方式比ZIP更好,因为它可以使用专门的算法压缩帧:

  • opengl-rotating-triangle.mp4:340K
  • opengl-rotating-triangle.zip:7.3M

您的图片当然应按字母顺序排序,通常为:

0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg

等等。

但请注意,尽管名称-glob,但这并不像shell Glob模式那样通用,例如:-i '*'失败:https://trac.ffmpeg.org/ticket/3620(显然是因为文件类型是从扩展中推断出来的)。 / p>

-r 30使-framerate 1视频30 FPS克服低帧率的VLC等播放器中的错​​误:VLC freezes for low 1 FPS video created from images with ffmpeg因此,它会重复每帧30次,以保持每秒所需的1幅图像效果

另见:

接下来,您还需要:

在ffmpeg 3.4.4,vlc 3.0.3,Ubuntu 18.04上测试。

答案 2 :(得分:7)

来自the Docs的简单版本

对于Google Earth Studio图像特别有用:

ffmpeg -framerate 24 -i Project%03d.png Project.mp4

答案 3 :(得分:5)

cat *.png | ffmpeg -f image2pipe -i - output.mp4

来自wiki

答案 4 :(得分:0)

从视频创建帧:

ffmpeg\ffmpeg -i %video% test\thumb%04d.jpg -hide_banner

可选:删除输出视频中不需要的帧
(比使用 -ss-t 修剪视频更准确)

然后从图像/帧创建视频,例如:

ffmpeg\ffmpeg -framerate 30 -start_number 56 -i test\thumb%04d.jpg -vf format=yuv420p test/output.mp4