FFMPEG:生成输入文件时间最长的7.1声道音频文件

Posted

技术标签:

【中文标题】FFMPEG:生成输入文件时间最长的7.1声道音频文件【英文标题】:FFMPEG: Generate 7.1 channel audio file with the longest time of input file 【发布时间】:2019-08-26 07:40:39 【问题描述】:

我想使用 ffmpeg 从 8 个不同的音频文件中生成 7.1 声道的音频文件。 但我发现输出文件的持续时间是由持续时间最短的输入文件决定的。 我没有找到任何参数来自动填充较短的音频文件或选择最长的持续时间作为最终持续时间。

我已经看过下面的官方文件了。 https://ffmpeg.org/ffmpeg-all.html https://trac.ffmpeg.org/wiki/AudioChannelManipulation 但没有任何帮助。

这是我现在使用的命令:

ffmpeg -i fl.wav -i fr.wav -i fc.wav -i lfe.wav -i bl.wav -i bl.wav -i sl.wav -i sr.wav -filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a][6:a][7:a]join=inputs=8:channel_layout=7.1[a]" -map "[a]" output.wav

【问题讨论】:

使用ffprobe 获取持续时间,使用apad 过滤器填充音频,然后连接。 感谢您的回复。我知道这一点,但我还是更喜欢在生成 7.1 频道文件时自动填充。 在 FFMPEG 的 AudioChannelManipulation 页面中,他们说“使用 amerge,所有输入必须具有相同的采样率和格式。如果输入的持续时间不同,则输出将以最短的时间停止。”所以,我认为可能存在一个参数来将持续时间与最长的时间对齐。 遗憾的是没有这样的选项。 你知道如何将文件填充到我想要的持续时间吗?例如:原始文件是 3 分钟,我想将其填充到 5 分钟。 【参考方案1】:

    查找持续时间最长的输入:

    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.wav
    

    将apad 过滤器添加到所有其他输入:

    ffmpeg -i fl.wav -i fr.wav -i fc.wav -i lfe.wav -i bl.wav -i bl.wav -i sl.wav -i sr.wav -filter_complex "[0:a]apad[a0];[1:a]apad[a1];[2:a]apad[a2];[3:a]apad[a3];[4:a]apad[a4];[5:a]apad[a5];[7:a]apad[a7];[a0][a1][a2][a3][a4][a5][6][a7]join=inputs=8:channel_layout=7.1[a]" -map "[a]" output.wav
    

【讨论】:

以上是关于FFMPEG:生成输入文件时间最长的7.1声道音频文件的主要内容,如果未能解决你的问题,请参考以下文章

从具有单声道和缩混的文件中提取具有 5.1 音频的 PRORES 视频

在Javascript中将立体声音频转换为单声道

FFmpegffmpeg 命令查询二 ( 比特流过滤器 | 可用协议 | 过滤器 | 像素格式 | 标准声道布局 | 音频采样格式 | 颜色名称 )

ffmpeg——压缩mav格式音频

以编程方式检测音频文件是立体声还是单声道?

用ffmpeg提取知乎live中的音频数据