AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 412877
Accepted
LeoRochael
LeoRochael
Asked: 2017-12-25 18:46:28 +0800 CST2017-12-25 18:46:28 +0800 CST 2017-12-25 18:46:28 +0800 CST

将 MKV 内的音频转换为 AC3 或 DTS,保留 6.1 声道

  • 772

我有一些.mkv包含 FLAC 格式的 6.1 音频的文件。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

我还有一个“家庭影院”6.1 amp(Sony STR-DE895,如果有人关心的话),它通过以下格式的 S/PDIF(光纤和同轴电缆)连接本机接受数字音频:

  • PCM(在 S/PDIF 上限制为 2 个通道)
  • 数字电视 (5.1)
    • DTS-ES (6.1)
    • NEO6 (6.1)
  • 杜比数字 (5.1)
    • 数字-EX (6.1)
    • 专业逻辑二

我想让这些.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

并尝试强制 6.1-ac 7导致与上述相同的'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

那么,如何将.mkv文件中的音频转换为系统支持的格式,同时保留 6.1 声道格式?

audio ffmpeg
  • 2 2 个回答
  • 11246 Views

2 个回答

  • Voted
  1. Gyan
    2017-12-25T20:47:39+08:002017-12-25T20:47:39+08:00

    由于您的放大器支持 PCM,请使用它。

    ffmpeg -i Input.FLAC.6.1.mkv -c:s copy -c:v copy -c:a pcm_s16le  Output.PCM.6.1.mkv
    
    • 1
  2. Best Answer
    dirkt
    2017-12-29T00:18:09+08:002017-12-29T00:18:09+08:00

    部分答案(未经测试):

    因此,主要问题似乎是由于某种原因您被光纤/同轴电缆 S/PDIF 连接卡住了,它没有足够的带宽(实际上,正如您所说,它甚至没有足够的带宽超过两个未压缩的音频通道;5.1 版本已经压缩)。

    我可以通过查看DTS或AC3的代码来确认ffmpeg不支持对超过 6 个通道进行编码。如果不支持它,我的猜测是没有现成的 Linux 工具支持它。ffmpeg

    看看DTS-ES和Dolby Digital EX是如何工作的,可以看到它们都没有给你额外的独立通道,而是以某种方式将后中央通道混合(或“矩阵”)到其他通道上,并在数字数据流中为 6.1 模式设置一个特殊标志。然后编码器必须再次分离通道,这(因为信息丢失)并不总是可能的,并且可能导致声音伪影,具体取决于源材料。

    (可能的例外是“DTS-ES Discrete 6.1”,它声称除了矩阵编码之外还有一个真正的独立通道,但不清楚这个通道是如何编码的,以及它应该如何适应有限的 S/PDIF如果通过 S/PDIF 传输带宽,因此很可能分离仅存在于源材料中,并且无论如何都会在 S/PDIF 上丢失)。

    因此存在两个问题:如何在数据流中启用 6.1 标志,以及如何将额外的通道混合到现有通道上。幸运的是,您的 Sony STR-DE895 似乎有一个SB DEC [MATRIX]模式(手册第 32 页),它忽略标志并始终应用杜比数字 EX 解码器矩阵,而不管标志如何。这样就解决了第一个问题,而无需修改例如ffmpeg源代码。

    我找不到有关此矩阵系数的确切信息,但因为它“在实践中类似于杜比早期的 Pro-Logic 格式”,它只是在将中央声道降低 3 dB 后将其添加到左右两侧(因子0.5),在第一个近似值中,我会尝试使用ffmpeg 平移滤波器对后通道进行相同的处理,将其编码为ac3,并查看结果是否可以接受。

    假设这是可行的,一个长期的解决方案是破解 ALSA A52 插件以在内部支持这种混合,这样你就拥有了一个真正的 6.1 通道 ALSA 设备。然后,您可以使用它来播放任何格式的 6.1 源,而不必经历重新编码源材料的扭曲。

    另一种完全不同的方法(我建议尝试一下,并进行听力比较,以了解质量差异以及可能存在的声音伪影)是Multi Ch In 1在索尼上使用您的领域,以及不错的模拟7.1 声卡(如果你有,或者可以借一个)。这将提供真正的通道分离,但当然现在将使用声卡的 D/A 转换器,而不是索尼的。

    • 1

相关问题

  • ffmpeg:普通文件名的“找不到协议”

  • Kali 无法识别我的声卡

  • 如何在 Arch Linux 上设置音频,支持多个程序同时发出音频而不创建 asoundrc?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve