在ffmpeg中从单个图像创建特定持续时间的视频

Dha*_*esh 64 video ffmpeg

如何使用ffmpeg使用单个图像(image1.png)生成电影,持续时间为15秒,具有特定分辨率,因此当我播放视频时,图像将在屏幕上显示15秒.

Equ*_*nox 94

ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=320:240 out.mp4
Run Code Online (Sandbox Code Playgroud)
  • -t 15使它长达15秒.
  • -vf scale = 320:240设置宽度/高度.

确保使用实际的ffmpeg版本,例如http://johnvansickle.com/ffmpeg/

  • 这很棒,但是……它需要很长时间才能基于单个 720p PNG 图像生成 40 分钟的视频,并且耗尽了我的 CPU。有办法加快速度吗?只要保持在几个 GB 以下,压缩就无关紧要。 (9认同)
  • @joey我也不是,特别是因为OP没有要求任何具体的东西.你想从一张照片制作视频而根本不关心任何细节?`ffmpeg -loop 1 -i image.png -t 5 out.mp4` (7认同)
  • 它回答了这个问题,但我不喜欢在命令中使用所有这些冗余的添加内容. (3认同)
  • @YanKingYin libx264 是一个非 GPL 库,可能会丢失。如果你想安装它,你可以这样做(在 mac 上使用 mac 端口):'port install ffmpeg +nonfree' (2认同)
  • 请注意,如果您需要指定帧速率(例如,您想将其与现有视频连接并需要它们匹配),您可以在输出之前添加“-r 30”以指定 30 FPS (2认同)

bra*_*rat 18

发现这样更快:

ffmpeg -framerate 1/10 -i DJI_0024.JPG -c:v libx264 -t 10 -pix_fmt yuv420p -vf scale=320:240 out.mp4
Run Code Online (Sandbox Code Playgroud)

-t 10 使视频长度为 10 秒,并设置 -framerate 1/10。帧率除数应与 -t 参数的数字相同。这使得我在不到一秒的时间内将大分辨率的 jpeg 转换为视频,而另一个答案大约需要 40 秒。结果文件大小也变得稍微小一些。从 3.38MB 到 3.17MB


Jac*_*bow 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
Run Code Online (Sandbox Code Playgroud)
  • -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:2160padcrop
  • loop=-1:1对于 1 帧组 (1) 无限循环 (-1)
  • movflags faststart将把元数据放在文件前面,以便在网络浏览器中更快地播放。

我在云/无服务器环境中运行它,因此最小化运行时间是关键。我尝试了低帧率方法,但它无法在我的目标环境或本地 VLC 上播放。

-vf loop选项是此处循环一帧的选项。它将该帧保留在内存中,这就是它比其他答案更快的主要原因,同时比分数帧速率方法更兼容。