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

use*_*422 132 ffmpeg image slideshow

ffmpeg -r 1/5 -start_number 2 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud)

这条线工作正常,但我想从另一个文件夹中的图像创建一个视频文件.我的文件夹中的图像名称是:

img001.jpg
img002.jpg
img003.jpg
...
Run Code Online (Sandbox Code Playgroud)

我怎么能从不同的文件夹输入图像文件?例: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
Run Code Online (Sandbox Code Playgroud)

kha*_*han 134

请参阅从图像创建视频幻灯片 - FFmpeg

如果您的视频不能正常显示帧如果遇到问题,比如第一个图像跳过或仅显示一个框架,然后用fps视频过滤器,而不是-r的输出帧率

ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf fps=25 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud)

或者,可以将格式视频过滤器添加到过滤链以替换-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
Run Code Online (Sandbox Code Playgroud)

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

"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
Run Code Online (Sandbox Code Playgroud)

以下参数也有效,但它总是跳过第一张图像

"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
Run Code Online (Sandbox Code Playgroud)

从放置在不同文件夹中的图像制作视频

首先将图像路径添加到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'
Run Code Online (Sandbox Code Playgroud)

样本用法如下;

"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"
Run Code Online (Sandbox Code Playgroud)

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

相关链接

FFmpeg从放置在不同文件夹中的图像制作视频

FFMPEG中间指南/图像序列

连接 - FFmpeg

  • 据我所知-r参数是可变帧速率,这意味着FFMPEG可能会丢弃或复制帧以实现所需的输出帧速率.使用fps过滤器"-vf fps = value"强制FFMPEG产生恒定的帧速率.请参阅[从图像创建视频幻灯片 - FFmpeg](https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images#Ifyourvideodoesnotshowtheframescorrectly),这[什么是(技术)区别-r和fps过滤器?](http://ffmpeg.org/pipermail/ffmpeg-user/2013-July/016273.html).所以使用** - r**参数有时会跳过第一张图像.. (3认同)

Cir*_*四事件 112

-pattern_type glob

这个很棒的选项使得在许多情况下更容易选择图像.

幻灯片视频每秒一张图片:

ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
  -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud)

这是一个演示.

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

ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
  -c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud)

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

ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
  -c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
Run Code Online (Sandbox Code Playgroud)

生成的图像:如何使用GLUT/OpenGL渲染文件?

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

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

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

您的图像当然应按字母顺序排序,通常如下:

0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
Run Code Online (Sandbox Code Playgroud)

等等.

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

-r 30使-framerate 1视频30 FPS克服像VLC这样的播放器中的低帧速率的错误:VLC冻结用于使用ffmpeg从图像创建的低1 FPS视频因此它重复每帧30次以保持每秒所需的1个图像效果.

也可以看看:

接下来,您还需要:

测试ffmpeg 3.4.4,vlc 3.0.3,Ubuntu 18.04.

  • [glob 模式](https://trac.ffmpeg.org/wiki/Slideshow) 在 Windows 版本上不可用。 (14认同)
  • 这对我来说非常好,但是我从 npm 包 `ffmpeg-static` 构建的版本没有实现 glob。(选择了模式类型“glob”,但此 libavformat 构建不支持通配符”) (2认同)

Jos*_*ter 17

文档的简单版本

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

ffmpeg -framerate 24 -i Project%03d.png Project.mp4
Run Code Online (Sandbox Code Playgroud)

  • 无法播放此输出:[h264 @ 0x7f148cc3cc40]硬件加速器无法解码图片 (2认同)

Hun*_*ger 5

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

来自维基

  • 我后来用这个 `ffmpeg -i output.mp4 -filter:v "setpts=60.0*PTS" output_slowed.mp4` 减慢了速度 (3认同)

归档时间:

查看次数:

265111 次

最近记录:

6 年,11 月 前