Разделить один поток 12-канального звука на отдельные моноканалы?

1

У меня есть 12-канальный отдельный аудиопоток QuickTime, который я пытаюсь разделить на отдельные 12 аудиопотоков в одном выходном файле. Из MediaInfo моя исходная аудио конфигурация выглядит следующим образом:

ID                                       : 2
Format                                   : PCM
Format settings, Endianness              : Little
Format settings, Sign                    : Signed
Codec ID                                 : lpcm
Duration                                 : 1mn 40s
Bit rate mode                            : Constant
Bit rate                                 : 12.8 Mbps
Channel(s)                               : 12 channels

Я сделал это успешно с 6 каналами, но не уверен, как это сделать с 12 каналами. Команде из 6 каналов нравится следующее:

ffmpeg -i "C:\FFMPEG\bin\SomeTestFile.mov" -filter_complex "channelsplit=channel_layout=5.1[0:2][0:3][0:4][0:5][0:6]" -map "[0:2]" -acodec pcm_s16le -ar 44.1k -ac 1 -map "[0:3]" -acodec pcm_s16le -ar 44.1k -ac 1 -map "[0:4]" -acodec pcm_s16le -ar 44.1k -ac 1 -map "[0:5]" -acodec pcm_s16le -ar 44.1k -ac 1 -map "[0:6]" -acodec pcm_s16le -ar 44.1k -ac 1 -threads 1 "Output.mov"

Но из списка параметров макета в ffmpeg это не представляется возможным, так как оно идет только до 8.1. Я попытался изменить "channel_layout = 11.1" и добавить дополнительные параметры отображения, но я получаю:

[Parsed_channelsplit_0 @ 0000000000338820] Error parsing channel layout '12.0'.
[AVFilterGraph @ 0000000000352420] Error initializing filter 'channelsplit' with args 'channel_layout=11.1'
Error configuring filters.

Я нашел команду в сообщении на форуме с этим:

ffmpeg -i "C:\FFMPEG\bin\SomeTestFile.mov" -acodec copy -filter_complex channelsplit -f mov "Output.mov"

но получите:

[auto-inserted resampler 0 @ 0000000002bf3d00] [SWR @ 0000000002bc82c0] Rematrix is needed between 12 channels and stereo but there is not enough
 information to do it
[auto-inserted resampler 0 @ 0000000002bf3d00] Failed to configure output pad on auto-inserted resampler 0

Я попробовал следующую команду:

ffmpeg -i "C:\FFMPEG\bin\input.mov" -map 0:2 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:3 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:4 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:5 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:6 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:7 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:8 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:9 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:10 -acodec pcm_s16le -ar 44.1k -ac 1 -map 0:11 -acodec pcm_s16le -ar 44.1k -ac 1 -threads 1 output.mov 

но получаю следующую ошибку вывода ..

ffmpeg version N-66639-g6b347f5 Copyright (c) 2000-2014 the FFmpeg developers
  built on Oct  5 2014 22:10:17 with gcc 4.9.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      54.  9.100 / 54.  9.100
  libavcodec     56.  2.101 / 56.  2.101
  libavformat    56.  7.104 / 56.  7.104
  libavdevice    56.  1.100 / 56.  1.100
  libavfilter     5.  1.102 /  5.  1.102
  libswscale      3.  1.100 /  3.  1.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  1.100 / 53.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\FFMPEG\bin\input.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2015-08-20 21:58:39
    Duration: 00:01:40.18, start: 0.000000, bitrate: 149980 kb/s
    Stream #0:0(eng): Video: prores (apch / 0x68637061), yuv422p10le, 1920x1080, 136073 kb/s, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 24k tbn, 24k tbc (default)
    Metadata:
      creation_time   : 2015-08-20 21:58:39
      handler_name    : Apple Alias Data Handler
      encoder         : Apple ProRes 422 (HQ)
      timecode        : 00:00:00:00
    Stream #0:1(eng): Audio: pcm_s24le (lpcm / 0x6D63706C), 48000 Hz, 12 channels, s32 (24 bit), 13824 kb/s (default)
    Metadata:
      creation_time   : 2015-08-20 21:58:39
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74) (default)
    Metadata:
      creation_time   : 2015-08-20 21:58:39
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
Stream map '0:3' matches no streams.

Обновить: После недолгой борьбы с этой проблемой и выяснения, что мне удалось разделить каналы, я заметил, что некоторые наборы программного обеспечения для видео и плееры распознают только один из каналов вместо всех 12 при воспроизведении по умолчанию. У меня был параметр «-map 0: a» после графика фильтра, и как только я удалил его, он заработал. Я обнаружил, правильная команда выглядит следующим образом:

