LINUX.ORG.RU

6-ти канальный звук с камеры — как с ним быть? Нужно стерео/моно

 , downmix, ,


0

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                                 : 24s 0ms
Bit rate mode                            : Constant
Bit rate                                 : 448 Kbps
Channel count                            : 6 channels
Channel positions                        : Front: L C R, Side: L R, LFE
Sampling rate                            : 48.0 KHz
Bit depth                                : 16 bits
Compression mode                         : Lossy
Stream size                              : 1.28 MiB (0%)
Default                                  : Yes
Forced                                   : No
Первое с чем хочется разобраться — это как камера делает 6 каналов. Внешние микрофоны точно не применялись при записи. Внутренние... ХЗ сколько их может быть. Может многомембранны(й/е). Или разложение с изворотом каким-то из моно/стерео на шесть.

Запись — речь. 6 каналов — не нужно. Моно, максимум - стерео.

Но не ясно, что с чем даунмиксить. LFE в мусор, а дальше.. Тупо даунмикс? Тупо, не?


В мусор ничего нельзя. Для преобразования используется матрица коэффициентов. Инструмент должен сам подобрать матрицу. Возможно, за исключением Dolby*, т.к. это автоматически не определяется.

fopen ★★
()
Ответ на: комментарий от fopen

Для преобразования используется матрица коэффициентов. Инструмент должен сам подобрать матрицу.

Да, я уже доверился ffmpeg-у. Вот эта матрица, ниже. Стандартная.

0.414214 0.000000 0.292893 0.000000 0.292893 0.000000
0.000000 0.414214 0.292893 0.000000 0.000000 0.292893                                                                                        
[Parsed_aresample_0 @ 0x1cd1910] ch:6 chl:5.1(side) fmt:fltp r:48000Hz -> ch:2 chl:stereo fmt:s16 r:48000Hz
И непонятная.

L=0.414214 C=0.000000 R=0.292893 L_SUR=0.000000 C_SUR=0.292893 LFE=0.000000 Так что ли? Нет. Фигня. В левом канале правый... Кстати, коэффициенты - это гейн или подмешивание?

4 enum CustomChannelMapLocation{
   65     AC3_CHMAP_L=        1<<(15-0),
   66     AC3_CHMAP_C=        1<<(15-1),
   67     AC3_CHMAP_R=        1<<(15-2),
   68     AC3_CHMAP_L_SUR=    1<<(15-3),
   69     AC3_CHMAP_R_SUR =   1<<(15-4),
   70     AC3_CHMAP_C_SUR=    1<<(15-7),
   71     AC3_CHMAP_LFE =     1<<(15-15)
   72 };

//Отсюда

varchar
() автор топика
Ответ на: комментарий от varchar

Да. Фигня.

CustomChannelMapLocation - это раскладка на уровне кодека, а «[Parsed_aresample_0 @ 0x1cd1910]» - уровень фильтра.

channel_layout.c:
static const struct {
    const char *name;
    int         nb_channels;
    uint64_t     layout;
} channel_layout_map[] = {
...
    { "5.1(side)",   6,  AV_CH_LAYOUT_5POINT1 },
...

channel_layout.h:
#define AV_CH_LAYOUT_5POINT1           (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
#define AV_CH_LAYOUT_5POINT0           (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
#define AV_CH_LAYOUT_SURROUND          (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
#define AV_CH_LAYOUT_STEREO            (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)

#define AV_CH_FRONT_LEFT             0x00000001
#define AV_CH_FRONT_RIGHT            0x00000002
#define AV_CH_FRONT_CENTER           0x00000004
#define AV_CH_LOW_FREQUENCY          0x00000008
#define AV_CH_SIDE_LEFT              0x00000200
#define AV_CH_SIDE_RIGHT             0x00000400

Т. о. левый канал:

0.414214 * FRONT_LEFT + 0.292893 * FRONT_CENTER + 0.292893 * SIDE_LEFT
т. е. все слева и чуть с центра. Сумма коэффициентов по каналу == 1, что бы громкость не зашкалила.

PS. А LFE и точно в /dev/null ушел.

fopen ★★
()
Последнее исправление: fopen (всего исправлений: 1)
Ответ на: комментарий от fopen

Спасибо за объяснение и расклад!

Переделал в моно. В стерео — говорящий перемещается :) Матрица такая:

0.207107 0.207107 0.292893 0.000000 0.146447 0.146447
если ничего не путаю, то это: лево и право - поравну, центра поболе, низкие в топку, и по чуть сурраундов.

varchar
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.