Portál AbcLinuxu, 5. května 2025 15:18
sox in.wav out.wav silence 1 0.1 -73d reverse silence 1 0.1 73d reverseNyní potřebuji takhle upravit všechny zvukové soubory v adresáři najednou, aniž bych musel zadávat název každého zvlášť. Rád bych, aby původní názvy zůstaly zachovány, případně byl jen přidán nějaký znak na konci. Našel jsem zde na abc linuxu, jak se "něco podobného" řeší u zmenšování fotografií... dokonce pomocí skriptu (http://www.abclinuxu.cz/poradna/linux/show/185795), jenže nějak bych potřeboval postrčit. Děkuju.
for file in * do inputfile=$file outputfile=$file.$$ sox $inputfile $outputfile ... mv $outputfile $inputfile done
#!/bin/bash for F in $(find /full/path/*.wav); do sox $F /tmp/out.wav silence 1 0.1 -73d reverse silence 1 0.1 73d reverse mv /tmp/out.wav $F doneNetestovano..
find /full/path/ -name "*.wav" | while read F; do
...
done
Pro zachování názvů se mi osvědčilo používat předponu nebo příponu k aktuálnímu názvu, protože ji lze jednoduše později odstranit:
sox $F out-$F silence 1 0.1 -73d reverse silence 1 0.1 73d reverse
Je lepší nemazat zdrojový soubor, dokud nemám jistotu, že vytvořený je v pořádku.
find /full/path -name *.wav -exec sox {} silence 1 0.1 -73d reverse silence 1 0.1 73d reverse \; -exec mv /tmp/out.wav {} \;
Pominu-li drobnosti jako neoescapovaná hvězdička a zapomenuté jméno výstupního souboru pro sox
, má tohle řešení oproti předchozím jednu (podle mne) zcela zásadní výhodu: selže-li z jakéhokoli důvodu příkaz sox
, původní soubor se nepřepíše. (To by ale samozřejmě šlo zařídit i u těch ostatních variant.)
Pokud by z toho měl být skript, doporučil bych nezvykat si používat pro dočasný soubor pevně danou cestu pod /tmp
, je to celkem spolehlivý generátor bezpečnostních chyb. (hint: mktemp
)
find . -name \*.wav -exec sox \{\} \{\}.wav silence 1 0.1 -73d reverse silence 1 0.1 73d reverse \;
a tím se nové soubory odlišily od původních zdvojenou příponou .wav. I vám moc děkuju za čas a ochotu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.