[FFmpeg-user] more sound madness, looks SOLVED
Bouke / VideoToolShed
bouke at videotoolshed.com
Tue Mar 10 13:12:10 EET 2020
> On 10 Mar 2020, at 07:28, Ted Park <kumowoon1025 at gmail.com> wrote:
>
>> ? Start is the same, but then I’m lost...
>>
>>> channelmap=map=0-0|1-1|2-2:
>> This also confuses me. The order of the second and third mapping looks likes it comes from the 0 1 1 yadda at the beginning.
>> But where is channel 0 from the second input mapped? Whatever I try, I always end up with channel 0...
>
> The channels aren’t on every single bit field, but that’s basically it, I just wanted to try to minimize the variables to see if I could get the same thing to work, because arguments and filter parameters related to audio channels seem to vary (or maybe it’s a discrepancy in the docs) From libavutil/channel_layout.h:
> #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_BACK_LEFT 0x00000010
> #define AV_CH_BACK_RIGHT 0x00000020
> #define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040
> #define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080
> #define AV_CH_BACK_CENTER 0x00000100
> #define AV_CH_SIDE_LEFT 0x00000200
> #define AV_CH_SIDE_RIGHT 0x00000400
> #define AV_CH_TOP_CENTER 0x00000800
> #define AV_CH_TOP_FRONT_LEFT 0x00001000
> #define AV_CH_TOP_FRONT_CENTER 0x00002000
> #define AV_CH_TOP_FRONT_RIGHT 0x00004000
> #define AV_CH_TOP_BACK_LEFT 0x00008000
> #define AV_CH_TOP_BACK_CENTER 0x00010000
> #define AV_CH_TOP_BACK_RIGHT 0x00020000
> #define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
> #define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT.
> #define AV_CH_WIDE_LEFT 0x0000000080000000ULL
> #define AV_CH_WIDE_RIGHT 0x0000000100000000ULL
> #define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL
> #define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL
> #define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL
> I figured the hex notation was a way to leave little to be interpreted/resolved but apparently that wasn’t the issue. I used the channels labeled stereo mix and top back right thinking they were less likely to overlap, so 0x60020000 stands for 0x40000000|0x20000000|0x00020000.
Hi Ted,
> What is the error you get with channel map? Or does it just set the channels to be silent or disable them with no warning again?
Forget it, I think (with your help) I’ve nailed it.
> The multitrack file is actually labeled as the down mix on the first two channels, then the recorded tracks:
>> Input #1, wav, from '/Volumes/Data/test/068.WAV':
>> Metadata:
>> comment : sSPEED=025.000-ND
>> : sTAKE=068
>> : sUBITS=$00000000
>> : sSWVER=5.01.8149
>> : sSCENE=MixPre
>> : sFILENAME=MixPre-068.WAV
>> : sTAPE=200130
>> : sCIRCLED=FALSE
>> : sTRK1=MixL
>> : sTRK2=MixR
>> : sTRK3=Track 1
>> : sTRK4=Track 2
>> : sTRK5=Track 3
>> : sTRK6=Track 4
>> : sTRK7=Track 5
>> : sTRK8=Track 6
>> : sTRK9
>> encoded_by : SoundDev: MixPre-10 II TJ0019225
>> originator_reference: USSDVTJ001922501520013072A000201
>> date : 2020-01-30
>> creation_time : 07:02:20
>> time_reference : 2468718515
>> coding_history : A=PCM,F=48000,W=24,M=multi,R=48000,T=10 Ch;Ambisonics=off
I don’t think this metadata is used. (And it’s incomplete as well, this is just a dump of the BEXT chunk that is not large enough to store all the metadata there is.
So, the names are completely irrelevant for FFmpeg. (And for everyone, as the good stuff is in the iXML.)
I must admit, have not tested it very well, but I would expect that there is a -ignore_metadata command as input option if it turns out I’m wrong here.
> Maybe you will get automatic channel detection working again if you don’t include the stereo and use the 8 channels.
Not an option, as what I’m making is intended to merge cam sound with external sound
> Are some of the tracks actually sub-mixes bounced on the device? (Since you get tracks 8 and 9)
Probably, but that’s beside the issue, it’s not up to me what end users want to map to where :-)
What DOES work as expected:
(Reverse mapping of BWF sound, with the last channel duplicated, reverse mapping of the two video sound channels.)
The channelmap from the BWF is a sum of (zero based) 2 to 12 from you list above, to leave room for the 0x3 (first two) for the video sound:
/Applications/ffmpeg -i /Volumes/Data/test/10track.wav -i /Volumes/Data/test/input.mp4 -filter_complex "[0:a]channelmap=9-0|8-1|7-2|6-3|5-4|4-5|3-6|2-7|1-8|0-9|9-10:channel_layout=0x8FFC,[1:a]join=inputs=2:channel_layout=0x1FFF,channelmap=map=0-0|1-1|2-2|3-3|4-4|5-5|6-6|7-7|8-8|9-9|10-10|11-11|12-12:channel_layout=0x1FFF[out]" -map "[out]" -c:a pcm_s24le -map 1:1 -c:v copy /Volumes/Data/test/ted59.mov
To make it easier, amerge, works as expected:
/Applications/ffmpeg -i /Volumes/Data/test/10track.wav -i /Volumes/Data/test/input.mp4 -filter_complex "[0:a]channelmap=9-0|8-1|7-2|6-3|5-4|4-5|3-6|2-7|1-8|0-9|9-10:channel_layout=0x8FFC[a0];[1:a]channelmap=1-0|0-1:channel_layout=0xC[a1];[a1][a0]amerge=inputs=2[out]" -map "[out]" -c:a pcm_s24le -map 1:1 -c:v copy /Volumes/Data/test/ted61.mov
Even easier: (Since the filter_complex now isn’t feeding the next, and proof that the channelmap is just a dummy:
/Applications/ffmpeg -i /Volumes/Data/test/10track.wav -i /Volumes/Data/test/input.mp4 -filter_complex "[0:a]channelmap=9-0|8-1|7-2|6-3|5-4|4-5|3-6|2-7|1-8|0-9|9-10:channel_layout=0x7FF[a0];[1:a]channelmap=1-0|0-1:channel_layout=0x3[a1];[a1][a0]amerge=inputs=2[out]" -map "[out]" -c:a pcm_s24le -map 1:1 -c:v copy /Volumes/Data/test/ted62.mov
This makes it easy to break the whole shebang down so an end user can map any combo in any order without me having to jump hoops :-)
Thanks for your help!
Bouke
> Regards,
> Ted Park
>
> _____________________________________
More information about the ffmpeg-user
mailing list