FLAC形式の6.1オーディオを含む.mkv
ファイルがいくつかあります。 mediainfo
は、これらのファイルのオーディオトラックを次のように報告します。
Audio
ID : 2
Format : FLAC
Format/Info : Free Lossless Audio Codec
Codec ID : A_FLAC
Duration : 2mn 29s
Bit rate mode : Variable
Channel(s) : 7 channels
Channel positions : Front: L C R, Side: L R, Back: C, LFE
Sampling rate : 48.0 KHz
Bit depth : 24 bits
Delay relative to video : 14ms
Writing library : libFLAC 1.3.0 (UTC 2013-05-26)
Language : English
Default : Yes
Forced : No
また、次のフォーマットのS/PDIF(光学および同軸)接続を介してデジタルオーディオをネイティブに受け入れる「ホームシアター」6.1アンプ(Sony STR-DE895 、だれでもかまわない)があります。
これらの.mkv
ファイルでアンプからすべての6.1スピーカーを駆動したいのですが、.mkv
ファイルを次のようなコマンドで変換すると、
ffmpeg -i Input.FLAC.6.1.mkv -c:s copy -c:v copy -c:a ac3 Output.AC3.6.1.mkv
その後、5.1オーディオが出力されます。つまり、センターバックチャネルが失われます。 mediainfo
あたり:
Audio
ID : 2
Format : AC-3
Format/Info : Audio Coding 3
Mode extension : CM (complete main)
Format settings, Endianness : Big
Codec ID : A_AC3
Duration : 2mn 29s
Bit rate mode : Constant
Bit rate : 448 Kbps
Channel(s) : 6 channels
Channel positions : Front: L C R, Side: L R, LFE
Sampling rate : 48.0 KHz
Bit depth : 16 bits
Compression mode : Lossy
Delay relative to video : 9ms
Stream size : 8.00 MiB (9%)
Writing library : Lavc57.107.100 ac3
Language : English
Default : Yes
Forced : No
DURATION : 00:02:29.768000000
NUMBER_OF_FRAMES : 1755
NUMBER_OF_BYTES : 56974307
_STATISTICS_WRITING_APP : mkvmerge v8.2.0 ('World of Adventure') 64bit
_STATISTICS_WRITING_DATE_UTC : 2015-08-01 13:29:10
_STATISTICS_TAGS : BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
それがどのように変わったかに注意してください:
Channel(s) : 7 channels
Channel positions : Front: L C R, Side: L R, Back: C, LFE
に:
Channel(s) : 6 channels
Channel positions : Front: L C R, Side: L R, LFE
-ac 7
でチャネル数を強制しようとすると、次のようになります。
[ac3 @ 0x43f2a40] Specified channel layout '6.1' is not supported
DTS
に変換しようとすると、まったく同じ結果になります。つまり交換:
-c:a ac3
と:
-strict experimental -c:a dts
次のmediainfo
の結果:
Audio
ID : 2
Format : DTS
Format/Info : Digital Theater Systems
Mode : 16
Format settings, Endianness : Big
Codec ID : A_DTS
Duration : 2mn 29s
Bit rate mode : Constant
Bit rate : 1 413 Kbps
Channel(s) : 6 channels
Channel positions : Front: L C R, Side: L R, LFE
Sampling rate : 48.0 KHz
Bit depth : 16 bits
Compression mode : Lossy
Delay relative to video : 14ms
Stream size : 25.2 MiB (23%)
Writing library : Lavc57.107.100 dca
Language : English
Default : Yes
Forced : No
DURATION : 00:02:29.774000000
NUMBER_OF_FRAMES : 1755
NUMBER_OF_BYTES : 56974307
_STATISTICS_WRITING_APP : mkvmerge v8.2.0 ('World of Adventure') 64bit
_STATISTICS_WRITING_DATE_UTC : 2015-08-01 13:29:10
_STATISTICS_TAGS : BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
また、-ac 7
で6.1を強制しようとすると、上記と同じ'6.1' is not supported
エラーが発生します。
価値があるのは、 上記のテストで使用されたffmpeg
は次のとおりでした。
$ ffmpeg -version
ffmpeg version 3.4.1-static https://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 6.4.0 (Debian 6.4.0-10) 20171112
configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
では、6.1チャネル形式を維持しながら、.mkv
ファイルのオーディオをシステムでサポートされている形式に変換するにはどうすればよいですか?
部分的な回答(テストされていません):
したがって、主な問題は、何らかの理由で光/同軸S/PDIF接続でスタックしていて、十分な帯域幅がないことです(実際には、言うまでもなく、それ以上の帯域幅もありません) 2つの非圧縮オーディオチャネル、5.1バリアントはすでに圧縮されています)。
[〜#〜] dts [〜#〜] または AC3の両方のコードを見て、ffmpeg
が6チャネルを超えるエンコードをサポートしていないことを確認できます。 。 ffmpeg
がサポートしていない場合、Linux向けの既製のツールがサポートしていないと思います。
DTS-ES と Dolby Digital EX がどのように機能するかを見ると、これらすべてが追加の独立したチャネルを提供するのではなく、ミックスする(または "マトリックス」)バックセンターチャネルを他のチャネルに何らかの方法で追加し、デジタルデータストリームで6.1モードの特別なフラグを設定します。次に、エンコーダーはチャネルを再度分離する必要があります。これは(情報が失われるため)常に可能であるとは限らず、ソースマテリアルによっては、サウンドのアーティファクトにつながる可能性があります。
(可能な例外は「DTS-ESディスクリート6.1」で、これはマトリックスエンコーディングに加えて実際の個別チャネルが追加されていると主張していますが、明確ではありませんこのチャネルがどのようにエンコードされているか、およびS/PDIF経由で転送された場合に制限されたS/PDIF帯域幅に適合するはずなので、分離はソースマテリアルにのみ存在し、いずれにしてもS/PDIFで失われる可能性が高いです) 。
したがって、2つの問題があります。データストリームで6.1フラグを有効にする方法と、追加のチャネルを既存のチャネルに混在させる方法です。さいわい、Sony STR-DE895にはSB DEC [MATRIX]
モード( manual 32ページ)があるようです。これはフラグを無視し、フラグに関係なく常にDolby Digital EXデコーダーマトリックスを適用します。したがって、それは変更する必要なく最初の問題を解決します。 ffmpeg
ソースコード。
この行列の係数に関する正確な情報を見つけることができませんでしたが、「ドルビーの以前のプロロジック形式と実際には似ています」、3 dB減少させた後、左右両方にセンターチャネルを追加するだけです(係数0.5)、最初の近似では、ffmpeg
pan フィルターを使用してバックチャネルに同じことを試み、これをac3
としてエンコードし、結果が受け入れ可能かどうかを確認します。
これが機能すると仮定すると、長期的な解決策は、ALSA A52プラグインをハックして、この種のミキシングを内部でサポートすることです。これにより、真の6.1チャネルALSAデバイスが得られます。これを使用して、ソースマテリアルを再エンコードするというゆがみを経ることなく、任意のフォーマットで6.1ソースを再生できます。
別の完全に異なるアプローチ(そして、これを試して、リスニング比較を行い、品質の違いとサウンドアーティファクトの存在の可能性の両方について把握することをお勧めします)は、Multi Ch In 1
フィールドをソニーと一緒に、良いアナログ7.1サウンドカード(持っている場合、または借りることができる場合)。これは真のチャンネル分離を提供しますが、もちろん今では、ソニーではなくサウンドカードのD/Aコンバーターを使用します。
アンプはPCMをサポートしているので、それを使用してください。
ffmpeg -i Input.FLAC.6.1.mkv -c:s copy -c:v copy -c:a pcm_s16le Output.PCM.6.1.mkv