ffmpeg配置困难,滤波器和hls复杂

ffmpeg配置困难,滤波器和hls复杂,ffmpeg,Ffmpeg,我正在尝试设置ffmpeg,以便它可以从麦克风录制,同时将结果编码到.flac文件中,以便稍后与我将制作的一些视频同步 麦克风插入了覆盆子pi(4B),我目前正在尝试使用蓝色雪人麦克风,但我想我可以用focusrite scarlett 2i2代替。然而,我对如何开始服务器录制感到困惑,并决定如果我制作一个简单的nodejs服务器,将ffmpeg作为子进程生成,那么我可以通过web浏览器来完成录制 但后来我受到了这个示例ffmpeg命令的启发,该命令(在我的桌面上有一个图形界面)显示一个音量计

我正在尝试设置ffmpeg,以便它可以从麦克风录制,同时将结果编码到.flac文件中,以便稍后与我将制作的一些视频同步

麦克风插入了覆盆子pi(4B),我目前正在尝试使用蓝色雪人麦克风,但我想我可以用focusrite scarlett 2i2代替。然而,我对如何开始服务器录制感到困惑,并决定如果我制作一个简单的nodejs服务器,将ffmpeg作为子进程生成,那么我可以通过web浏览器来完成录制

但后来我受到了这个示例ffmpeg命令的启发,该命令(在我的桌面上有一个图形界面)显示一个音量计

ffmpeg -hide_banner -i 'http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_30fps_normal.mp4' -filter_complex "showvolume=rate=25:f=0.95:o=v:m=p:dm=3:h=80:w=480:ds=log:s=2" -c:v libx264 -c:a aac -f mpegts - | ffplay -window_title "Peak Volume" -i -
如果我可以将
showvolume
过滤器生成的视频流式传输到用于控制ffmpeg过程的web浏览器(注意,我不想将音频与此一起发送),该怎么办。因此,我尝试在hls上阅读(因为控制设备将是一台ipad——事实上,这就是我将在其上录制视频的设备),并想出了这个命令

ffmpeg -hide_banner -f alsa -ac 2 -ar 48k -i hw:CARD=Microphone -filter_complex "asplit=2[main][vol],[vol]showvolume=rate=25:f=0.95:o=v:m=p:dm=3:h=80:w=480:ds=log:s=2[vid]" -map [main] -c:a:0 flac recordings/session_$(date +%a_%d_%b_%Y___%H_%M_%S).flac -map [vid] -preset veryfast -g 25 -an -sc_threshold 0 -c:v:1 libx264 -b:v:1 2000k -maxrate:v:1 2200k -bufsize:v:3000k -f hls -hls_time 4 -hls_flags independent_segments delete_segments -strftime 1 -hls_segment_filename recordings/volume-%Y%m%d-%s.ts recordings/volume.m3u8
问题是,我发现文档有点不透明,当我生成两个流(主音频流和视频流)时会发生什么,并且该命令会抛出警告和错误:-

警告是
输入流的猜测频道布局#0.0:立体声

错误是

[NULL @ 0x1baa130] Unable to find a suitable output format for 'hls'
hls: Invalid argument
我试图做的是设置流标签[main]和[vol],因为我将传入的音频分为两部分,然后我将[vol]通过“showvolume”过滤器,最后得到流[vid]

我想我需要使用
-map
来指定将[main]流编码到flac并将其写入文件(虽然文件长度为零,但在我运行命令后文件仍然存在),然后使用另一个-map传递到
-f hls
部分。但我觉得我在这个阶段有点不对劲


有人能帮我把这个命令弄好吗。

-bufsize:v:3000k
可能是一个打字错误,试一下
-bufsize:v:1300k

差不多,但不完全正确。它运行了一段时间(直到我按下控制C),唯一的问题是
卷.m3u8
录制中的一些片段,上面的目录有一个类似于
hls
的文件,名为
delete_segments
My bad-我错过了
-bufsize:v:1
上的
:1
,我在
-hls_flags
上有两个标志,然后第二个被称为
delete_segments
。不确定
-hls\u flags
是否只有一个参数,以及是否需要重复该参数以添加另一个参数。不管怎样,它似乎起作用了