求助 关于 fluent-ffmpeg 输出文件的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yangheng4922
V2EX    Node.js

求助 关于 fluent-ffmpeg 输出文件的问题

  •  
  •   yangheng4922 2020-08-03 19:44:53 +08:00 3600 次点击
    这是一个创建于 1897 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想把 rtsp 的直播流转成 一帧一帧的图片

    通过命令行可以实现

    ffmpeg -i "rtsp://admin:[email protected]/main/Channels/" -y -f image2 img%03d.jpg 

    在 nodejs 中使用 fluent-ffmpeg 实现了

    const ffmpeg = require('fluent-ffmpeg') const fs = require('fs') let ffmpegPath = 'ffmpeg/ffmpeg.exe' ffmpeg.setFfmpegPath(ffmpegPath) let url = 'rtsp://admin:[email protected]/main/Channels/' // ffmpeg -i "rtsp://admin:[email protected]/main/Channels/" -y -f image2 img%03d.jpg ffmpeg(url) .addInputOption('-rtsp_transport', 'tcp', '-buffer_size', '102400') // 这里可以添加一些 RTSP 优化的参数 // .outputOptions(['-vframes 1', '-fflags nobuffer', '-tune zerolatency']) // 每帧一张图 .videoCodec('png') // 输出 PNG 格式图片 .on('error', function (err, stdout, stderr) { console.log('错误信息', err.message); }) .on('end', function () { console.log('结束' ,'Screenshots taken'); }) .on('codecData', function () { console.log('codecData 事件', 'Stream codecData.') }) .output('img%03d.jpg').format("image2").noAudio().run() 

    但是上面两种方式都会直接生成图片 有没有办法把图片的 buffer 获取到 不写入文件中

    第 1 条附言    2020-08-04 07:43:59 +08:00

    我在用 pipe 方式可以获取到图片流 但是只有第一张图片 然后就报错了

    const ffmpeg = require('fluent-ffmpeg') const fs = require('fs') let ffmpegPath = 'ffmpeg/ffmpeg.exe' ffmpeg.setFfmpegPath(ffmpegPath) let url = 'rtsp://admin:[email protected]/main/Channels/' // ffmpeg -i "rtsp://admin:[email protected]/main/Channels/" -y -f image2 img%03d.jpg let img = fs.createWriteStream('img.png') ffmpeg(url) .addInputOption('-rtsp_transport', 'tcp', '-buffer_size', '102400') // 这里可以添加一些 RTSP 优化的参数 .videoCodec('png') // 输出 PNG 格式图片 .format("image2").noAudio().pipe().on('data', function(chunk) { img.write(chunk) console.log('ffmpeg just wrote ' + chunk.length + ' bytes'); }); 

    控制台信息

    $ node index.js codecData 事件 Stream codecData. ffmpeg just wrote 98304 bytes ffmpeg just wrote 98304 bytes ffmpeg just wrote 98304 bytes ffmpeg just wrote 98304 bytes ffmpeg just wrote 98304 bytes ffmpeg just wrote 16017 bytes 错误信息 ffmpeg exited with code 1: av_interleaved_write_frame(): Invalid argument frame= 10 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.08 bitrate=N/A speed=0.368x video:1003kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown Conversion failed! 
    1 条回复
    yangheng4922
        1
    yangheng4922  
    OP
       2020-08-03 19:59:40 +08:00
    我在用 pipe 方式可以获取到图片流 但是只有第一张图片 然后就报错了
    ```
    const ffmpeg = require('fluent-ffmpeg')
    const fs = require('fs')

    let ffmpegPath = 'ffmpeg/ffmpeg.exe'
    ffmpeg.setFfmpegPath(ffmpegPath)

    let url = 'rtsp://admin:[email protected]/main/Channels/'
    // ffmpeg -i "rtsp://admin:[email protected]/main/Channels/" -y -f image2 img%03d.jpg
    let img = fs.createWriteStream('img.png')

    ffmpeg(url)
    .addInputOption('-rtsp_transport', 'tcp', '-buffer_size', '102400') // 这里可以添加一些 RTSP 优化的参数
    // .outputOptions(['-vframes 1', '-fflags nobuffer', '-tune zerolatency']) // 每帧一张图
    .videoCodec('png') // 输出 PNG 格式图片
    .on('error', function (err, stdout, stderr) {
    console.log('错误信息, err.message);
    })
    .on('end', function () {
    console.log('结束' ,'Screenshots taken');
    })
    .on('codecData', function () {
    console.log('codecData 事件', 'Stream codecData.')
    })
    .format("image2").noAudio().pipe().on('data', function(chunk) {
    img.write(chunk)
    console.log('ffmpeg just wrote ' + chunk.length + ' bytes');
    });
    ```

    控制台信息
    ```
    $ node index.js
    codecData 事件 Stream codecData.
    ffmpeg just wrote 98304 bytes
    ffmpeg just wrote 98304 bytes
    ffmpeg just wrote 98304 bytes
    ffmpeg just wrote 98304 bytes
    ffmpeg just wrote 98304 bytes
    ffmpeg just wrote 16017 bytes
    错误信息 ffmpeg exited with code 1: av_interleaved_write_frame(): Invalid argument
    frame= 10 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.08 bitrate=N/A speed=0.368x
    video:1003kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    Conversion failed!
    ```
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1245 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 23:36 PVG 07:36 LAX 16:36 JFK 19:36
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86