Portál AbcLinuxu, 5. května 2025 15:07

Dotaz: ffmpeg a nahrávání přes filtr

18.5.2019 18:28 jejda | skóre: 25 | blog: jejda
ffmpeg a nahrávání přes filtr
Přečteno: 391×
Odpovědět | Admin
Ahojte. Pokouším se podle návodu smíchat dva stereo zvuky do jednoho. Problém je, potřebuju jeden z nich předtím prohnat přes pár filtrů, protože kvalita stojí zaprd. Jeden je mikrofón (usbmic) a druhý je virtuální vstup na alsa zvukovce odkud nahrávám zvuky co vydávájí programy (looprec).


$ ffmpeg -f alsa -i usbmic -f alsa -i looprec -filter_complex "[0:a]highpass=10,volume=20dB[0:a];[0:a][1:a]amerge=inputs=2[a]" -map "[a]" -ac 2 test.wav
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, alsa, from 'usbmic':
  Duration: N/A, start: 1558195138.708653, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, alsa, from 'looprec':
  Duration: N/A, start: 1558195138.792802, bitrate: 1536 kb/s
    Stream #1:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Stream mapping:
  Stream #0:0 (pcm_s16le) -> amerge:in0
  Stream #1:0 (pcm_s16le) -> amerge:in1
  amerge -> Stream #0:0 (pcm_s16le)
Press [q] to stop, [?] for help
[Parsed_amerge_2 @ 0x55d4d2c80700] No channel layout for input 1
[Parsed_amerge_2 @ 0x55d4d2c80700] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
[Parsed_volume_1 @ 0x55d4d2c7f480] Cannot select sample rate for the link between filters Parsed_volume_1 and Parsed_highpass_0.
Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #1:0
Conversion failed!
Bude tam nejspíš zmatek s těma labels v hranatých závorkách. Bez těch filtrů highpass a volume to downmixuje hezky.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.5.2019 19:09 jejda | skóre: 25 | blog: jejda
Rozbalit Rozbalit vše Re: ffmpeg a nahrávání přes filtr
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě doplním že nahrávání samotného mikrofonního vstupu přes filtry
ffmpeg -f alsa -i usbmic -filter_complex "highpass=10,volume=20dB" -ac 2 test.wav
funguje jak má.
18.5.2019 19:29 NN
Rozbalit Rozbalit vše Re: ffmpeg a nahrávání přes filtr
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mozna by stacilo upravit vystupni label prvniho streamu, jinak to poleze do merge nezmenene..
ffmpeg -f alsa -i usbmic -f alsa -i looprec -filter_complex "[0:a]highpass=10,volume=20dB[aout];[aout][1:a]amerge=inputs=2[a]" -map "[a]" -ac 2 test.wav
18.5.2019 19:56 jejda | skóre: 25 | blog: jejda
Rozbalit Rozbalit vše Re: ffmpeg a nahrávání přes filtr
Nejde. Ale teď už to hlásí jinačí chybu:
The following filters could not choose their formats: Parsed_amerge_2
Consider inserting the (a)format filter near their input or output.
Moc rozumu z toho teda nemám.
20.5.2019 10:21 jejda | skóre: 25 | blog: jejda
Rozbalit Rozbalit vše Re: ffmpeg a nahrávání přes filtr
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak se nakonec povedlo. Ten mikrofonní stream se musí přesamplovat filtrem aformat na 48kHz než vyleze z toho prvního chainu (před tím středníkem), jinak to amerge nepobere. Nechápu k čemu, když z alsy leze 48kHz by default. Navíc ffmpeg si to při spuštění sám detekuje ...
Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Ale budiž.

Celý ten příkaz je ale tak nechutně dlouhý, že jsem si to rači šoupnul do skriptu.

Co mě příjemně překvapilo, tak to vůbec není out-of-sync. Čekal jsem aspon 50-100 milisekund zpoždění u mikrofonu. V audacity musím mít nastaveno 130ms. Existuje vůbec nejaký commandline program na nahrávání karaoke? Toto by se na to dalo v klidu použít, když to nemá latence ..:-)

Při odesílání komentáře mi to píše: "Značka C0\+\C2\|\C1 není povolena!" (bez těch zpětných lomítek) Co to znamená? Nemůžu sem kvuli tomu dát ten funkční ffmpeg filtr

20.5.2019 21:04 jejda | skóre: 25 | blog: jejda
Rozbalit Rozbalit vše Re: ffmpeg a nahrávání přes filtr
V praxi se bohužel ukázalo, že neexistuje univerzální nastavení filtrů pro všecky situace. Takto je ten filtr natvrdo zadrátovaný a jakmile se to jednou nahraje blbě, tak už to nejde nijak dodatečně opravit. Protože Audacity neumí nahrávat z více nezávislých zdrojů naráz zatím to řeším tak, že ffmpegem vyrobím ze dvou stereo vstupů jeden čtyřkanálový wav.
ffmpeg -f alsa -i usbmic -f alsa -i looprec -filter_complex "join=inputs=2:channel_layout=quad" output.wav
A případné filtrování a downmix udělám ručně v audacity. Je to sice víc práce ale výsledek za to stojí.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.