首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将与索引并行创建的多个图像输送到ffmpeg,使其能够与图像创建的速度相匹配?

如何将与索引并行创建的多个图像输送到ffmpeg,使其能够与图像创建的速度相匹配?
EN

Stack Overflow用户
提问于 2020-09-23 10:22:40
回答 1查看 636关注 0票数 4

我们有一个系统,可以逐帧输出4通道的png图像(我们也控制这些图像的输出格式,所以只要它支持透明性,我们就可以使用其他的东西)。现在,我们正在等待所有的图像,然后用ffmpeg将它们编码成一个带有vp8 (libvpx编码器)的webm视频文件。但是我们现在想要将这些图像传输到FFmpeg,以便在图像被释放时同时编码到WebM视频中,这样我们就不会等待ffmpeg对所有图像进行编码了。

这是python语法中的当前命令:

代码语言:javascript
复制
['/usr/bin/ffmpeg', '-hide_banner', '-y', '-loglevel', 'info', '-f', 'rawvideo', '-pix_fmt', 'bgra', '-s', '1573x900', '-framerate', '30', '-i', '-', '-i', 'audio.wav', '-c:v', 'libvpx', '-b:v', '0', '-crf', '30', '-tile-columns', '2', '-quality', 'good', '-speed', '4', '-threads', '16', '-auto-alt-ref', '0', '-g', '300000', '-map', '0:v:0', '-map', '1:a:0', '-shortest', 'video.webm']
# for ease of read:
# /usr/bin/ffmpeg -hide_banner -y -loglevel info -f rawvideo -pix_fmt bgra -s 1573x900 -framerate 30 -i - -i audio.wav -c:v libvpx -b:v 0 -crf 30 -tile-columns 2 -quality good -speed 4 -threads 16 -auto-alt-ref 0 -g 300000 -map 0:v:0 -map 1:a:0 -shortest video.webm

proc = subprocess.Popen(args, stdin=subprocess.PIPE)

下面是将图像传递给FFMPEG proc stdin的示例示例,如下所示:

代码语言:javascript
复制
# wait for the next frame to get ready
for frame_path in frame_path_list:
    while not os.path.exists(frame_path):
        time.sleep(0.25)
    frame = cv2.imread(frame_path, cv2.IMREAD_UNCHANGED)
    
    # put the frame in stdin so that it gets ready
    proc.stdin.write(frame.astype(np.uint8).tobytes())

目前这一过程的速度是0.135倍,这对我们来说是一个巨大的瓶颈。早些时候,当我们将输入作为-pattern_type glob -i images/*.png时,我们在单个核上得到了大约1x-1.2x的输入。因此,我们的结论是,我们正受到stdin的阻碍,因此正在寻找通过多个源传递输入或以某种方式帮助ffmpeg并行化的方法--我们正在考虑的几个选项:

  • 以某种方式将其输入到不同的管道中,并使ffmpeg从管道中读取。
  • 在ffmpeg上附加了一个新的图像,而不对整个视频进行重新编码,但是我们没有找到一种方法来直接提供输入图像。

但是我们没有能够让这两种方法发挥作用,也无法接受任何其他的解决方案。会很感激你在这方面的帮助。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-11-02 01:34:15

您可以使用ffmpeg的-f image2pipe选项,正如我发现的here。示例:

代码语言:javascript
复制
cat frames/{0000..0512}.png | ffmpeg -f image2pipe -r 60 -i - -c:v libx265 video.mkv
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64025844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档