2016-12-19 5 views
0

Привет, моя проблема. У меня есть 2 .w64-файла (расширенный формат wav). Каждый файл имеет 16 моноканалов аудио. Я хочу иметь возможность извлекать определенные каналы звука из каждого из этих .w64-файлов и вставлять эти каналы в файл .mxf в виде отдельных одноканальных монопотоковых потоков и дополнительно настраивать информацию тегов на эти аудиопотоки. Я пробовал использовать -map и т. Д., Но он, кажется, берет все каналы из .w64-файлов и вставляет один аудиопоток из 16 каналов. Я заранее извиняюсь за то, что я очень новичок в ffmpeg и заранее заблаговременно за любой совет, который вы можете предложить. Это все зависит от использования командной строки в окнах. Все лучшееFFMpeg Как извлечь отдельные аудиоканалы из wav/.w64 и вставить в .mxf с тегами дорожки

FFmpeg -i "D: \ Media \ AUDIO_0.W64" -i "D: \ СМИ \ NO_AUDIO.mxf" -с скопировать -Map 0: 0: 0 -map 0: 0 : 1 -map 0: 0: 2 -acodec pcm_s24le -map 1: 0 "D: \ СМИ \ out.mxf"

ffmpeg version N-67838-g4388e78 Copyright (c) 2000-2014 the FFmpeg developers 
    built on Nov 19 2014 22:02:08 with gcc 4.9.2 (GCC) 
    configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av 
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab 
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca -- 
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-lib 
modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrw 
b --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge 
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --en 
able-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. 14.100/54. 14.100 
    libavcodec  56. 12.101/56. 12.101 
    libavformat 56. 14.100/56. 14.100 
    libavdevice 56. 3.100/56. 3.100 
    libavfilter  5. 2.103/5. 2.103 
    libswscale  3. 1.101/3. 1.101 
    libswresample 1. 1.100/1. 1.100 
    libpostproc 53. 3.100/53. 3.100 
[w64 @ 0481c580] Estimating duration from bitrate, this may be inaccurate 
Input #0, w64, from 'D:\Media\AUDIO_0.W64': 
    Duration: 00:01:02.56, bitrate: 18432 kb/s 
    Stream #0:0: Audio: pcm_s24le ([1][0][0][0]/0x0001), 48000 Hz, 16 channels 
, s32 (24 bit), 18432 kb/s 
[mxf @ 048890e0] index entry 1564 + TemporalOffset 1 = 1565, which is out of bou 
nds 
Input #1, mxf, from 'D:\media\NO_AUDIO.mxf': 
    Metadata: 
    uid    : adab4424-2f25-4dc7-92ff-29bd000c0000 
    generation_uid : adab4424-2f25-4dc7-92ff-29bd000c0001 
    company_name : FFmpeg 
    product_name : OP1a Muxer 
    product_version : 57.56.100 
    product_uid  : adab4424-2f25-4dc7-92ff-29bd000c0002 
    modification_date: 0000-01-01 00:00:00 
    timecode  : 00:00:00:00 
    Duration: 00:01:02.60, start: 0.000000, bitrate: 2404 kb/s 
    Stream #1:0: Video: mpeg2video (4:2:2), yuv422p(tv), 1920x1080 [SAR 1:1 DAR16:9], max. 50000 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc 
File 'D:\media\out.mxf' already exists. Overwrite ? [y/N] y 

[mxf @ 04891c60] there must be exactly one video stream and it must be the first 
one 
Output #0, mxf, to 'D:\media\out.mxf': 
    Metadata: 
    encoder   : Lavf56.14.100 
    Stream #0:0: Audio: pcm_s24le, 48000 Hz, 16 channels, s32 (24 bit), 18432 kb/s 
    Metadata: 
     encoder   : Lavc56.12.101 pcm_s24le 
    Stream #0:1: Audio: pcm_s24le, 48000 Hz, 16 channels, s32 (24 bit), 18432 kb/s 
    Metadata: 
     encoder   : Lavc56.12.101 pcm_s24le 
    Stream #0:2: Audio: pcm_s24le, 48000 Hz, 16 channels, s32 (24 bit), 18432 kb/s 
    Metadata: 
     encoder   : Lavc56.12.101 pcm_s24le 
    Stream #0:3: Video: mpeg2video, yuv422p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, max. 50000 kb/s, 25 fps, 25 tbn, 25 tbc 
Stream mapping: 
    Stream #0:0 -> #0:0 (pcm_s24le (native) -> pcm_s24le (native)) 
    Stream #0:0 -> #0:1 (pcm_s24le (native) -> pcm_s24le (native)) 
    Stream #0:0 -> #0:2 (pcm_s24le (native) -> pcm_s24le (native)) 
    Stream #1:0 -> #0:3 (copy) 

Could not write header for output file #0 (incorrect codec parameters ?): Error 
number -1 occurred 
+0

Покажите команду, которую вы выполнили, и ее полный вывод консоли. – Mulvya

+0

Ваш 'ffmpeg' старый. Вы должны обновить. См. Страницу [download] (http://ffmpeg.org/download.html) для ссылок на сборки. – LordNeckbeard

ответ

1

Вашего отображение перепуталось

состояния сообщений об ошибке, «должен быть ровно один видеопоток, и он должен быть первым». MXF является придирчивым, поэтому вам нужно сначала отобразить видео, потому что порядок отображения определит порядок потока на выходе.

Во-вторых, вы пытаетесь использовать -map для выбора аудиоканала, но это не работает так: вам нужно добавить -map_channel или фильтр панорамирования звука.

-map_channel

ffmpeg -i "D:\Media\AUDIO_0.W64" -i "D:\media\NO_AUDIO.mxf" -map 1:v -map 0:a -map 0:a -map 0:a -map_channel 0.0.0:0.1 -map_channel 0.0.1:0.2 -map_channel 0.0.2:0.3 -c:v copy -c:a pcm_s24le -shortest "D:\media\out.mxf" 

пан фильтр

Или вы можете использовать pan audio filter вместо -map_channel:

ffmpeg -i "D:\Media\AUDIO_0.W64" -i "D:\media\NO_AUDIO.mxf" -filter_complex "[0:a]pan=mono|c0=c0[a0];[0:a]pan=mono|c0=c1[a1];[0:a]pan=mono|c0=c2[a2]" -map 1:v -map "[a0]" -map "[a1]" -map "[a2]" -c:v copy -c:a pcm_s24le -shortest "D:\media\out.mxf" 

Я предпочитаю использовать сковороду. Как только вы получите висячие сковороды, есть большая гибкость, и -map_channel просто использует кастрюлю в любом случае.

метаданные

Вы не указали, какие метаданные вы хотите добавить к каждому потоку, так что я просто дать общий пример. Чтобы добавить поле метаданных с именем ключ со значением имени значение для третьего потока аудио:

-metadata:s:a:2 key=value 

я не уверен, что поддерживает MXF, или то, что поддерживает мультплексор MXF, так что вы, возможно, придется эксперимент.

+0

Ничего себе, большое спасибо за это, я бы никогда не справился с этим самостоятельно. Что касается метаданных, то это только тег языка для аудиопотока в файле mxf. «ENG», «GER» и т. Д. – Vince

+0

Из-за любопытства есть ярлык для того, чтобы, например, взять все эти аудиоканалы в звуковой файл и добавить их как отдельные аудиопотоки в .mxf ?. – Vince

+0

@Vince Не знаю, что я знаю. Вам нужно будет использовать «-map_channel» или фильтры pan или channelsplit. – LordNeckbeard