如何使用ffmpeg仅使用一张图片(image1.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 -loop 1 -i image.png -t 5 out.mp4
- Doe Johnson我发现这样更快:
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。
对于高质量和编码速度(在此示例中使用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)3840:-1
或 -1:2160
。这样做可以避免由于非故意宽高比变化而导致明显模糊。如果您必须有与输入不匹配的确切分辨率,请使用pad或crop 代替。loop=-1:1
无限循环(-1)每个组的1帧(1)movflags faststart
将元数据放置在文件前面,以便在Web浏览器中更快地播放。由于我正在云/无服务器环境中运行此任务,所以最小化运行时间至关重要。我尝试过低帧率的方法,但在我的目标环境中或在VLC本地播放时都没有效果。
-vf loop
选项是循环一帧的主要原因。它将该帧保留在内存中,比其他答案更快且兼容性更好,而不会出现分数帧率的问题。
注意,一张图片就能让你的视频大小瞬间飙升!
操作方法:
使用 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