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

问题描述 投票:94回答:3
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
image ffmpeg slideshow
3个回答
118
投票

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


91
投票

-pattern_type glob

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

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

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

以下是YouTube上的一个演示,其中还添加了音乐:https://www.youtube.com/watch?v=_6D05gCWh_I

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

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

将一个音乐文件转换为带有固定图像的视频,用于YouTube上传:https://superuser.com/questions/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572

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

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?

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

等等。

但请注意,尽管名称为0001-first-thing.jpg 0002-second-thing.jpg 0003-and-third.jpg ,但这并不像shell Glob图案那样通用,例如:-glob失败:-i '*'(显然是因为文件类型是从扩展中推断出来的)。

https://trac.ffmpeg.org/ticket/3620制作-r 30视频30 FPS以克服低帧速率的VLC等播放器中的错​​误:-framerate 1因此它重复每帧30次以保持每秒所需的1个图像效果。

也可以看看:

接下来,您还需要:

测试ffmpeg 3.4.4,vlc 3.0.3,Ubuntu 18.04。


14
投票

来自ffmpeg -i video.mp4 -i audio.mp3 -c copy output.mkv 的简单版本

the Docs图像特别有用:

Google Earth Studio

1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.