通过管道将数据库中的SVG文件传入FFmpeg生成视频时的报错问题及解决方案咨询
通过管道将数据库中的SVG文件传入FFmpeg生成视频时的报错问题及解决方案咨询
我现在需要实现从数据库存储的SVG图形生成视频的功能,计划的操作步骤如下:
- 连接数据库
- 创建以管道作为输入的FFmpeg命令
- 启动FFmpeg子进程
- 等待进程输出结果
- 启动另一个线程,循环处理所有SVG文件:
- 从数据库下载SVG文件到字节缓冲区
- 将字节缓冲区内容写入FFmpeg子进程的标准输入
但在运行代码时,通过管道传递SVG文件给FFmpeg的过程中遇到了问题。我最初使用的命令是:
ffmpeg -f image2pipe -c:v svg -i - -c:v libx264 -y Downloads/out.mp4
执行后FFmpeg返回了如下错误:
[image2pipe @ 0x562ebd74c300] Could not find codec parameters for stream 0 (Video: svg (librsvg), none): unspecified size
Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
我后来了解到FFmpeg支持svg_pipe格式,于是尝试改用这个格式,但还是出现了完全相同的错误。
另外,我试过先把所有SVG文件下载到临时目录,再使用不依赖管道的命令生成视频,这个方法是有效的,命令示例如下:
ffmpeg -i *.svg -c:v libx264 out.mp4
不过在我的场景里,我希望能避免这种先落地文件的方式,直接用管道处理。
我现在有两个疑问:
- 为什么不使用管道的命令能正常工作,而类似
cat sample.svg | ffmpeg -f svg_pipe -i - -c:v libx264 out.mp4的管道命令就会失败? - 在我的需求场景下,该如何正确使用管道来实现从数据库SVG生成视频的功能?
当前临时解决方案
目前我找到了一个可行的办法:使用-f rawvideo参数将图形数据传给FFmpeg,但这需要先把SVG格式转换为原始RGB格式才能实现。
备注:内容来源于stack exchange,提问作者Max Chr.
相关产品推荐
相关产品推荐

