use*_*557 5 video ffmpeg image
我想以编程方式创建一个由一系列图像组成的视频文件。但是,我也希望能够为每个图像指定持续时间。我经常看到建议针对类似任务的ffmpeg示例,但是对于每个图像,它们总是假定持续时间相同。是否有一种有效的方法来实现这一目标?(一种低效的解决方案可能是将帧频设置为较高的值,然后重复复制每个图像,直到其与预期持续时间匹配为止)
我还将动态生成每个图像,因此,如果有一种方法可以将图像数据编码为视频帧而无需将每个图像写入磁盘,那会更好。但是,这不是必需的。
编辑:明确地说,我不一定需要使用ffmpeg。其他免费的命令行工具以及视频处理库也不错。我只是在寻找一个好的解决方案。
我能够使用以下命令解决完全相同的问题。vframes 设置为秒数 * fps 在示例中,第一个视频有 100 帧(100 帧/25 fps = 4 秒),第二个视频有 200 帧(8 秒)
ffmpeg -f image2 -loop 1 -vframes 100 -r 25 -i a.jpg -vcodec mpeg4 a.avi
ffmpeg -f image2 -loop 1 -vframes 200 -r 25 -i b.jpg -vcodec mpeg4 b.avi
mencoder -ovc copy -o out.mp4 a.mp4 b.mp4
Run Code Online (Sandbox Code Playgroud)
mencoder 部分就像 d33pika 一样
小智 5
您可以使用 concat demuxer 手动排序图像并为每个图像提供特定的持续时间。
ffmpeg -f concat -i input.txt -vsync vfr -pix_fmt yuv420p output.mp4
Run Code Online (Sandbox Code Playgroud)
您的input.txt应该如下所示。
file '/path/to/dog.png'
duration 5
file '/path/to/cat.png'
duration 1
file '/path/to/rat.png'
duration 3
file '/path/to/tapeworm.png'
duration 2
file '/path/to/tapeworm.png'
Run Code Online (Sandbox Code Playgroud)
您可以根据需要动态编写这个txt文件并执行命令。
有关更多信息,请参阅https://trac.ffmpeg.org/wiki/Slideshow
使用 ffmpeg 似乎无法为不同的图像设置不同的持续时间。我会为每个图像创建单独的视频,然后使用 mencoder 将它们连接起来,如下所示:
ffmpeg -f image2 -vframes 30 -i a.jpg -vcodec libx264 -r 1 a.mp4
ffmpeg -f image2 -vframmes 10 -i bjpg -vcodec libx264 -r 1 b.mp4
mencoder -ovc copy -o out.mp4 a.mp4 b.mp4
Run Code Online (Sandbox Code Playgroud)
用于 concat 操作的 mencoder 需要所有输出视频具有相同的分辨率、帧速率和编解码器。
这里 a.mp4 有 30 个持续时间为 30 秒的帧,b.mp4 有 10 个持续时间为 10 秒的帧。
| 归档时间: |
|
| 查看次数: |
1610 次 |
| 最近记录: |