ffmpeg объединяет несколько (N) монофонических аудиоканалов видео MXF с несколькими (M) стереоканалами видео MP4 - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть файл MXF с 16 аудио монопотоками, и мне нужно перекодировать его в файл mp4 с 2 <= n <= 16 каналами, объединяющими входные потоки, например, входные каналы 1 и 2 на выходных каналах 1 и 9 и 10 на выходном канале 2. Эта работа будет выполнена с помощью ffmpeg. Я прочитал документацию и нашел фильтры amerge и amix, которые были бы хороши, но они выводят только один канал. Есть ли какое-нибудь решение для этой проблемы? </p>

Спасибо, Лора

Найдите ниже вывод ffprobe для файла mxf:

{"streams": [{"" index ": 0," codec_name ":" mpeg2video "," codec_long_name ":" MPEG-2 video "," profile ":" 4: 2: 2 "," codec_type ":" video "," codec_time_base ":" 1 / 25 "," codec_tag_string ":" [0] [0] [0] [0] "," codec_tag ":" 0x0000 "," width ": 1920," height ": 1080," coded_width ": 0," coded_height ": 0," has_b_frames ": 1," sample_aspect_ratio ":" 1: 1 "," display_aspect_ratio ":" 16: 9 "," pix_fmt ":" yuv422p "," level ": 2," color_range ":" tv "," color_space ":" bt709 "," color_transfer ":" bt709 "," color_primaries ":" bt709 "," chroma_location ":" topleft "," field_order ":" tt "," refs ": 1," r_frame_rate ":" 25/1 "," avg_frame_rate ":" 25/1 "," time_base ":" 1/25 "," start_pts ": 0," start_time ":" 0.000000 "," duration_ts ": 448," длительность ":" 17.920000 "," bit_rate ":" 50000000 "," disposition ": {" default ": 0," dub ": 0," original ": 0," comment ": 0," lyrics ": 0, "караоке": 0, "принудительный": 0, "слух_импирация": 0, "визуализация_импарат" : 0, "clean_effects": 0, "attach_pi c": 0, "timed_thumbnails": 0}, "tags": {"file_package_umid": "0x060A2B340101010501010D2313000000968F75C6B5B34D649967EEDD0076" index_1010 "код индекса" 99898 " : "pcm_s24le", "codec_long_name": "PCM со знаком 24-bit little-endian", "codec_type": "audio", "codec_time_base": "1/48000", "codec_tag_string": "[0] [0] [ 0] [0] "," codec_tag ":" 0x0000 "," sample_fmt ":" s32 "," sample_rate ":" 48000 "," channel ": 1," bits_per_sample ": 24," r_frame_rate ":" 0 / 0 "," avg_frame_rate ":" 0/0 "," time_base ":" 1/48000 "," start_pts ": 0," start_time ":" 0.000000 "," duration_ts ": 860160," duration ":" 17.920000 " , "bit_rate": "1152000", "bits_per_raw_sample": "24", "disposition": {"default": 0, "dub": 0, "original": 0, "comment": 0, "lyrics": 0, "караоке": 0, "принудительный": 0, "слух_импирация": 0, "визуальный_импарат": 0, "чистые_эффекты": 0, "прикрепленный_pi c": 0, "timed_thumbnails": 0}, теги " ": {" file_package_umid ":" 0x060A2B340101010501010D2313000000968F75C6B5B34D649967EEDD0076B989 "}}, {" index ": 2," codec_name ":" pc m_s24le "," codec_long_name ":" PCM подписан 24-битным прямым порядком байтов "," codec_type ":" audio "," codec_time_base ":" 1/48000 "," codec_tag_string ":" [0] [0] [0] [0] "," codec_tag ":" 0x0000 "," sample_fmt ":" s32 "," sample_rate ":" 48000 "," channel ": 1," bits_per_sample ": 24," r_frame_rate ":" 0/0 " , "avg_frame_rate": "0/0", "time_base": "1/48000", "start_pts": 0, "start_time": "0.000000", «duration_ts»: 860160, «duration»: «17.920000», «bit_rate»: «1152000», «bits_per_raw_sample»: «24», «disposition»: {«default»: 0, «dub»: 0, «original» : 0, "комментарий": 0, "текст песни": 0, "караоке": 0, "принудительный": 0, "слух_импирация": 0, "визуальный_импарат": 0, "чистые_эффекты": 0, "прикрепленный_pi c ": 0," timed_thumbnails ": 0}," tags ": {" file_package_umid ":" 0x060A2B340101010501010D2313000000968F75C6B5B34D649967EEDD0076B989 "}}, {" index ": 3, code__names:" 24c_name ":" pc code__names ":" ps "code__names:" bit little-endian "," codec_type ":" audio "," codec_time_base ":" 1/48000 "," codec_tag_string ":" [0] [0] [0] [0] "," codec_tag ":" 0x0000 " , "sample_fmt": "s32", "sample_rate": "48000", "channel": 1, "bits_per_sample": 24, "r_frame_rate": "0/0", "avg_frame_rate": "0/0", " time_base ":" 1/48000 "," start_pts ": 0," start_time ":" 0.000000 "," duration_ts ": 860160," duration ":" 17.920000 "," bit_rate ":" 1152000 "," bits_per_raw_sample ":" 24 "," disposition ": {" default ": 0," dub ": 0," original ": 0," comment ": 0," lyrics ": 0," karaoke ": 0," принудительно ": 0, «АЭМ ring_impaired ": 0," visual_impaired ": 0," clean_effects ": 0, "ched_pi c": 0, "timed_thumbnails": 0}, "теги": {"file_package_umid": "0x060A2B340101010501010D2313000000967} 0 600B6 6 0 300 6 6 0 6 6 6 600 6 6 6 0 6 6 0 6 6 0 6 6 6 0 6 6 6 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8 index ": 4," codec_name ":" pcm_s24le "," codec_long_name ":" PCM со знаком 24-bit little-endian "," codec_type ":" audio "," codec_time_base ":" 1/48000 "," codec_tag_string ": "[0] [0] [0] [0]", "codec_tag": "0x0000", "sample_fmt": "s32", "sample_rate": "48000", "channel": 1, "bits_per_sample": 24 , "r_frame_rate": "0/0", "avg_frame_rate": "0/0", "time_base": "1/48000", "start_pts": 0, "start_time": "0.000000", "duration_ts": 860160 , "duration": "17.920000", "bit_rate": "1152000", "bits_per_raw_sample": "24", "disposition": {"default": 0, "dub": 0, "original": 0, "comment ": 0," текст песни ": 0," караоке ": 0," принудительный ": 0," слух_импирация ": 0," визуальный_импарат ": 0," чистые эффекты ": 0," прикрепленный_пи c ": 0," timed_thumbnails ": 0}," tags ": {" file_package_umid ":" 0x060A2B340101010501010D2313000000968F75C6B5B34D649967EEDD0076B989 " }}, {"index": 5, "codec_name": "pcm_s24le", "codec_long_name": "PCM со знаком 24-bit little-endian", "codec_type": "audio", "codec_time_base": "1/48000" , "codec_tag_string": "[0] [0] [0] [0]", "codec_tag": "0x0000", "sample_fmt": "s32", "sample_rate": "48000", "channel": 1, "bits_per_sample": 24, "r_frame_rate": "0/0", "avg_frame_rate": "0/0", "time_base": "1/48000", "start_pts": 0, "start_time": "0.000000", «duration_ts»: 860160, «duration»: «17.920000», «bit_rate»: «1152000», «bits_per_raw_sample»: «24», «disposition»: {«default»: 0, «dub»: 0, "оригинал": 0, "комментарий": 0, "текст песни": 0, "караоке": 0, "принудительный": 0, "слух_импирация": 0, "визуальный_импеданс": 0, "чистые эффекты": 0, "прикрепленный_pi" c ": 0,« timed_thumbnails »: 0},« tags »: {« file_package_umid »:« 0x060A2B340101010501010D2313000000968F75C6B5B34D649967EEDD0076B989 "}}, {« index »: 6,« псевдоним »: код« псевдонима »: код псевдонима: код« псевдонима »: код псевдонима псевдонима: код«: » 24-разрядный со знаком с прямым порядком байтов "," codec_type ":" audio "," codec_time_base ":" 1/48000 "," codec_tag_string ":" [0] [0] [0] [0] "," codec_tag ": "0x0000", "sample_fmt": "s32", "sample_rate": "48000", "channel": 1, "bits_per_sample": 24, "r_frame_rate": "0/0", "avg_frame_rate": "0/0 "," time_base ":" 1/48000 "," start_pts ": 0," start_time ":" 0.000000 "," duration_ts ": 860160," duration ":" 17.920000 "," bit_rate ":" 1152000 "," bits_per_raw_sample ":" 24 "," disposition ": {" default ": 0," dub ": 0," original ": 0," comment ": 0," lyrics ": 0," караоке ": 0," принудительный " : 0, "слух_император": 0, "визуал_император": 0, "эффект_чистки": 0, "attach_pi c": 0, "интервал_данных": 0}, "теги": {"file_package_umid": "0x060A2B340101010501010D2313000000968F75C6B5B34D649967EEDD0076B989"}}, {"index": 7, "codec_name": "pcm_s24le", "codec_long_name": "PCM подписанный 24-битный little-endian_aseb", «code»: «code»: «код»: «код / 48000 "," codec_tag_string ":" [0] [0] [0] [0] "," codec_tag ":" 0x0000 "," sample_fmt ":" s32 "," sample_rate ":" 48000 "," channel " : 1, "bits_per_sample": 24, "r_frame_rate": "0/0", "avg_frame_rate": "0/0", "time_base": "1/48000", "start_pts": 0, "start_time": " 0.000000 "," duration_ts ": 860160," duration ":" 17.920000 "," bit_rate ":" 1152000 "," bits_per_raw_sample ":" 24 "," disposition ": {" default ": 0," dub ": 0, "оригинал": 0, "комментарий": 0, "текст песни": 0, "караоке": 0, "принудительный": 0, "слух_импирация": 0, "визуальный_импеданс": 0, "чистые эффекты": 0, "прикрепленный_pi" c ": 0," timed_thumbnails ": 0}," tags ": {" file_package_umid ":" 0x060A2B340101010501010D2313000000968F75C6B5B34D649967EEDD0076B989 "}}, {" index ": 8, код" псевдонима ": псевдонимы: код_компьютера": " 24-разрядный со знаком с прямым порядком байтов "," codec_type ":" audio "," codec_time_ba " se ":" 1/48000 "," codec_tag_string ":" [0] [0] [0] [0] "," codec_tag ":" 0x0000 "," sample_fmt ":" s32 "," sample_rate ":" 48000 "," channel ": 1," bits_per_sample ": 24," r_frame_rate ":" 0/0 "," avg_frame_rate ":" 0/0 "," time_base ":" 1/48000 "," start_pts ": 0, "start_time": "0.000000", "duration_ts": 860160, "duration": "17.920000", "bit_rate": "1152000", "bits_per_raw_sample": "24", "disposition": {"default": 0, " дубляж ": 0," оригинал ": 0," комментарий ": 0," текст песни ": 0," караоке ": 0," принудительный ": 0," слух_импирация ": 0," визуализация-импорт ": 0, «clean_effects»: 0, «attach_pi c»: 0, «timed_thumbnails»: 0}, «tags»: {«file_package_umid»: «0x060A2B340101010501010D2313000000968F75C6B5B34D649967EEDD0076B]« format: media}: мультимедиа: формат файла: media}: media}: мультимедиа -caches / video -sence / VIDEO / MXF-XDCAM_HD422@50Mbps1080i25_16Ch / 941.mxf "," nb_streams ": 9," nb_programs ": 0," format_name ":" mxf "," format_long_name ":" MXF (формат обмена материалами) " , "start_time": "0.000000", "duration": "17.920000", "size": "135028296", "bit_rate": "60280489", "probe_score": 100, "tags": {"uid": "0a9ef41a -36b4-4066-a8a3-b95f62299b6 c "," generation_uid ":" e134647e-fea1-4673-91c1-afa277d13c00 "," company_name ":" Sony "," product_name ":" MP C "," product_version ":" v1.0 "," application_platform ":" Sony MXF Development Kit (Win32) "," product_uid ":" 060e2b34-0401-0103-0e06-0120027f0200 ", "ification_date": "2012-09-17T11: 56 : 20.000000Z "," material_package_umid ":" 0x060A2B340101010501010D231300000081C32F48A63347D4890F55D3ADC25B99 "," тайм-код ":" 00: 35: 30: 08 "}}}

