如何使用 ffmpeg 生成一个具有特定分辨率的单个图像(image 1.png) ,持续时间为15秒,这样当我播放视频时,图像将在屏幕上显示15秒。
ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=320:240 out.mp4
确保使用最新的 ffmpeg 版本,例如 http://johnvansickle.com/ffmpeg/
发现这个更快:
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秒,设置帧率1/10。帧率的除数应该和-t 的参数相同。 这使得一个大分辨率的 jpeg 转换为视频在不到一秒的时间内为我,而另一个答案大约需要40秒。 另外,由此产生的文件大小也变得稍微小了一些,从3.38 MB 变成了3.17 MB
请注意吹你的视频大小只有一个图像! 这样做: 在参数 -r 0.01中使用 ffmpeg 几乎没有帧速率,这使得文件缩小了约65% 但是您可能还需要削减这个参数 -ss 00:00:00 -t 00:00:27的长度
-r 0.01
-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
对于 高品质和 编码速度(在这里与 HEVC 一起显示,选择 codec 和它的 codec 特定设置,以便在用例中兼容) :
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
-t 15
-c:v libx265
-x265-params lossless=1
-pix_fmt yuv420p
-vf "<options>"
scale=3840:2160
3840:-1
-1:2160
crop
loop=-1:1
movflags faststart
我在一个云/无服务器的环境中运行它,因此最小化运行时是关键。我尝试了低帧率的方法,但它没有发挥在我的目标环境或本地的 VLC。
-vf loop选项循环这里的一帧。它将帧保存在内存中,这也是为什么 主要原因比其他答案更快,同时比分数帧率方法更兼容的原因。
-vf loop