Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Multimédia => Téma založeno: 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.
-
ffmpeg
A skript si snad dokážeš napsat sám - věřím ti. :)
-
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.
-
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:
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).
-
Díky - s drobnou úpravou funguje skvěle:
printf "file '%s'\n" *.m4a > list.txt && ffmpeg -f concat -i list.txt -c copy output.m4a
Můž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.
-
printf "file '%s'\n" *.m4a > list.txt
Ta 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:
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:
printf "file '%s'\\n" *.m4a > list.txt
-
http://www.avanti.arrozcru.org/