Handbrake 对 MKV 5.1 音轨进行立体声下混会导致“中央”成为右声道,而左声道几乎为零

Handbrake 对 MKV 5.1 音轨进行立体声下混会导致“中央”成为右声道,而左声道几乎为零

因此,我已成功使用 Handbrake(版本 1.1.2)将许多大型 MKV 文件转换为较小的、与 iOS 和 macOS 兼容的视频文件,这样我就可以在我的 iPhone 和 MacBook Air 上播放一段时间而没有任何问题,直到这部特定的电影。

当我使用 Handbrake 转换时,默认的“常规”设置似乎适用于任何类型的设置——快速、非常快速、HQ 或超级 HQ——5.1 音频的音频下混会导致奇怪的立体声,基本上所有的音频都进入右声道,而左声道似乎有一些声道只是——找不到更好的词——背景残留。声音刚好够听见,但完全听不到音乐、对话或任何东西。

我可以在 MacBook Air 上的 VLC(版本 3.0.6)上播放它,但我的扬声器发出的声音同样奇怪;右侧声音很重,几乎没有任何声音。但如果我将 VLC 的音频设置为“耳机”……哇!它变成了正常的立体声混音。

发生了什么事?我该怎么做才能正确地进行缩混?我希望我可以在 Handbrake 中做到这一点,但如果不这样做,我想我必须从 MKV 中提取 AC3,在其他工具中缩混,然后再将其扔回 MKV?

此处的音轨详情使用ffmpeg -i

Stream #0:1(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 384 kb/s (default) (forced)
Metadata:
  title           : English
  BPS-eng         : 384000
  DURATION-eng    : 01:36:42.624000000
  NUMBER_OF_FRAMES-eng: 181332
  NUMBER_OF_BYTES-eng: 278525952

此处使用的音轨详情mkvmerge --identify为:

Track ID 0: video (MPEG-4p10/AVC/h.264)
Track ID 1: audio (AC-3)

此处使用的音轨详情mkvinfo为:

| + Track
|  + Track number: 2 (track ID for mkvmerge & mkvextract: 1)
|  + Track UID: 3241101187
|  + Track type: audio
|  + Forced track flag: 1
|  + Codec ID: A_AC3
|  + Default duration: 00:00:00.032000000 (31.250 frames/fields per second for a video track)
|  + Name: English
|  + Audio track
|   + Sampling frequency: 48000
|   + Channels: 6

此处使用的音轨详情exiftool为:

Track Number                    : 2
Track Type                      : Audio
Track Forced                    : Yes
Audio Codec ID                  : A_AC3
Default Duration                : 32 ms
Track Name                      : English
Audio Sample Rate               : 48000
Audio Channels                  : 6

答案1

一旦了解了频道映射,您就可以使用频道图过滤器,跳过中间文件。

ffmpeg -i my_movie.mkv -c:v copy -c:s copy -af "channelmap=0|2|1|3|4|5" -c:a ac3 out.mkv

答案2

“中心”频道实际上是“右”,反之亦然。

交换它们会生成适当平衡、听起来正常的 AC3 文件。

我发现了这个根据 Gyan 的评论,我决定只能通过从 AC3 中分离出单个单声道音轨、收听每个音轨,然后重建 AC3 来修复音频布局来解决这个问题。因此,这个发现和这个小混乱的解决方案。

话虽如此,我下面列出的所有步骤对我来说都有效,但如果有人知道用一个命令完成此操作的更简洁的方法,请随时发布答案。我会给你荣耀,因为这实际上是我做过的最复杂的 FFmpeg 和 MKV 操作,所以这是一个学习过程。

首先,我用来mkvmerge识别哪些是哪些曲目my_movie.mkv

mkvmerge --identify my_movie.mkv

知道我使用 FFmpeg 将 AC3 文件提取到名为的文件my_movie.ac3

ffmpeg -i my_movie.mkv -map 0:1 -c:a copy my_movie.ac3

然后我把my_movie.ac3它分成 6 个不同的单声道音轨:

ffmpeg -i my_movie.ac3 -map_channel 0.0.0 front_left.wav -map_channel 0.0.2 front_right.wav -map_channel 0.0.1 front_center.wav -map_channel 0.0.3 back_left.wav -map_channel 0.0.4 back_right.wav -map_channel 0.0.5 lfe.wav

然后我将这些单声道音轨重新组合成一个新的 AC3 文件,名为my_movie_fixed.ac3

ffmpeg -i front_left.wav -i front_right.wav -i front_center.wav -i lfe.wav -i back_left.wav -i back_right.wav -filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a]amerge=inputs=6[a]" -map "[a]" my_movie_fixed.ac3

然后我将新创建的添加到my_movie_fixed.ac3my_movie.mkv调用生成的文件my_movie_fixed.mkv

ffmpeg -i my_movie.mkv -i my_movie_fixed.ac3 -map 0 -map 1 -c copy my_movie_fixed.mkv

成功了!通过 VLC 中的普通“立体声”播放以及 my_movie_fixed.mkv通过 Handbrake 转换时,声音都很棒。

也就是说,我还调整了音轨的元数据细节,并将其设置为默认音轨,如下所示mkvpropedit

mkvpropedit my_movie_fixed.mkv --edit track:a2 --set name=English --set language=en

相关内容