1 Ответ

0 голосов
/ 14 февраля 2020

Код организован с переносами строк. \ разрывает строку в Unix оболочке.

ffmpeg -i "in.mxf" \
-filter_complex "\
[a:0][a:1]amerge=inputs=2[ch1ch2];\
[a:8][a:9]amerge=inputs=2[ch9ch10]" \
-map 'v:0' \
-map '[ch1ch2]' \
-map '[ch9ch10]' \
-c:v copy \
-c:a aac -b:a 128k -ar 48000 -ac 2 \
"out.mp4"
  1. input
  2. filter_complex (используйте " вместо '. Если я использовать разрывы строк оболочки \ Я получаю сообщение об ошибке с одинарными кавычками ')
  3. использовать amerge фильтр и выбрать
    • 1-й аудиопоток a:0 и
    • 2-й аудиопоток a:1,
    • объединить их и
    • сохранить его на панели вывода ch1ch2 (вы можете дать ему любое имя)
  4. используйте другой amerge фильтр и выберите
    • 9-й аудиопоток a:8 и
    • 10-й аудиопоток a:9,
    • объединить их и
    • сохраните его на панели вывода ch9ch10
  5. карта видеопотока (если вы пропустите это, у вашего выхода нет видео)
  6. map pad ch1ch2 для 1-го аудиопотока
  7. map pad ch9ch10 для 2-го аудиопотока
  8. копирование видеопотока (если вы пропустите это, ваше видео будет быть перекодирован)
  9. кодировать все аудиопотоки с помощью c

Здесь выход имеет только 2 сопоставленных аудиоканала.

Если вы хотите сохранить некоторые из оставшихся каналов, вы должны отобразить их. Вы даже можете добавить -map 0 сразу после строки 7, чтобы сложить все потоки под вашими объединенными. (Но, конечно, вы получите 2 + 16 аудиопотоков.)

Вы можете добавить больше amerge фильтров. Разделите их с помощью ;. Вы также можете объединить 3 аудиопотока с помощью [a:0][a:1][a:2]amerge=inputs=3[ch1ch2ch3]. Назовите аудиоканалы с помощью

-metadata:s:a:0 title="channel 1 and 2"

Это полезно для тестирования, потому что вы можете видеть названия в VL C.

...