web-dev-qa-db-ja.com

MKV内の音声をAC3またはDTS 6.1チャンネルを維持して変換します

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 、だれでもかまわない)があります。

  • PCM(S/PDIFで2チャンネルに制限)
  • DTS(5.1)
    • DTS-ES(6.1)
    • NEO6(6.1)
  • ドルビーデジタル(5.1)
    • DIGITAL-EX(6.1)
    • プロロジックII

これらの.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ファイルのオーディオをシステムでサポートされている形式に変換するにはどうすればよいですか?

4
LeoRochael

部分的な回答(テストされていません):

したがって、主な問題は、何らかの理由で光/同軸S/PDIF接続でスタックしていて、十分な帯域幅がないことです(実際には、言うまでもなく、それ以上の帯域幅もありません) 2つの非圧縮オーディオチャネル、5.1バリアントはすでに圧縮されています)。

[〜#〜] dts [〜#〜] または AC3の両方のコードを見て、ffmpegが6チャネルを超えるエンコードをサポートしていないことを確認できます。ffmpegがサポートしていない場合、Linux向けの既製のツールがサポートしていないと思います。

DTS-ESDolby 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)、最初の近似では、ffmpegpan フィルターを使用してバックチャネルに同じことを試み、これをac3としてエンコードし、結果が受け入れ可能かどうかを確認します。

これが機能すると仮定すると、長期的な解決策は、ALSA A52プラグインをハックして、この種のミキシングを内部でサポートすることです。これにより、真の6.1チャネルALSAデバイスが得られます。これを使用して、ソースマテリアルを再エンコードするというゆがみを経ることなく、任意のフォーマットで6.1ソースを再生できます。

別の完全に異なるアプローチ(そして、これを試して、リスニング比較を行い、品質の違いとサウンドアーティファクトの存在の可能性の両方について把握することをお勧めします)は、Multi Ch In 1フィールドをソニーと一緒に、良いアナログ7.1サウンドカード(持っている場合、または借りることができる場合)。これは真のチャンネル分離を提供しますが、もちろん今では、ソニーではなくサウンドカードのD/Aコンバーターを使用します。

1
dirkt

アンプはPCMをサポートしているので、それを使用してください。

ffmpeg -i Input.FLAC.6.1.mkv -c:s copy -c:v copy -c:a pcm_s16le  Output.PCM.6.1.mkv
1
Gyan