gpt4 book ai didi

ffmpeg - 使用实际录音过滤掉视频中的噪音

转载 作者:行者123 更新时间:2023-12-04 22:57:49 27 4
gpt4 key购买 nike

我使用我的笔记本电脑(戴尔 XPS13 上的 Ubuntu 18.04 LTS 衍生产品)使用 OBS 录制视频(这些只是旁白的演示文稿) .演示完成后(.flv 格式),我使用 ffmpeg 处理它,使用过滤器尝试减少背景噪音、减小视频大小、将编码更改为 .mp4、插入水印等。几个月后,这个系统运作良好。
但是,我的笔记本电脑现在开始显示它的年龄(它是 4 岁)。这意味着风扇会变得响亮 - 响亮到足以在录音中注意到,但在您工作时不会响亮。因此,即使在 ffmpeg 中对低频进行过滤后,视频中仍会保留点击和其他类型的声音。我是一名科学家,但不是音频/视频专家。所以,我在想 - 我是否可以在我不演示时简单地记录机器发出的噪音,然后使用该录音过滤掉我的机器在演示期间发出的噪音?
像过滤掉某些音频频谱范围等一揽子方法不太可能奏效,因为噪声的功率谱可能有很多峰值,而且这些峰值也可能延伸到人声范围内(我能听到它们)。此外,这是一个移动的目标 - 笔记本电脑正在老化,无论如何,它产生的噪音的数量和类型取决于负载和它已经打开了多长时间。算法:

  • 记录实际 当我不录音时,电脑噪音(加上背景噪音的额外好处)。理想情况下,就在开始录制演示文稿之前。这可以采取 1-2 分钟音频样本的形式。
  • 在 OBS 上录制演示文稿。
  • 使用 1 作为滤波器来去除 2 中的噪声。我想这将涉及对 1 进行傅立叶分析,然后在每个时期从 2 的频谱中去除这些峰值。

  • 我已经研究过 sox,这是人们有些轻率地指向你而没有提供任何细节的东西。我不知道如何从视频中分离出音频 channel ,然后将它们交错在一起(不是这里的软件专家)。除了 RTFM,还有其他人可以提供的有用建议吗?我已经搜索过,但无法找到 HOWTO。我认为这可能是我搜索的错误,因为我拒绝相信这是一个新想法——它是许多领域用来消除噪音的标准方法,包括天文学。

    最佳答案

    我没有足够的声誉来发表评论,所以这是我的答案,因为它适用于我的情况,我自己也在寻找答案。它可能适用于您的情况,也可能不适用于您的情况,因为我使用 ffmpeg 录制我的屏幕。 (这对于记录屏幕上的所有内容很好,但对于单个程序/窗口或屏幕的一部分来说不是一个很好的选择,可以做到,但我不认为有哪个部分的视觉指示正在录制屏幕)。
    我遇到了afftdn过滤器(https://ffmpeg.org/ffmpeg-filters.html#afftdn@Gyan 在对 OP 问题的评论中也提到)并且能够成功使用它。
    该过程可能仅适用于 ffmpeg 制作的现场录音。 - 至少我想不出用预先录制的内容来做这件事的方法。以下过程也适用于仅音频输入,但您需要修改 ffmpeg命令仅录制音频。它是这样工作的:

  • 运行ffmpeg命令来录制您的音频/屏幕。
  • 指导 afftdn记录背景噪音并安静地坐一会儿。
  • 指导 afftdn停止录制背景噪音并继续您的语音评论和您的演示文稿的实际录制。
  • 从输出文件中丢弃录音的开头,它只包含背景噪音的录音。

  • 对于第 1 步。我运行
    ffmpeg -f pulse -i <my_input_device> -f x11grab -s 1920x1080 -framerate 30 -i :0.0 -s 1280x720 -filter_complex afftdn=tn=enabled /home/my_user_name/Videos/my_output_file.mp4
    列出您的输入设备运行
    pactl list short sources
    并选择要使用的输入设备的名称 - 我的是 alsa_input.pci-000_00_1b.0.analog-stereo . ffmpeg 的第一个 -s 参数上面的命令( -s 1920x1080 )是我的屏幕分辨率(相应地进行调整,您也可以将其设置为小于屏幕分辨率以仅记录屏幕的一部分 - 将其与 offset 参数结合以将记录的部分从左上象限移动屏幕),参数 -i :0.0表示默认屏幕的左上角像素 - 如果您不想记录整个屏幕,则可以使用其他偏移量(如果您更改此偏移量,请相应地更改您的输入分辨率)。第二个 -s 参数 ( -s 1280x780 ) 是输出视频分辨率。
    第 2 步:点击 c告诉 ffmpeg您正在向过滤器发出命令。 ffmpeg应通过输出 Enter command: <target>|all <time>| -1 <command>[ <argument>] 提示您输入.类型:
    afftdn -1 start
    过滤器现在正在记录您的背景噪音。
    第三步:点击 c告诉 ffmpeg您再次向过滤器发出命令,并在出现提示时键入:
    afftdn -1 stop
    过滤器现在应该从您的音频中过滤背景噪音(在我的情况下,它需要几秒钟才能启动 - 我怀疑这可能取决于噪音记录的长度 - 您可能需要进行一些实验以获得良好的感觉何时开始实际录制)。继续您的录音。
    第 4 步。播放音频/视频以找到您的实际视频的开始时间,并消除了噪音。然后告诉 ffmpeg在此之前删除所有内容:
    ffmpeg -ss <duration> -i /home/my_user_name/Videos/my_output_file.mp4 /home/my_user_name/Videos/my_output_file_with_noise_removed.mp4
    替换 <duration>从输入文件中删除的秒数(您还可以提供 HH:mm:ss.d 格式的持续时间,小时 HH 和十进制 .d 是可选的),例如:
    ffmpeg -ss 30.5 -i /home/my_user_name/Videos/my_output_file.mp4 /home/my_user_name/Videos/my_output_file_with_noise_removed.mp4
    当然,使用您喜欢的文件名 - 我喜欢导航到工作目录并发出表单的命令
    ffmpeg -ss 30.5 -i input_file.mp4 noiseless_output_file.mp4

    关于ffmpeg - 使用实际录音过滤掉视频中的噪音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66541446/

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