是否可以使用ffmpeg
一组序列来创建视频,其中的数字不是从零开始的?
例如,我有一些图片 [test_100.jpg, test_101.jpg, test_102.jpg, ..., test_200.jpg],我想将它们转换为视频。我尝试了以下命令,但没有成功(似乎数字应该从零开始):
ffmpeg -i 测试_%d.jpg -vcodec mpeg4 测试.avi
有什么建议吗?
答案1
-start_number
如果使用如下开关,则无需重命名文件:
ffmpeg -start_number n -i test_%d.jpg -vcodec mpeg4 test.avi
n
静止图像序列的开始位置在哪里。
请注意,只要序列开始后不中断,此方法就会有效。如果有间隙,并且您希望包含所有静止图像,则可能需要重新编号以填补间隙。
您可能会发现其他一些开关很有用。
我使用以下一行代码来获得较慢的帧速率并压缩图像并获得较小的最终视频:
ffmpeg.exe -f image2 -framerate 25 -pattern_type sequence -start_number 1234 -r 3 -i Imgp%04d.jpg -s 720x480 test.avi
该-r 3
选项将生成的视频的帧速率设置为每秒 3 帧,这样我就可以在很短的时间内看到每张静态图片。该-s
选项将图片重新调整为所需的分辨率,以管理生成的视频的大小。
(在 Windows shell 中,替换-i Imgp%04d.jpg
为-i "Imgp%%04d.jpg"
。感谢 Mike Fitzpatrickhttps://superuser.com/a/344178/153054)
答案2
您可以使用下面的代码片段:
cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - -vcodec libx264 out.mp4
答案3
使用 glob 模式
ffmpeg 还支持 bash 风格的通配符(* 代表任意数量的任意字符)。
如果您的图像是连续的但不一定按照前面的示例中的数字顺序排列,则这很有用。
ffmpeg -r 1 -pattern_type glob -i 'test_*.jpg' -c:v libx264 out.mp4
因此,只要您的文件已排序,使用-pattern_type glob
开关就应该有效。
答案4
据我所知,您不能以随机数开始序列(我不记得您应该从 0 还是 1 开始),另外,它不能有间隙,如果有,ffmpeg 将假定序列已经结束并停止添加更多图像。
另外,正如我的回答的评论中所述,请记住您需要指定索引的宽度。例如:
图片%03d.jpg
如果使用 %03d 索引类型,则需要用 0 填充文件名,例如:
图像001.jpg 图像002.jpg 图像003.jpg
ETC。