C:\FFMPEG\bin\ffmpeg -i "C:\Test\TESTCLIP.mov" -filter_complex "[0:a]pan=mono|c0=c0[a0];[0:a]pan=mono|c0=c1[a1];[0:a]pan=mono|c0=c2[a2];[0:a]pan=mono|c0=c3[a3];[0:a]pan=mono|c0=c4[a4];[0:a]pan=mono|c0=c5[a5];[0:a]pan=mono|c0=c6[a6];[0:a]pan=mono|c0=c7[a7];[0:a]pan=mono|c0=c8[a8];[0:a]pan=mono|c0=c9[a9];[0:a]pan=mono|c0=c10[a10];[0:a]pan=mono|c0=c11[a11]" -map 0 -map "[a0]" -map "[a1]" -map "[a2]" -map "[a3]" -map "[a4]" -map "[a5]" -map "[a6]" -map "[a7]" -map "[a8]" -map "[a9]" -map "[a10]" -map "[a11]" -c copy -c:a pcm_s24le "C:\TEST\OUTPUT.mov"

Консольный вывод:

ffmpeg version N-66639-g6b347f5 Copyright (c) 2000-2014 the FFmpeg developers
  built on Oct  5 2014 22:10:17 with gcc 4.9.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      54.  9.100 / 54.  9.100
  libavcodec     56.  2.101 / 56.  2.101
  libavformat    56.  7.104 / 56.  7.104
  libavdevice    56.  1.100 / 56.  1.100
  libavfilter     5.  1.102 /  5.  1.102
  libswscale      3.  1.100 /  3.  1.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  1.100 / 53.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\Test\TESTCLIP.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2015-08-25 22:11:49
  Duration: 00:01:40.18, start: 0.000000, bitrate: 148100 kb/s
    Stream #0:0(eng): Video: prores (apch / 0x68637061), yuv422p10le, 1920x1080, 134192 kb/s, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 24k tbn, 24k tbc (default)
    Metadata:
      creation_time   : 2015-08-25 22:11:49
      handler_name    : Apple Alias Data Handler
      encoder         : Apple ProRes 422 (HQ)
      timecode        : 00:00:00:00
    Stream #0:1(eng): Audio: pcm_s24le (lpcm / 0x6D63706C), 48000 Hz, 12 channels, s32 (24 bit), 13824 kb/s (default)
    Metadata:
      creation_time   : 2015-08-25 22:11:49
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74) (default)
    Metadata:
      creation_time   : 2015-08-25 22:11:49
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
[Parsed_pan_0 @ 0000000005d32500] Pure channel mapping detected: 0
[Parsed_pan_1 @ 00000000003956c0] Pure channel mapping detected: 1
[Parsed_pan_2 @ 00000000003958a0] Pure channel mapping detected: 2
[Parsed_pan_3 @ 0000000000395a80] Pure channel mapping detected: 3
[Parsed_pan_4 @ 00000000003adf00] Pure channel mapping detected: 4
[Parsed_pan_5 @ 0000000000395d00] Pure channel mapping detected: 5
[Parsed_pan_6 @ 00000000003bfcc0] Pure channel mapping detected: 6
[Parsed_pan_7 @ 00000000003bfee0] Pure channel mapping detected: 7
[Parsed_pan_8 @ 00000000003bfd80] Pure channel mapping detected: 8
[Parsed_pan_9 @ 00000000051b2840] Pure channel mapping detected: 9
[Parsed_pan_10 @ 0000000000332680] Pure channel mapping detected: 10
[Parsed_pan_11 @ 0000000000332740] Pure channel mapping detected: 11
[mov @ 00000000051ca260] You requested a copy of the original timecode track so timecode metadata are now ignored
Output #0, mov, to 'C:\TEST\OUTPUTFILE.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    encoder         : Lavf56.7.104
    Stream #0:0(eng): Video: prores (apch / 0x68637061), yuv422p10le, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 134192 kb/s, 23.98 fps, 24k tbn, 24k tbc (default)
    Metadata:
      creation_time   : 2015-08-25 22:11:49
      handler_name    : Apple Alias Data Handler
      encoder         : Apple ProRes 422 (HQ)
      timecode        : 00:00:00:00
    Stream #0:1(eng): Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, 12 channels, s32 (24 bit), 13824 kb/s (default)
    Metadata:
      creation_time   : 2015-08-25 22:11:49
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:2(eng): Data: none (tmcd / 0x64636D74) (default)
    Metadata:
      creation_time   : 2015-08-25 22:11:49
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
    Stream #0:3: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:4: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:5: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:6: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:7: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:8: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:9: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:10: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:11: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:12: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:13: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
    Stream #0:14: Audio: pcm_s24le (in24 / 0x34326E69), 48000 Hz, mono, s32, 1152 kb/s
    Metadata:
      encoder         : Lavc56.2.101 pcm_s24le
