保持 FFmpeg 运行

保持 FFmpeg 运行

早上好,我有一个脚本,每秒在一个文件夹中生成 2 张图像,我想让 ffmpeg 将它们转换为一系列时长为 5 秒的 mpeg-4 视频,每秒显示 2 张图像(总共 10 帧)。问题是,在我启动脚本并运行 ffmpeg 之后,它会在我运行命令后立即处理视频和它捕获的图像,然后关闭。我也尝试使用 -re 命令,但什么也没发生。如何在生成图像时保持 ffmpeg 运行并实时转换图像?这是我使用的代码:

ffmpeg -re -framerate 2 -s 1920x1200 -i C:\Desktop\input\%05d.bmp -vcodec libx264 -pix_fmt yuv420p -map 0 -segment_time 5 -g 5 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*5)" -f segment C:\Desktop\output\%05d.mp4

我想要的只是执行一次 ffmpeg 并让它工作,并且只有当它们完成生成时才关闭。

答案1

通过管道传输图像。从文件读取图像时,ffmpeg 将在初始化期间识别序列中的最后一张图像,并读取到该图像为止。

cat images | ffmpeg -f image2pipe -re -framerate 2 -i - -vcodec libx264 ...

编辑: 毫不奇怪,cat 也会在初始化时设置输入名册。不过,下面的方法对我来说是有效的。

让脚本将新图像附加到 blob 文件中

IE cat new-image >> all-images

而 ffmpeg 调用是

ffmpeg -f image2pipe -re -framerate 2 -i all-images -vcodec libx264 ...

非常重要的一点是,你的新图像生成和附加速度要等于或快于 ffmpeg 的读取速度。

答案2

为了让 ffmpeg 不断获取新添加的图像,它需要从 stdin 获取这些图像。您需要编写一个程序或脚本,在新图像到达时不断向其提供这些图像。

例如,请参见:

这些程序将需要进行一些修改才能适合您的需求,但它们是一个很好的起点。

相关内容