そのため、Handbrake(バージョン1.1.2)を使用して、多くの大きなMKVファイルをiOSおよびmacOS互換の小さなビデオファイルに変換することに成功しました。この特定の映画まで、問題なくiPhoneとMacBookAirでしばらく再生できます。
Fast、Very Fast、HQ、Super HQなど、一見あらゆるタイプのデフォルトの「一般」設定を使用してHandbrakeで変換すると、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
チャネルマッピングがわかったら、中間ファイルをスキップして、 channelmap フィルターを使用できます。
ffmpeg -i my_movie.mkv -c:v copy -c:s copy -af "channelmap=0|2|1|3|4|5" -c:a ac3 out.mkv
私はこれを発見しました Gyanのコメントに基づいて 、実際にAC3から個々のモノラルトラックを取り出し、それぞれを聞いてから、AC3を再構築してオーディオレイアウトを修正することによってのみ、これを修正できると判断しました。したがって、この発見とこの小さな混乱の解決策。
そうは言っても、以下に概説するすべての手順は私にとってはうまくいきましたが、誰かが1つのコマンドでこれを行うためのよりクリーンな方法を知っている場合は、回答として自由に投稿してください。これは文字通り私がこれまでに行った中で最も手の込んだ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
次に、これらのモノラルトラックをmy_movie_fixed.ac3
という新しい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