我正在尝试使用FFMPEG设置画布动画到视频的转换。wasm。其思想是生成一组具有
canvas.toDataURL()
然后将它们发送到节点服务器以生成视频。我正在从公共目录中提取预上传的图像进行测试,但当我尝试发送一组(或单个)使用
帆布toDataURL()
我得到以下错误:
RuntimeError: abort(Error: ENAMETOOLONG: name too long, open 'data:image/png;base64, ...
我试图替换
帆布toDataURL()
具有
canvas.getContext('2d').getImageData()
然而,这也没有帮助。下面是我使用的cut代码:
正面:
async function fetchData() {
const response = await fetch('/api/record-canvas', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ image: here_goes_the_canvas_data }),
});
}
后端:
await ffmpeg.load();
ffmpeg.FS('writeFile', `001.png`, await fetchFile(image));
await ffmpeg.run('-loop', '1', '-i', '001.png', '-c:v', 'libx264', '-t', '30', '-pix_fmt', 'yuv420p', 'out.mp4');
await fs.promises.writeFile('out.mp4', ffmpeg.FS('readFile', 'out.mp4'));
上面的代码经过简化,可以制作一个单幅图像循环30秒的视频。同样,它可以很好地处理预上传的图像,但不能处理画布数据。