nixp.ru v3.0

17 октября 2017,
вторник,
21:54:16 MSK

DevOps с компанией «Флант»
Longobard написал 23 июня 2004 года в 05:46 (315 просмотров) Ведет себя как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.

Близицца день покупки плеера Creative Muvo TX (256 Mb). На эти 256 Мб хочу вместить как можно больше музыки :) Ситуация облечается тем фактом, что у меня нету музыкального слуха :) Вопщем хочу перекодировать свои MP3 так, чтобы они иели минимальный размер при приемлимом качестве. У меня некоторые MP3 кодированы в CBR, 192 Kb/s, некоторые 128, есть даже 96 %) Есть и AVR, но они занимают побольше места. Задача повторно кодировать весь этот зоопарк с приемлимым результатом. Вобщем посоветуйте хорошую доку на эту тему. Заранее спасибо.

Longobard

Гыг. Попробовал перекодировать файлик размером 5.4 Мб CBR 192 Kb/s с --alt-preset 96. Результат — файл на 2.7 Мб, т.е. ровно В ДВА РАЗА МЕНЬШЕ!!!! Никуясе! Щас буду придирчивослушать, хочу понять как это сказалось на качестве :)

Longobard

хм. пишу такое:

longobard root# cat *.mp3 | lame - --at-preset 96
куча мусора
longobard root#

в манах сказано что есть вместо входного файла указать -, то lame будет читать с stdin. Вот я конвейером и перенаправляю. Что не так?

Longobard

Понял что не так. Входной файл надо тоже указать. Блин, а как заставить lame кодировать все файлы в данной дире с определенными параметрами?

Longobard

А гуевеый фронтенд под lame есть?

Uncle Theodore

Извините, что вмешиваюся в вашу оживленную беседу :-)

Здесь можно найти гую для лейма

http://lame.sourceforge.net/links.html

а

for i in ls; do $i; done

сделает все для каждого файла в отдельности.

Good Luck,

UT

Longobard
Uncle Theodore
Извините, что вмешиваюся в вашу оживленную беседу :-)

Здесь можно найти гую для лейма

http://lame.sourceforge.net/links.html

а

for i in ls; do $i; done

сделает все для каждого файла в отдельности.

Good Luck,

UT

Млин, Дядя Федор, вам юмористом быть :) «В вашу оживленную беседу» — лол :))) Я давно так не смеялся :)) А теперь по сути: спасибо. Ты как мои мысли прочитал — я как раз читал доку по Баш кодингу шоб такой скриптик написать :) Спасибо! Удачи и тебе!

Longobard

Правда не работает он. Я попобовал так:

#!/bin/bash
for i in 'ls '; do echo "$i is a in current directory "; done

в ответ баш пишет такое:

ls  is a in current directory

Че там надо изменить? Вроде ' ' — это ведь жесткие кавычки?

Longobard

Ять, ну откуда я мог знать что между двумя козявками ( ` и ' ) есть какая-то разница :)

#!/bin/bash
for i in `ls `; do echo "$i is a in current directory "; done

Найдите два отличия :)

Uncle Theodore
LONGOBARD
Правда не работает он. Я попобовал так:

#!/bin/bash
for i in 'ls '; do echo "$i is a in current directory "; done

в ответ баш пишет такое:

Че там надо изменить? Вроде ' ' — это ведь жесткие кавычки?

Нет! Это «backtics», у меня они под волной. В баше они имеют то же значение, что и $()

Можно написать

for i in $(ls); do echo «$i is in current directory»; done

Good Luck,

UT

Longobard

Блин. А как быть с пробелами? Я хочу чтоб i содержала в себе имя файла, а если в имени пробел — то она содержит только первый кусок имени. Как лечить? Переименовывать столько файлов ломает.

Longobard

Блин, как написать скрипт шоб все файлы переименовал шоб пробелы в именах файлов на _ заменить? А то голова че-то варит туго :)

Longobard

Разобрался с помощью krename.

Longobard

все, написал.

#!/bin/bash
outdir=/root/4player
mkdir $outdir
cd $1
for i in `ls -R *`; do lame --alt-preset 96 $i $outdir/$i; done
cd

Вроде работает, запустил с nice -n 18, надеюсь к вечеру закончит :)))

Genie

Вот это будет правильнее:

#/bin/sh
wav_dir=/path/to/wavs
mp3_dir=/path/to/mp3s
find ${wav_dir} -type f -exec sh -c "f={}; ff="${mp3_dir}/${f#${wav_dir}/}.mp3"; mkdir -p `dirname "$ff"`; lame --alt-preset 96 $f $ff" \;
Longobard

Чуток переписал, чтобы уже перекодированные файлы заново не кодировать. Че-то не пашет:

#!/bin/bash
outdir=/root/4player
mkdir $outdir
cd $1
for i in `ls -R *`; do
if [ -x "$outdir/$i" ]; then
      echo "File $i exist, skipping"
else
      lame --alt-preset 96 $i $outdir/$i
fi
done
cd

Вот вроде все ясно. проверяю если файл уже есть (-x) — то пишу шо он есть и все. если нету — кодирую. Блин. В результате почему-то кодируется все. Хотя ls-ом проверял что файл есть такой. Че делать? В чем тут дело?

Genie
LONGOBARD
Блин, как написать скрипт шоб все файлы переименовал шоб пробелы в именах файлов на _ заменить? А то голова че-то варит туго :)

и опять же..

find /path/to/files -type f -exec sh -c 'f={}; ff=`dirname "$f"`/`basename "$f"|tr " " "_"`; [ "$f" != "$ff" ] && mv "$f" "$ff"' \;
Uncle Theodore

Нет,

-x == Файл наличествует и является исполнимым (executable)

-f == Файл существует как регулярный файл (не пайп, не девайс…)

Тебе надо -f или -r

Good Luck,

UT

Longobard

пнл, спасибо. С -f все работает %) Все, теперь все ок :) Буду теперь слушать мюзик панимаишь :) Блин, ужимается все на ура, песня триплекса сжалась в три раза аж :) Слуха музыкального нету у меня, да и колонки голимые, так что разницы между оригиналом и кодированным файлом не нашел (кроме размера ессно :) )

Longobard

Блин, странная дока. Адвансед Баш Скриптинг Гайд мать ее. Сначала исрользуют конструкцию if например — спустя две главы обьясняют что она из себя представляет и как ее юзать :) Иф то лана с ним, а вот другие вещи.. Ну низзя же так :)