Estoy buscando una solución para superponer archivos mp3 en los que el más largo se reproducirá en segundo plano y el más pequeño continuará reproduciéndose como un bucle con eso. Mi código actual está funcionando sin tubería:

ffmpeg -i 'longer.mp3'  -filter_complex "amovie='small.mp3:loop=999'[s];[0][s]amix=duration=shortest" new.mp3

Este código funciona como un encanto, pero lo que quiero lograr es esto:

curl "any-url-audio-file" | ffmpeg -i 'longer.mp3'  -filter_complex "amovie='pipe\:0:loop=999'[s];[0][s]amix=duration=shortest" new.mp3

Este código no funciona y también me está dando un error,

ffmpeg version N-89955-g118e1b0b33 Copyright (c) 2000-2018 the FFmpeg 
developers
built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-18)
configuration: --enable-openssl --enable-libmp3lame
libavutil      56.  7.100 / 56.  7.100
libavcodec     58.  9.100 / 58.  9.100
libavformat    58.  7.100 / 58.  7.100
libavdevice    58.  0.101 / 58.  0.101
libavfilter     7. 11.101 /  7. 11.101
libswscale      5.  0.101 /  5.  0.101
libswresample   3.  0.101 /  3.  0.101
Input #0, mp3, from 'morning_alarm.mp3':
Duration: 00:00:28.06, start: 0.025057, bitrate: 128 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
Metadata:
encoder         : LAME3.97 
Side data:
replaygain: track gain - -9.200000, track peak - unknown, album gain - unknown, album peak - unknown, 
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                         Dload  Upload   Total   Spent    Left  Speed
 0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     
 0101  5088  101  5088    0     0  28080      0 --:--:-- --:--:-- --:--:--  160k
Stream mapping:
Stream #0:0 (mp3) -> amix:input0
amix -> Stream #0:0 (libmp3lame)
Press [q] to stop, [?] for help
[Parsed_amovie_0 @ 0x26c76c0] Failed to avformat_open_input 'pipe:0'
[AVFilterGraph @ 0x26c3d80] Error initializing filter 'amovie' with args 'pipe\:0:loop=999'
Error reinitializing filters!
Failed to inject frame into filter network: Invalid data found when 
processing input
Error while processing the decoded data for stream #0:0
Conversion failed!

Todo lo que quiero hacer es superponer dos archivos de audio a través de la línea de comandos en la que el primer archivo de audio será más largo y el segundo será más pequeño. El más pequeño se repetirá como un bucle hasta que el más largo juegue.

Por favor, dime, ¿cómo puedo hacer eso? ¿Hay otra manera de hacer esto?

kapil
fuente