繁体   English   中英

如何使用 ffmpeg 将所有音频流(在视频文件中)合并到一个音频通道中?

[英]How do I use ffmpeg to merge all audio streams (in a video file) into one audio channel?

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

编辑:Dumas stackoverflow asker here。 是的,我一直在尝试 ffmpeg args 的多种组合。 为了回答另一个问题,我们有具有多个流的视频文件,通常具有单个通道。 我将很快发布一些 cmdline 示例。

这个 cmdline 示例符合我的要求; 有 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

您可以使用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

以下命令应与 lllogan 的答案执行相同的操作,但不会重新压缩视频轨道,并要求您确定应将多少音频轨道合并在一起。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM