使用多个音频流ffmpeg时不能使用-shortest参数

Posted

技术标签:

【中文标题】使用多个音频流ffmpeg时不能使用-shortest参数【英文标题】:Can't use -shortest parameter when using multiple audio streams ffmpeg 【发布时间】:2020-11-20 09:19:14 【问题描述】:

我想向已经包含声音的 mp4 视频文件添加第二个音频流。

第二个音频流比视频长一点,但我希望最终产品的长度相同。

我尝试使用 -shortest 功能,但我想添加的第二个音频流根本听不到。

我认为-shortest 只允许一个流,那么我该怎么做才能保持视频的长度相同并保持两个音频流?

这是我在问这个问题之前使用的完整命令:

ffmpeg -i input.mp4 -i input.m4a -map 0:v -map 0:a -shortest output.mp4

ffmpeg -i output.mp4 的输出:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
  Duration: 00:00:32.08, start: 0.000000, bitrate: 1248 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 480x600 [SAR 1:1 DAR 4:5], 1113 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

【问题讨论】:

您如何检查第二个流?粘贴ffmpeg -i output.mp4的读数 @Gyan 我已经更新了 【参考方案1】:

您还必须从第二个输入映射音频。

ffmpeg -i input.mp4 -i input.m4a -map 0:v -map 0:a -map 1:a -shortest -fflags +shortest -max_interleave_delta 100M output.mp4

请参阅https://***.com/a/55804507/,了解如何使shortest 生效。

【讨论】:

感谢您的帮助。现在正在显示第二个音频流,但仍然听不见。有任何想法吗? pastebin.com/iNgQXvbj 你在哪个播放器上测试过?您是否切换了音频选择? 我在 VLC 中测试过。抱歉,我的问题有点不清楚 - 最终结果是,我希望两个流同时播放。我只是合并音频流来实现这一点。感谢您的帮助!

以上是关于使用多个音频流ffmpeg时不能使用-shortest参数的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 ffmpeg 从视频中提取音频时,出现错误

使用 FFMPEG 将可搜索的 AAC 音频流写入 MP4 文件

FFMpeg SDK使用5调用FFmpeg SDK解析封装格式的视频为音频流和视频流

使用 ffmpeg 和 python 将视频中的所有音频流提取到单独的音频文件中

使用 ffmpeg 从 RTSP 流录制视频和音频数据

关于ffmpeg推流,如何推流一个文件夹里的所有视频或者多个视频?