You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FFmpeg拼接音频后输出视频无音频问题求助

FFmpeg拼接音频后输出视频无音频问题求助

嗨,我来帮你排查这个问题~ 从你给出的命令和描述来看,输出时长是音频总和但没有声音,大概率是音频流映射或者编码兼容的问题,咱们一步步来解决:

问题分析

你的命令里用了 -map 0,这会把原视频 v1.mp4 的所有流(包括它自带的音频流,如果有的话)都映射到输出里,再加上拼接后的音频流,最终输出会有两个音频流。有些播放器会默认优先播放原视频的音频流,如果原视频的音频是静音或者本身就没有有效音频,就会出现你看到的“有音频时长但没声音”的情况。另外,没有明确指定音频编码器,也可能导致FFmpeg自动选择的编码和MP4容器不兼容。

修正后的命令

试试这个调整后的命令:

ffmpeg -i v1.mp4 -i a1.mp3 -i a2.mp3 -filter_complex "[1:a][2:a]concat=a=1:n=2:v=0[s0]" -map 0:v -map "[s0]" -c:v copy -c:a aac -shortest out.mp4

关键调整说明

  • [1:a][2:a]:明确指定使用两个输入文件的音频流进行拼接,避免流索引的歧义
  • -map 0:v:只映射原视频的视频流,不再包含原视频的音频流,确保输出只有咱们拼接好的那一个音频流
  • -c:v copy:直接复制原视频的编码格式,不用重新编码视频,节省时间
  • -c:a aac:指定音频编码器为AAC,这是MP4容器最兼容的音频编码格式,避免编码不兼容导致无声
  • -shortest:保留这个参数,让输出时长等于输入中较短的那个(这里就是拼接后音频的总时长,符合你的需求)

额外排查步骤

如果还是没声音,可以先单独测试音频拼接是否正常,执行下面的命令生成一个测试音频文件,播放看看有没有声音:

ffmpeg -i a1.mp3 -i a2.mp3 -filter_complex "[0:a][1:a]concat=a=1:n=2:v=0" test.mp3

如果这个测试音频也没声音,那说明你的原音频文件可能有问题,需要先检查音频文件本身。

备注:内容来源于stack exchange,提问作者Aakash Chakravarthy

火山引擎 最新活动