【问题标题】:How do I use ffmpeg to merge all audio streams (in a video file) into one audio channel?如何使用 ffmpeg 将所有音频流(在视频文件中)合并到一个音频通道中?
【发布时间】:2017-08-22 17:56:51
【问题描述】:

我正在尝试将 ffmpeg 用于许多文件。 在我使用 ffmpeg 之前,每个文件的音频流的实际数量(每个流通常有一个通道)是未知的。 期望的结果是以某种方式让 ffmpeg 获取音频通道的计数,使用命令行中的数字将它们合并到一个音频通道中。 目标是创建原始视频文件的预览版本,以便在简单的 HTML5 页面中使用。 只需一次调用ffmpeg就可以做到这一点吗? (另外,抱歉,我仍在学习这个问题的某些部分)

编辑: Dumas stackoverflow 提问者在这里。 是的,我一直在尝试多种 ffmpeg 参数组合。 为了回答另一个问题,我们的视频文件具有多个流,通常具有单个通道。 我很快就会发布一些命令行示例。

这个命令行示例可以满足我的需求;有 8 个流,我可以将所有音频合并为一个。问题是在运行 ffmpeg 之前必须知道数字:

ffmpeg -i EXAMPLE.MOV -filter_complex "[0:v]scale=-2:720,format=yuv420p[v];[0:a]amerge=inputs=8[a]" -map "[v]" -map "[a]" -c:v libx264 -crf 23 -preset medium -c:a libmp3lame -ar 44100 -ac 2 OUTPUT.mov

【问题讨论】:

  • 自己试过什么?

标签: audio video ffmpeg


【解决方案1】:

您可以使用ffprobe 查找音频流的数量,并将输出用作ffmpeg 命令中的变量。使用wc 统计ffprobe 列出的音频流的Bash 示例:

ffmpeg -i input.mov -filter_complex "[0:v]scale=-2:720,format=yuv420p[v];[0:a]amerge=inputs=$(ffprobe -loglevel error -select_streams a -show_entries stream=codec_type -of csv=p=0 input.mov | wc -l)[a]" -map "[v]" -map "[a]" -c:v libx264 -crf 23 -preset medium -c:a libmp3lame -ar 44100 -ac 2 output.mov

【讨论】:

  • @wkimbrough 如果它解决了您的问题,请选择此作为您的首选答案。它解决了我的问题。
  • 当前接受的答案对我不起作用 - 这个答案 +1
  • 当前接受的答案对我有用!这似乎修改了视频轨道。这会降低质量并花费更多的时间。所以我不能推荐这个解决方案而不是公认的解决方案。但是通过 Bash shell 使用一个 ffmpeg 命令的 std 输出作为下一个 ffmpeg 调用的参数的想法很好。
【解决方案2】:

以下命令应该与 llogan 的回答执行相同的操作,但不会重新压缩视频轨道,并且需要您确定应合并在一起的音频轨道数。

如果您想知道有多少音频流,请尝试:

ffprobe originalfile.mov 2>&1 | grep 'Stream #'

确定应合并多少音频流后,请在此处的 amerge=inputs=2 参数中使用该数字。此命令会将流合并为一个并使用 aac 压缩重新压缩音频。

ffmpeg -i originalfile.mov -c:v copy -c:a aac -b:a 160k -ac 2 -filter_complex amerge=inputs=2 output.mp4

【讨论】:

  • 1) ffmpeg 输出并不意味着机器解析。请改用ffprobe。 2) 不需要-strict experimental,除非你的ffmpeg 已经很老了。
  • 更新了答案以使用ffprobe。确实,我有时确实使用一些旧版本的 ffmpeg。尽管将其包含在最新版本中似乎没有什么害处,但我也在答案中删除了-strict experimental
  • 你可以去掉grep,只使用ffprobe,例如:ffprobe -loglevel error -select_streams a -show_entries stream=index -of csv=p=0 input.mov
  • 我正在寻找一种解决方案,可以在不修改视频的情况下将 Nvidia Shadowplay 录音的单独麦克风轨道与游戏内音频合并。我使用channelmap 阅读了ffmpeg 的类似答案,但不起作用。但你的终于做到了!谢谢!
猜你喜欢
  • 2016-05-30
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-07
  • 2018-10-14
  • 2019-11-20
相关资源
最近更新 更多