gpt4 book ai didi

audio - FFMPEG - 多轨、多 channel 文件到离散单声道文件

转载 作者:行者123 更新时间:2023-12-04 23:11:58 27 4
gpt4 key购买 nike

我有多轨和多声道的文件(即,轨道 1 可能是 5.1,轨道 2 可能是立体声,轨道 3 可能是立体声等)
我希望将每个轨道的每个 channel 输出到它自己的“展开”离散单声道文件中。
示例媒体:

ffprobe version 4.3.1-0york0~18.04 Copyright (c) 2007-2020 the FFmpeg developers
built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
configuration: --prefix=/usr --extra-version='0york0~18.04' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libzimg --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
[mxf @ 0x55d3e7fc2680] wrapping of stream 0 is unknown
[jpeg2000 @ 0x55d3e805ce00] End mismatch 1
Last message repeated 1 times
Input #0, mxf, from 'redacted.mxf':
Metadata:
operational_pattern_ul: 060e2b34.04010101.0d010201.01010900
modification_date: 2019-10-03T09:58:16.368000Z
uid : f6267ae2-680e-4357-9b1d-c77c045d3cd7
generation_uid : e7e6f5a1-6f15-4df5-aea8-a41f3ef535d6
company_name : redacted
product_name : redacted
product_version : 11.6.1.5.301404
product_uid : 84ae5ffc-4710-11dd-a6fe-0010c629ec73
application_platform: 4KICR1
material_package_umid: 0x060A2B340101010501010D2013000000BE3608F3135E48AD99E4340643E47F22
timecode : 00:59:20:00
Duration: 00:26:16.07, start: 0.000000, bitrate: 139194 kb/s
Stream #0:0: Video: jpeg2000, yuv422p10le(progressive), 1920x1080, SAR 1:1 DAR 16:9, 23.98 tbr, 23.98 tbn, 23.98 tbc
Metadata:
file_package_umid: 0x060A2B340101010501010D201300000091A43E578B86490698045924FA9EECC5
track_name : Picture
Stream #0:1: Audio: pcm_s24le, 48000 Hz, 6 channels, s32 (24 bit), 6912 kb/s
Metadata:
file_package_umid: 0x060A2B340101010501010D201300000091A43E578B86490698045924FA9EECC5
track_name : Sound
Stream #0:2: Audio: pcm_s24le, 48000 Hz, 2 channels, s32 (24 bit), 2304 kb/s
Metadata:
file_package_umid: 0x060A2B340101010501010D201300000091A43E578B86490698045924FA9EECC5
track_name : Sound
Stream #0:3: Audio: pcm_s24le, 48000 Hz, 2 channels, s32 (24 bit), 2304 kb/s
Metadata:
file_package_umid: 0x060A2B340101010501010D201300000091A43E578B86490698045924FA9EECC5
track_name : Sound
Stream #0:4: Audio: pcm_s24le, 48000 Hz, 2 channels, s32 (24 bit), 2304 kb/s
Metadata:
file_package_umid: 0x060A2B340101010501010D201300000091A43E578B86490698045924FA9EECC5
track_name : Sound
Stream #0:5: Data: none
Metadata:
file_package_umid: 0x060A2B340101010501010D201300000091A43E578B86490698045924FA9EECC5
track_name : Auxiliary Data
data_type : vbi_vanc_smpte_436M
Unsupported codec with id 0 for input stream 5
这些文件是供应商合格的主文件,并且轨道/ channel 组合因供应商而异,因此有些可能是立体声、5.1、7.1 顺序,有些可能已经是离散单声道,有些可能是离散立体声、5.1 和单声道轨道。它都是混合的。所以我正在寻找一些可以优雅地处理所有轨道的所有 channel 的通用策略。
现在我已经看到了通过 ffmpeg 文档处理离散化音频的各种策略,但它们似乎都没有显示如何从不同的轨道定位不同的 channel 。我确定它是 pebkac错误,但我希望得到一些指导。
我都试过了 map_channel方法以及 -filtercomplex channelsplit方法。
ffmpeg -i redacted.mxf -ss 60 \
-map_channel 0.1.0 -t 10 track_1_0.wav \
-map_channel 0.1.1 -t 10 track_1_1.wav \
-map_channel 0.1.2 -t 10 track_1_2.wav \
-map_channel 0.1.3 -t 10 track_1_3.wav \
-map_channel 0.1.4 -t 10 track_1_4.wav \
-map_channel 0.1.5 -t 10 track_1_5.wav \
-map_channel 0.2.0 -t 10 track_2_0.wav \
-map_channel 0.2.1 -t 10 track_2_1.wav \
-map_channel 0.3.0 -t 10 track_3_0.wav \
-map_channel 0.3.1 -t 10 track_3_1.wav \
-map_channel 0.4.0 -t 10 track_4_0.wav \
-map_channel 0.4.1 -t 10 track_4_1.wav
但是,输出文件并非都是单声道的,有些被标记为 5.1。我不相信他们继承了健全/正确的 channel 布局(单声道) - 但标记为 5.1 的输出文件是无意义的,因为它们都来自立体声轨道。即track_2_0.wav track_2_1.wav、track_3_0.wav、track_3_1.wav、track_4_0.wav、track_4_1.wav。这似乎很奇怪。上述命令中的 Track 1_0 输出了一个健全的媒体信息:
File size                                : 938 KiB
Duration : 10s 0ms
Overall bit rate mode : Constant
Overall bit rate : 768 Kbps
Writing application : Lavf58.45.100

