![Handbrake 对 MKV 5.1 音轨进行立体声下混会导致“中央”成为右声道,而左声道几乎为零](https://linux22.com/image/1580264/Handbrake%20%E5%AF%B9%20MKV%205.1%20%E9%9F%B3%E8%BD%A8%E8%BF%9B%E8%A1%8C%E7%AB%8B%E4%BD%93%E5%A3%B0%E4%B8%8B%E6%B7%B7%E4%BC%9A%E5%AF%BC%E8%87%B4%E2%80%9C%E4%B8%AD%E5%A4%AE%E2%80%9D%E6%88%90%E4%B8%BA%E5%8F%B3%E5%A3%B0%E9%81%93%EF%BC%8C%E8%80%8C%E5%B7%A6%E5%A3%B0%E9%81%93%E5%87%A0%E4%B9%8E%E4%B8%BA%E9%9B%B6.png)
因此,我已成功使用 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.ac3
并my_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