Stream mapping:
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:1 (pcm_s24le) -> pan (graph 0)
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (pcm_s24le (native) -> pcm_s24le (native))
  Stream #0:2 -> #0:2 (copy)
  pan (graph 0) -> Stream #0:3 (pcm_s24le)
  pan (graph 0) -> Stream #0:4 (pcm_s24le)
  pan (graph 0) -> Stream #0:5 (pcm_s24le)
  pan (graph 0) -> Stream #0:6 (pcm_s24le)
  pan (graph 0) -> Stream #0:7 (pcm_s24le)
  pan (graph 0) -> Stream #0:8 (pcm_s24le)
  pan (graph 0) -> Stream #0:9 (pcm_s24le)
  pan (graph 0) -> Stream #0:10 (pcm_s24le)
  pan (graph 0) -> Stream #0:11 (pcm_s24le)
  pan (graph 0) -> Stream #0:12 (pcm_s24le)
  pan (graph 0) -> Stream #0:13 (pcm_s24le)
  pan (graph 0) -> Stream #0:14 (pcm_s24le)
Press [q] to stop, [?] for help
frame=  118 fps=0.0 q=-1.0 size=     854kB time=00:00:04.87 bitrate=1433.4kbits/s    
frame=  314 fps=313 q=-1.0 size=   70872kB time=00:00:13.05 bitrate=44472.7kbits/s    
frame=  412 fps=272 q=-1.0 size=  123393kB time=00:00:17.14 bitrate=58967.9kbits/s    
frame=  516 fps=256 q=-1.0 size=  172269kB time=00:00:21.47 bitrate=65700.3kbits/s    
frame=  617 fps=245 q=-1.0 size=  277313kB time=00:00:25.69 bitrate=88421.2kbits/s    
frame=  715 fps=237 q=-1.0 size=  376683kB time=00:00:29.77 bitrate=103620.3kbits/s    
frame=  859 fps=244 q=-1.0 size=  528409kB time=00:00:35.78 bitrate=120962.3kbits/s    
frame=  957 fps=238 q=-1.0 size=  633018kB time=00:00:39.87 bitrate=130054.3kbits/s    

Как вы можете видеть в Adobe Premiere. Я могу правильно воссоздать сопоставления. Слева - мой отрезок ffmpeg с 12 отдельными моноканалами, использующий фильтр панорамирования, а справа - 12-канальный сингл с одним потоком. Оба совпадают! Отдельное спасибо LordNeckBeard!

Adobe Premiere Audio Graph

Kevin
источник
Ты не необходимость использовать -filter_complex фильтровать / отображать потоки. Что произойдет, если вы попробуете это: ffmpeg -i infile.mov -map 0:1 1.wav -map 0:2 2.wav [etc...]? Обратите внимание, что я также не использую двойные кавычки или скобки для определения потоков. Проверьте страница справки для большего объяснения и примеров.
agtoever
У меня есть возможный ответ, но мне нужно увидеть полный вывод консоли с вашего ffmpeg Команда, чтобы убедиться, что это будет работать.
llogan

Ответы:

3

Что пошло не так

Вы пытаетесь отобразить потоки ввода, которые не существуют. Вот ваши входные потоки:

Stream #0:0 Video: prores
Stream #0:1 Audio: pcm_s24le
Stream #0:2 Data: tmcd

Ты говоришь ffmpeg на карту 0:0 - 0:11, но только 0:0, 0:1, а также 0:2 существовать.

Пример решения

Вы можете использовать фильтр панорамирования превратить один многоканальный поток в несколько потоков одного канала.

ffmpeg -i input.mov -filter_complex \
"[0:a]pan=mono|c0=c0[a0]; \
 [0:a]pan=mono|c0=c1[a1]; \
 [0:a]pan=mono|c0=c2[a2]; \
 [0:a]pan=mono|c0=c3[a3]; \
 [0:a]pan=mono|c0=c4[a4]; \
 [0:a]pan=mono|c0=c5[a5]; \
 [0:a]pan=mono|c0=c6[a6]; \
 [0:a]pan=mono|c0=c7[a7]; \
 [0:a]pan=mono|c0=c8[a8]; \
 [0:a]pan=mono|c0=c9[a9]; \
 [0:a]pan=mono|c0=c10[a10]; \
 [0:a]pan=mono|c0=c11[a11]" \
