从 Node.js 中的流生成 ffmpeg 缩略图

Generate ffmpeg thumbnail from stream in Node.js

我正在使用 node.js 和 ffmpeg 来接收 rtmp 流并将其输出为 m3u8 格式。

[ '-y',
  '-fflags',
  'nobuffer',
  '-analyzeduration',
  '1000000',
  '-i',
  'rtmp://localhost:1935/live/ANMZJ2ZRUiMhKaAoygRXwAfHe',
  '-c:v',
  'copy',
  '-c:a',
  'aac',
  '-f',
  'tee',
  '-map',
  '0:a?',
  '-map',
  '0:v?',
  '-y',
  '-an',
  '[hls_time=10:hls_list_size=0]./media/live/ANMZJ2ZRUiMhKaAoygRXwAfHe/SX3otgDdf6/index.m3u8|' ]

除了这个功能,我还想输出一个缩略图。我尝试使用以下格式执行此操作但没有成功。

[ '-y',
  '-fflags',
  'nobuffer',
  '-analyzeduration',
  '1000000',
  '-i',
  'rtmp://localhost:1935/live/ANMZJ2ZRUiMhKaAoygRXwAfHe',
  '-c:v',
  'copy',
  '-c:a',
  'aac',
  '-f',
  'tee',
  '-map',
  '0:a?',
  '-map','0:v?',
  '-y',
  '-an',
  '-vf' ,
  'fps=1',
  'C:/Users/media/out.png'
  '[hls_time=10:hls_list_size=0]./media/live/ANMZJ2ZRUiMhKaAoygRXwAfHe/SX3otgDdf6/index.m3u8|' ]

我将此信息发送到 ffmpeg 的方式是

this.ffmpeg_exec = spawn(ffmpeg_path, args);

我无法使用这种方法创建缩略图。有谁知道 problem/solution?

您在第二个命令中有一个额外参数的日志!您实际上只需要输入、帧数和输出。

[ '-i',
  'rtmp://localhost:1935/live/ANMZJ2ZRUiMhKaAoygRXwAfHe',
  '-frames:v',
  '1',
  'C:/Users/media/out.png'
]

-frames:v 的文档 https://ffmpeg.org/ffmpeg.html#Video-Options

fluent-ffmpeg支持流输入输出:

var FfmpegCommand = require('fluent-ffmpeg');
var ffmpeg = FfmpegCommand();
  ffmpeg.input(stream)
  .seekInput("00:00:01.000")
  .outputFormat("image2")
  .pipe(res,{end:true});