ffmpeg - 如何在 FFMPEG 的复杂过滤器中使用过滤后的音频?

标签 ffmpeg

我正在使用 highpass音频过滤器然后尝试使用 showfreqs在生成的音频流上,但它不起作用。 showfreqs filter 使用原始音频流而不是过滤后的音频流。

命令:
ffmpeg -i audio.mp3 -filter_complex highpass,showfreqs,format=yuv420p highpass.mp4
我尝试命名 highpass输出,但没有任何区别:
ffmpeg -i audio.mp3 -filter_complex highpass[hi],[hi]showfreqs,format=yuv420p highpass.mp4
我如何构造我的命令showfreqs使用 highpass 的输出?

更新

我正在使用通过 Homebrew 安装在 Mac 上的 FFMPEG 4.1.4。

源音频:https://dsc.cloud/weavermedia/audio.mp3

命令和生成的文件:

运行highpass在音频.mp3 上:

  • ffmpeg -i audio.mp3 -filter_complex highpass highpass.mp3
  • 结果:https://dsc.cloud/weavermedia/highpass.mp3正确

  • 运行showfreqs在音频.mp3 上:
  • ffmpeg -i audio.mp3 -filter_complex showfreqs,format=yuv420p showfreqs.mp4
  • 结果:https://dsc.cloud/weavermedia/showfreqs.mp4正确

  • 运行showfreqs在 highpass.mp3 上:
  • ffmpeg -i highpass.mp3 -filter_complex showfreqs,format=yuv420p showfreqs.mp4
  • 结果:https://dsc.cloud/weavermedia/highpass-showfreqs.mp4正确

  • 运行highpassshowfreqs在audio.mp3系列中:
  • ffmpeg -i audio.mp3 -filter_complex highpass,showfreqs,format=yuv420p highpass.mp4
  • 结果:https://dsc.cloud/weavermedia/highpass.mp4不正确

  • 我尝试了几个不同的源音频文件,并且总是得到相同的结果。

    我尝试了 2 台不同的 Mac,尽管它们都通过 Homebrew 安装了 FFMPEG 4.1.4。

    我尝试了不同的高通设置并得到相同的结果(默认的高通设置足以听到差异)。

    更新 2

    在 QuickTime 中并排查看生成的视频,我看到 showfreqs实际上似乎在使用来自 highpass 的音频流但最终的视频包含原始未过滤的音频。

    所以我的问题实际上是如何让生成的视频使用过滤后的音频流而不是原始视频。

    最佳答案

    showfreqs将其音频输入转换为视频输出,因此 ffmpeg 将回退到原始音频以进行音频输出。为了避免这种情况,请拆分高通结果并将一份副本传递给 showfreqs,而将另一份留作音频输出。

    ffmpeg -i audio.mp3 -filter_complex highpass,asplit=2[sf][aud];[sf]showfreqs,format=yuv420p;[aud]anull highpass.mp4
    

    关于ffmpeg - 如何在 FFMPEG 的复杂过滤器中使用过滤后的音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57940426/

    相关文章:

    video - 如何使用基于 ffmpeg 的 Intel QSV 录屏

    ios - undefined symbol : ___darwin_check_fd_set_overflow

    opencv - 使用 ffmpeg、OpenCV 的硬件加速 h264 解码

    bash - FFmpeg 如何使用 bash 生成视频序列

    ffmpeg - HDR 到 SDR - 无法为 'format=gbrpf32le' 找到合适的输出格式

    ffmpeg - 在代码中混合视频和声音

    c++ - FFmpeg:如何在不重新编码的情况下将编码的媒体数据从一个容器放入另一个容器?

    android - 将 FFmpeg 帧转换为 OpenGL ES 纹理

    ffmpeg - 如何使用 ffmpeg 对多个输出视频的音频进行一次编码

    ffmpeg - 为什么AVFrame中的packet.pts !=frame->pkt_pts?