gpt4 book ai didi

node.js - ffmpeg:使用 NodeJS 从 stdin 渲染 webm

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:37 24 4
gpt4 key购买 nike

我在尝试将动态创建的一些 jpeg 帧转储到 ffmpeg 和 NodeJS 以创建 webm 视频时遇到问题。

该脚本尝试执行以下操作:

  • 在初始化时 fork 一个新的 ffmpeg 进程
  • 渲染 Canvas
  • Canvas 中的数据更新后,从中获取 JPEG 数据。
  • 将 JPEG 数据通过管道传输到 ffmpeg 标准输入。
  • ffmpeg 负责将其附加到 webm 视频文件中。
  • 这将永远持续下去,ffmpeg 永远不会停止

它应该是一个不断增长的视频,可以向所有连接的客户端实时广播,但我得到的结果只是一个单帧 webm。

这是 ffmpeg 分支

var args = '-f image2pipe -r 15 -vcodec mjpeg -s 160x144 -i - -f webm -r 15 test.webm'.split(' ');
var encoder = spawn('ffmpeg', args);
encoder.stderr.pipe(process.stdout);

这是 Canvas 更新和管道

theCanvas.on('draw', function () {
var readStream = self.canvas.jpegStream();
readStream.pipe(self.encoder.stdin);
});

ffmpeg 输出

ffmpeg version 1.2.6-7:1.2.6-1~trusty1 Copyright (c) 2000-2014 the FFmpeg developers
built on Apr 26 2014 18:52:58 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --arch=amd64 --disable-stripping --enable-avresample --enable-pthreads --enable-runtime-cpudetect --extra-version='7:1.2.6-1~trusty1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
libavutil 52. 18.100 / 52. 18.100
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.104 / 54. 63.104
libavdevice 53. 5.103 / 53. 5.103
libavfilter 3. 42.103 / 3. 42.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
[image2pipe @ 0xee0740] Estimating duration from bitrate, this may be inaccurate
Input #0, image2pipe, from 'pipe:':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p, 160x144 [SAR 1:1 DAR 10:9], 15 tbr, 15 tbn, 15 tbc
[libvpx @ 0xec5d00] v1.3.0
Output #0, webm, to 'test.webm':
Metadata:
encoder : Lavf54.63.104
Stream #0:0: Video: vp8, yuv420p, 160x144 [SAR 1:1 DAR 10:9], q=-1--1, 200 kb/s, 1k tbn, 15 tbc
Stream mapping:
Stream #0:0 -> #0:0 (mjpeg -> libvpx)
pipe:: Input/output error
frame= 1 fps=0.0 q=0.0 Lsize= 12kB time=00:00:00.06 bitrate=1441.1kbits/s
video:11kB audio:0kB subtitle:0 global headers:0kB muxing overhead 4.195804%

我能做什么?

谢谢,维尼修斯

最佳答案

发送第一帧数据后管道将被关闭。我也遇到过类似的问题,这让我部分地解决了这个问题。希望这会有所帮助,并且我还不算太晚。

theCanvas.on('draw', function () {
var readStream = self.canvas.jpegStream();
readStream.pipe(self.encoder.stdin, {end:false});
});

关于node.js - ffmpeg:使用 NodeJS 从 stdin 渲染 webm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28994271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com