Я пытаюсь использовать команды ввода sox, чтобы разрешить обработку форматов файлов, которые сама sox не поддерживает, без необходимости сначала преобразовывать все входные данные.
Моя последняя попытка следующая (создать спектрограмму diff между двумя разными кодировками AA C):
sox -S -m \
-v 1 -t s24 -r 48k -c 2 -L "|ffmpeg -i input_orig.aac -vn -f s24le -" \
-v -1 -t s24 -r 48k -c 2 -L "|ffmpeg -i input_faac.aac -vn -f s24le -" \
-n \
spectrogram -x 1600 -y 480 -o diff.faac.png
Однако в результате спектрограмма содержит только первые несколько секунд, поэтому я должен что-то упустить .
Но что?
Обновление
Попробовал более простой тест с одним каналом, чтобы увидеть, работает ли он, но это приводит к той же проблеме :
ffmpeg -hide_banner -i input_orig.aac -vn -f s24le - | sox -S -t s24 -c 2 -r 48k -L - -n spectrogram -x 480 -y 96 -o orig.pipe.png
Результат:
... при этом непосредственно с использованием предварительно преобразованного файла (в FLA C или WAV), выдает правильный результат:
Вывод для простой команды pipe:
Input File : '-' (raw)
Channels : 2
Sample Rate : 48000
Precision : 24-bit
Sample Encoding: 24-bit Signed Integer PCM
In:0.00% 00:00:00.00 [00:00:00.00] Out:0 [ | ] Clip:0 [aac @ 0x5643e7dc9940] Estimating duration from bitrate, this may be inaccurate
Input #0, aac, from 'input_orig.aac':
Duration: 00:01:35.08, bitrate: 136 kb/s
Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp, 136 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (aac (native) -> pcm_s24le (native))
Press [q] to stop, [?] for help
Output #0, s24le, to 'pipe:':
Metadata:
encoder : Lavf58.20.100
Stream #0:0: Audio: pcm_s24le, 48000 Hz, stereo, s32, 2304 kb/s
Metadata:
encoder : Lavc58.35.100 pcm_s24le
In:0.00% 00:01:27.55 [00:00:00.00] Out:4.20M [!=====|=====!] Hd:0.0 Clip:0 size= 28110kB time=00:01:39.94 bitrate=2304.0kbits/s speed= 417x
video:0kB audio:28110kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
In:0.00% 00:01:39.95 [00:00:00.00] Out:4.80M [!=====|======] Hd:0.0 Clip:0
Done.