-map 0 -map -0:a -map "[a0]" -map "[a1]" -map "[a2]" -map "[a3]" \
-map "[a4]" -map "[a5]" -map "[a6]" -map "[a7]" \
-map "[a8]" -map "[a9]" -map "[a10]" -map "[a11]" \
-c copy -c:a pcm_s24le \
output.mov

Другой метод будет использовать -map а также -map_channel, но синтаксис более запутанный.

картографирование

В этом случае вы не можете положиться на значение по умолчанию выбор потока поведение, так что вы должны сказать ffmpeg какие потоки вы хотите с -map вариант , Различные -map варианты в примере могут показаться запутанными на первый взгляд:

  • -map 0 - Включают все входные потоки с первого (и единственного) входа на выход.

  • -map -0:a - Отрицательное отображение для пропуска всех входных аудиопотоков на выход. Это применяется после -map 0, Исходный аудиопоток исключен, поскольку вместо него будут использоваться аудиовыходы из фильтров.

    • Альтернативный метод может быть опущен -map 0 -map -0:a и использовать -map 0:v -map 0:d вместо этого, чтобы отобразить видео и потоки данных, но что если ваш ввод также содержит субтитры? Тогда вам нужно будет добавить -map 0:s, Вы можете видеть, как использование «включить все, кроме аудио» является более гибким, эффективным и ленивым.
  • -map "[a0]" ... -map "[a11]" - Включите аудиопотоки, которые выводятся из фильтров панорамирования.

Таким образом, после всех этих карт ваш вход будет содержать: видео поток, данные tmcd поток и 12 аудиопотоков.

Ваш ffmpeg Старый

Разработка очень активная. Скачать последнюю сборку ,

llogan
источник
Когда я использую фильтр панорамирования, большинство наборов видео распознают только один из аудиоканалов. Если я использую функцию канала карты, все 12 каналов распознаются. Есть ли способ сделать все аудио каналы распознанными?
Kevin
@Kevin Пожалуйста, покажите ваши команды и полные выводы консоли. Достаточно будет ссылок на сайты для размещения патинов. Что распознает только один из аудиоканалов?
llogan
Спасибо LordNeckBeard. Я обновил свой оригинальный пост с моей командой и выводом CCL в разделе «Обновление». Я также включил несколько скриншотов, чтобы проиллюстрировать, что я имел в виду, когда треки «не распознаются». По сути, я хочу, чтобы все 12 отдельных моно-треков воспроизводились при открытии файла в QuickTime. Если я использую фильтр панорамирования, будет воспроизведен только один из них.
Kevin
@Kevin Из какого программного обеспечения первый скриншот? У вас есть команды и консольный вывод, используя -map_channel?
llogan
LockNeckBeard, только что добавил мой «map_channel_ outout» в разделе «map channel». Скриншот, на котором вы видите визуализацию аудиоканалов, - «Adobe Premier». Другие с выпадающим списком - QuickTime Player 7 в Windows с помощью инспектора фильмов ,
Kevin
1

Я наконец получил это. По какой-то причине, когда я использую решение «filter_complex», предоставленное богом FFMPEG LordNeckBeard, оно правильно разделяет каналы, но проигрыватели и программное обеспечение для видео распознают только первую аудиодорожку. Это решение работает правильно. Каналы разделены, и звук распознается!

C:\FFMPEG\bin\ffmpeg -i "C:\Test\InputFile.mov" -map 0:0 -vcodec copy -c:a pcm_s24le -map 0:1 -filter:a:0 "pan=mono|c0=c0" -map 0:1 -filter:a:1 "pan=mono|c0=c1" -map 0:1 -filter:a:2 "pan=mono|c0=c2" -map 0:1 -filter:a:3 "pan=mono|c0=c3" -map 0:1 -filter:a:4 "pan=mono|c0=c4" -map 0:1 -filter:a:5 "pan=mono|c0=c5" -map 0:1 -filter:a:6 "pan=mono|c0=c6" -map 0:1 -filter:a:7 "pan=mono|c0=c7" -map 0:1 -filter:a:8 "pan=mono|c0=c8" -map 0:1 -filter:a:9 "pan=mono|c0=c9" -map 0:1 -filter:a:10 "pan=mono|c0=c10" -map 0:1 -filter:a:11 "pan=mono|c0=c10" "C:\Test\OutputFile.mov"

Надеюсь, что это поможет некоторым из вас в некоторых из ваших проблем!

Kevin
источник