Audio
Format : PCM
Format settings : Little / Signed
Codec ID : 1
Duration : 10s 0ms
Bit rate mode : Constant
Bit rate : 768 Kbps
Channel(s) : 1 channel
Sampling rate : 48.0 KHz
Bit depth : 16 bits
Stream size : 938 KiB (100%)

然而,第二和第三轨道有错误的 channel 布局和意外的编解码器 ID:
Format                                   : Wave
File size : 5.49 MiB
Duration : 10s 0ms
Overall bit rate mode : Constant
Overall bit rate : 4 608 Kbps
Writing application : Lavf58.45.100

Audio
Format : PCM
Format settings : Little / Signed
Codec ID : 00000001-0000-0010-8000-00AA00389B71
Duration : 10s 0ms
Bit rate mode : Constant
Bit rate : 4 608 Kbps
Channel(s) : 6 channels
Channel layout : L R C LFE Lb Rb
Sampling rate : 48.0 KHz
Bit depth : 16 bits
Stream size : 5.49 MiB (100%)

另外回复:map_channel,有一些文档怀疑它的正确方法:

Note that currently each output stream can only contain channels from a single input stream; you can’t for example use "-map_channel" to pick multiple input audio channels contained in different streams (from the same or different files) and merge them into a single output stream. It is therefore not currently possible, for example, to turn two separate mono streams into a single stereo stream. However splitting a stereo stream into two single channel mono streams is possible.


使用过滤器复合体,文档/错误跟踪器有一个离散化 5.1 和标记单声道的示例。我可以定位我想要的轨道,并获得一个有效的过滤器链,如调试日志报告中所示,但是我只获得第一个轨道的音频:
ffmpeg -y -v 40 -i redacted.mxf -ss 60 \
-disposition:a default \
-filter_complex \
"[0:a:0]channelsplit=channel_layout=5.1[c1][c2][c3][c4][c5][c6],\
[c1]aformat=channel_layouts=mono[c1],\
[c2]aformat=channel_layouts=mono[c2],\
[c3]aformat=channel_layouts=mono[c3],\
[c4]aformat=channel_layouts=mono[c4],\
[c5]aformat=channel_layouts=mono[c5],\
[c6]aformat=channel_layouts=mono[c6],\
[0:a:1]channelsplit=channel_layout=stereo[c7][c8],\
[c7]aformat=channel_layouts=mono[c7],\
[c8]aformat=channel_layouts=mono[c8],\
[0:a:2]channelsplit=channel_layout=stereo[c9][c10],\
[c9]aformat=channel_layouts=mono[c9],\
[c10]aformat=channel_layouts=mono[c10],\
[0:a:3]channelsplit=channel_layout=stereo[c11][c12],\
[c11]aformat=channel_layouts=mono[c11],\
[c12]aformat=channel_layouts=mono[c12]"\
-map "[c1]" -t 10 1.wav\
-map "[c2]" -t 10 2.wav\
-map "[c3]" -t 10 3.wav\
-map "[c4]" -t 10 4.wav\
-map "[c5]" -t 10 5.wav\
-map "[c6]" -t 10 6.wav\
-map "[c7]" -t 10 7.wav\
-map "[c8]" -t 10 8.wav\
-map "[c9]" -t 10 9.wav\
-map "[c10]" -t 10 10.wav\
-map "[c11]" -t 10 11.wav\
-map "[c12]" -t 10 12.wav
TL/DR;
简而言之,如何将每个轨道的每个 channel 导出为离散的单声道音轨(无论 channel 布局如何?)
谢谢!

最佳答案

您不能重复使用过滤器输出中的标签。使用中间标签。

ffmpeg -y -v 40 -i redacted.mxf -ss 60 \
-disposition:a default \
-filter_complex \
"[0:a:0]channelsplit=channel_layout=5.1[a1][a2][a3][a4][a5][a6],\
[a1]aformat=channel_layouts=mono[c1],\
[a2]aformat=channel_layouts=mono[c2],\
[a3]aformat=channel_layouts=mono[c3],\
[a4]aformat=channel_layouts=mono[c4],\
[a5]aformat=channel_layouts=mono[c5],\
[a6]aformat=channel_layouts=mono[c6],\
[0:a:1]channelsplit=channel_layout=stereo[a7][a8],\
[a7]aformat=channel_layouts=mono[c7],\
[a8]aformat=channel_layouts=mono[c8],\
[0:a:2]channelsplit=channel_layout=stereo[a9][a10],\
[a9]aformat=channel_layouts=mono[c9],\
[a10]aformat=channel_layouts=mono[c10],\
[0:a:3]channelsplit=channel_layout=stereo[a11][a12],\
[a11]aformat=channel_layouts=mono[c11],\
[a12]aformat=channel_layouts=mono[c12]"\
-map "[c1]" -t 10 1.wav\
-map "[c2]" -t 10 2.wav\
-map "[c3]" -t 10 3.wav\
-map "[c4]" -t 10 4.wav\
-map "[c5]" -t 10 5.wav\
-map "[c6]" -t 10 6.wav\
-map "[c7]" -t 10 7.wav\
-map "[c8]" -t 10 8.wav\
-map "[c9]" -t 10 9.wav\
-map "[c10]" -t 10 10.wav\
-map "[c11]" -t 10 11.wav\
-map "[c12]" -t 10 12.wav

关于audio - FFMPEG - 多轨、多 channel 文件到离散单声道文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64996856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com