使用ffmpeg从单个图像创建指定时长的视频

143

如何使用ffmpeg仅使用一张图片(image1.png)生成一个持续15秒的电影,并具有特定分辨率,以便在播放视频时,图像将在屏幕上出现15秒。


2
我搜索了很多,但只找到与从一组图像制作视频有关的问题。对这个问题点赞! - RealZombs
4个回答

197
ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=320:240 out.mp4
  • -t 15参数表示视频长度为15秒。
  • -vf scale=320:240参数设置视频宽度和高度。

请确保使用最新版的ffmpeg,例如http://johnvansickle.com/ffmpeg/


2
@YanKingYin,libx264是一个非GPL库,可能会缺失。如果您想安装它,在Mac上可以使用Mac Ports进行安装:'port install ffmpeg +nonfree'。 - andreas
6
回答了这个问题,但我不喜欢命令中所有那些多余的附加部分的使用。 - joey
33
@joey 我也是,尤其是因为OP没有提出任何具体要求。你想从一张图片制作视频,却不关心任何细节吗?ffmpeg -loop 1 -i image.png -t 5 out.mp4 - Doe Johnson
10
这很棒,但是...用一张720p的PNG图片生成40分钟的视频需要很长时间,并会使我的CPU过热。有没有加快速度的方法?只要保持在几GB以下,压缩并不重要。 - HunterZ
2
请注意,如果您需要指定帧速率(例如,您想将其与现有视频连接起来并需要它们匹配),则可以在输出之前添加例如“-r 30”以指定30 FPS。 - tobek
显示剩余9条评论

18

我发现这样更快:

ffmpeg -framerate 1/10 -i DJI_0024.JPG -c:v libx264 -t 10 -pix_fmt yuv420p -vf scale=320:240 out.mp4

-t 10参数将视频长度设置为10秒,并且设置帧速率-fps 1/10。帧速率的除数应与-t参数的值相同。 这使得一个分辨率较大的jpeg图像在不到一秒的时间内被转换成了视频,而另一个答案需要约40秒。 同时,生成的文件大小略微变小,从3.38MB减小到了3.17MB。


13

对于高质量和编码速度(在此示例中使用HEVC),选择编解码器及其特定于编解码器的设置以实现与您的用例的兼容性:

ffmpeg -framerate 30 -i input.jpg -t 15 \
    -c:v libx265 -x265-params lossless=1 \
    -pix_fmt yuv420p -vf "scale=3840:2160,loop=-1:1" \
    -movflags faststart \
    out.mp4
  • -framerate 30 代替默认的25 fps
  • -t 15 视频时长15秒
  • -c:v libx265 使用h.265(HEVC)编码
  • -x265-params lossless=1 无损编码,防止静态图像出现伪影。不同于视频,静态图像会展示足够长时间以注意到伪影。
  • -pix_fmt yuv420p 设置像素格式以确保兼容性,因为输入是图像(JPEG通常为YUV444,许多解码器无法接受该格式)
  • -vf "<options>" 设置视频过滤器
  • scale=3840:2160 明确缩放至3840x2160(4K)
    • 如果您的输入不是完全16:9(或任何您目标比例),请使用 3840:-1-1:2160。这样做可以避免由于非故意宽高比变化而导致明显模糊。如果您必须有与输入不匹配的确切分辨率,请使用pad或crop 代替。
  • loop=-1:1 无限循环(-1)每个组的1帧(1)
  • movflags faststart 将元数据放置在文件前面,以便在Web浏览器中更快地播放。

由于我正在云/无服务器环境中运行此任务,所以最小化运行时间至关重要。我尝试过低帧率的方法,但在我的目标环境中或在VLC本地播放时都没有效果。

-vf loop选项是循环一帧的主要原因。它将该帧保留在内存中,比其他答案更快且兼容性更好,而不会出现分数帧率的问题。


1
感谢您解释这些选项,这节省了很多时间去理解。 - Emile Vrijdags
1
如果我有10张图片,我想每张图片显示半秒钟,在一个5秒钟的视频中呈现出来,该怎么办? - Alan Jurgensen
如果您还没有搜索过,请访问以下链接:https://dev59.com/tV8f5IYBdhLWcg3wK__4?noredirect=1&lq=1 - Jacob Greenbow

2

注意,一张图片就能让你的视频大小瞬间飙升! 操作方法: 使用 ffmpeg,参数为-r 0.01,将帧率降至几乎为零,这样可以让文件大小缩小约65%。 但是你可能还需要通过这个参数-ss 00:00:00 -t 00:00:27 缩短视频长度。

以下是我的代码:

ffmpeg -r 0.01 -loop 1 -i image.jpg -i audio.mp3 -c:v libx264 -tune stillimage -preset  ultrafast -ss 00:00:00 -t 00:00:27   -c:a aac  -b:a 96k -pix_fmt yuv420p  -shortest out.mp4 -y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接