Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Multimédia => Téma založeno: Ventero 28 Října 2020, 19:53:01

Název: Spojování audia.
Přispěvatel: Ventero 28 Října 2020, 19:53:01
Prosím o tip na SW pro spojení asi 20ti krátkých záznamů .m4a do jednoho zvukového souboru, tak aby to prostě navazovalo chronologicky na sebe - podle čísla nebo abecedně nebo tak něco - prostě aby se to dalo zajistit, že nebudou spojeny na přeskáčku.
Název: Re:Spojování audia.
Přispěvatel: juwa2 28 Října 2020, 20:08:20
ffmpeg
A skript si snad dokážeš napsat sám - věřím ti.  :)
Název: Re:Spojování audia.
Přispěvatel: Ventero 28 Října 2020, 20:52:35
Nedokazi, ale muzu se pokusit konsolidovat vse, co uz znam a pustit se do toho. Jen bude tezke najit ten zachytny bod - aspon mam namet na zitrejsi cinnost.

Nevedel jsem ze ffmpeg umi i spojovat.
Název: Re:Spojování audia.
Přispěvatel: juwa2 28 Října 2020, 21:29:28
Nedokazi, ale muzu se pokusit konsolidovat vse, co uz znam a pustit se do toho. Jen bude tezke najit ten zachytny bod - aspon mam namet na zitrejsi cinnost.

Nevedel jsem ze ffmpeg umi i spojovat.

ffmpeg toho umí opravdu hodně... ;)
Ty soubory je třeba si napřed (pokud už nejsou) vhodně seřadit/pojmenovat (01_file.m4a, 02_file.m4a, 03_file.m4a, .......20_file.m4a).
Pak uložit jejich seznam do souboru list.txt  a nakonec je spojit:
Kód: [Vybrat]
printf "file '%s'\n" ./*.m4a > list.txt && ffmpeg -f concat -i list.txt -c copy output.m4a
Více zde (https://trac.ffmpeg.org/wiki/Concatenate).

Název: Re:Spojování audia.
Přispěvatel: Ventero 30 Října 2020, 12:14:29
Díky - s drobnou úpravou funguje skvěle:
Kód: [Vybrat]
printf "file '%s'\n" *.m4a > list.txt && ffmpeg -f concat -i list.txt -c copy output.m4aMůže mi být polopatě vysvětlena syntaxe té tvorby list.txt? - zejména tato sekce "file '%s'\n"
U toho ffmpeg je mi celkem srozumitelná, snad jen trochu udivuje parametr copy.

Edit: Už asi chápu i tu nutnost úpravy - nejspíše souvisí s tím, že jsem byl v terminálu v cílovém adresáři.
Název: Re:Spojování audia.
Přispěvatel: singularis 30 Října 2020, 19:46:38
Kód: [Vybrat]
printf "file '%s'\n" *.m4a > list.txtTa syntaxe je funkční, ale detailně vzato chybná (nebo alespoň zavádějící) — zpětné lomítko má být ve dvojitých uvozovkách zdvojeno, i v nich totiž zůstává zvláštním znakem, na což bys narazil, kdybys v něm chtěl vypsat zpětné lomítko jako takové — to by tam muselo být čtyřikrát, protože jednou ho zredukuje bash a podruhé příkaz printf.

A nyní to vysvětlení: příkaz „printf“ je „vylepšené echo“; jeho první parametr je „formátovací řetězec“, který se většinou vypisuje na výstup tak, jak je, ale může obsahovat formátovací značky začínající procentem. Každá taková značka „načte“ jeden z dalších parametrů a zformátuje ho způsobem, který vyjadřuje; formátovací značka „%s“ znamená vypsat obsah parametru jako řetězec beze změny. Pokud po zpracování celého formátovacího řetězce ještě nějaké parametry zbudou, příkaz printf ty již zpracované zahodí a se zbytkem začne znovu. V tomto případě bash za „*.m4a“ dosadí seřazené názvy souborů s příponou „*.m4a“ a to jsou parametry, které bude printf číst. A protože formátovací řetězec obsahuje jen jednu formátovací značku, celý řetězec se zopakuje pro každý parametr. Příkaz printf také ve formátovacím řetězci interpretuje značky začínající zpětným lomítkem jako v tomto případě „\n“, za kterou dosadí znak konce řádky (na rozdíl od echo, printf konec řádky sám od sebe nepřidává). A přesměrování do souboru je snad jasné...

Pro jiné vysvětlení (možná srozumitelnější), zadej v bashi příkaz:

Kód: [Vybrat]
help printf
Osobně se snažím formátovací řetězec printf uvádět co nejvíc v apostrofech, protože se tím šetří problémy se zpětnými lomítky, ale pokud sám má obsahovat apostrof jako v tomto případě, je to problém, takže nejlepší řešení je všechna zpětná lomítka ve dvojitých uvozovkách zdvojit:
Kód: [Vybrat]
printf "file '%s'\\n" *.m4a > list.txt
Název: Re:Spojování audia.
Přispěvatel: CyberCodeDroid 31 Října 2020, 17:55:37
http://www.avanti.arrozcru.org/