我可以从带时间戳的图像创建 VFR 视频吗?

问题描述 投票:0回答:3

首先,我对图片制作视频的经验几乎为零。

我拥有一组 BMP 时间戳图像,我想从中生成视频。 由于时间戳的间隔不相等,我不能简单地使用从图像创建恒定帧速率视频的软件。

一个可能的解决方案是在固定的时间间隔创建人造图像,但如果我无法制作 VFR 视频,我更愿意将其作为最后的手段。

关于如何实现我想要的有什么建议吗?

video ffmpeg timestamp frame-rate avconv
3个回答
10
投票

您可以结合使用两个工具来执行此操作:ffmpeg 和 mp4fpsmod

第1步是使用ffmpeg生成恒定帧率文件

ffmpeg -i images%d.bmp -pix_fmt yuv420p ffmpeg-cfr.mp4

第 2 步 是生成如下所示的时间码文件,每行包含一帧的相对时间戳(以毫秒为单位)。

# timecode format v2

0
33
88
100
120
160
200
230
330
347

第3步是使用mp4fpsmod生成VFR文件

mp4fpsmod -o vfr.mp4 -t timecodes.txt ffmpeg-cfr.mp4 

此文件可以按预期使用

ffplay
播放,但某些播放器可能无法播放,在这种情况下运行

步骤 4 使用 FFmpeg 从 VFR 生成 CFR MP4

ffmpeg -i vfr.mp4 final-cfr.mp4

这是一个 CFR 文件,但时间关系根据 VFR 保留,尽管如果时间码间隔非常不规则,则会有一些 PTS 调整。这可以通过指定高帧速率来解决

-r N


0
投票

看看这个链接。 http://avisynth.nl/index.php/VFR#encoding_to_vfr_.28mkv.29

现在可能有点过时了,因为您现在执行从 mkvtoolnix (而不是 mkvmerge)导入时间码格式文件的过程,但它应该允许您这样做。


0
投票

首先制作一个 input.txt 文件,如下所示

file '1.jpg'
duration 0.1
file '2.jpg'
duration 0.12
file '3.jpg'
duration 0.115

其中

duration
是每个图像应显示的秒数,在此示例中,
1.jpg
显示 100 毫秒(0.1 秒),
2.jpg
显示 120 毫秒(0.12 秒),并且
3.jpg
应该显示显示 115 毫秒(0.115 秒)

然后简单地做

ffmpeg -f concat -i input.txt -vsync vfr output.mp4

这适用于所有帧除了最后一帧,无论

duration
规格如何,它都只会显示几分之一秒。 (我不知道为什么 ffmpeg 在最后一帧失败,也许这是一个错误?)

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