Online video hd

Смотреть супер видео

Официальный сайт mydebut 24/7/365

Смотреть видео бесплатно

NickNill 10.06.2010 21:32

Скрипты на bashКонвертер из flac в mp3 v 0.50a

Привет всем!
Ну вообщем дело было к вечеру, делать было нечего..
Вспомнил я, что у меня музыка в основном в flac, по трекам. И иногда нужно ее в mp3 кому-то скинуть.
Чтобы не разбираться с mencoder, да плюс еще и скучно немного, решил пошаманить со скриптами.
Знаю что уже есть похожее http://welinux.ru/post/1196/, но нашел его только что, да и там только по одному файлу можно конвертить.
Если интересно что из этого получилось - под кат.


Итак сам скрипт

  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/bin/bash

#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
#as published by the Free Software Foundation; either version 2
#of the License, or (at your option) any later version.

#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

#default settings
dir_name="./"
dir_out="320"
bitrate="320"
rate="--cbr"

#some colors
RED='\e<1;31m'
GREEN='\e<1;32m'
BLUE='\e<1;35m'
NC='\e<0m'

#Help function
function script_help {
echo -e "${GREEN}Simple script to decode FLAC to MP3 format"
echo -e "Author: ${RED} NickNill (http://welinux.ru/user/NickNill)"
echo -e "${GREEN}WARNING: ${RED}it can just decode flac to MP3. You need lame and flac packages!"
echo -e "${GREEN}Usage: ${BLUE}\n\t./script -d${NC} (Path to directory or files with FLAC.Default is current dir)"
echo -e "\t\t<${BLUE}-b${NC} MP3 bitrate (default 320)> \n\t\t<${BLUE}-r${NC} Rate type (${BLUE}cbr,abr,vbr${NC}) For abr and vbr must have quality variable. See example.>"
echo -e "\t\t<${BLUE}-o${NC} Output Dir (default dir is ${BLUE}320${NC} in current directory) > \n\t\t<${BLUE}-s ${NC}Create subdirs (they will be created same as in source dir)>"
echo -e "\t\t<${BLUE}-l "options"${NC} Additional options to lame encoder. Must be last in command line! For experts only!> \n${GREEN}Example:${RED} -r abr 160 (The allowed range is 8 - 310) ${NC} or ${RED} -r vbr 5 (The allowed range of n is 0 - 9. 0 - highest quality).${NC}"
echo -e "${RED}If you dont know what means theese flags - you don't need it ;) Just use ${GREEN} -d ${RED} and maybe ${GREEN} -s ${RED} flags."
echo -e "${GREEN}Have fun!${NC}"
}

#parsing needed parameters
i=("$@")
num=$#
if < "$num" -eq "0" > ; then
script_help
exit 0
fi
a=0
while < "$a" -le "$num" >;
do
##help
if < "${i<$a>}" == "-h" > || < "${i<$a>}" == "--help" > ; then
script_help
exit 0;
fi
##if checks true then initialise vars
if < "$dir" == '1' > && < -e "${i<$a>}" > ; then
dir_name="${i<$a>}"
dir=0
fi
if < "$br" == '1' > ; then
bitrate=`echo ${i<$a>} | sed 's/<^0-9>\+//g'`
br=0
fi
if < "$rt" == '1' > ; then
if < "${i<$a>}" == 'abr' > ; then
rate="--abr"
elif < "${i<$a>}" == 'vbr' >; then
rate="-V"
elif < "${i<$a>}" != 'cbr' >; then
quality="${i<$a>}"
rate="$rate $quality"
rt=0
else
rt=0
fi
fi
if < "$lame" == '1' > ; then
lame_p="$lame_p ${i<$a>}"
fi
if < "$out" == '1' > ; then
dir_out="${i<$a>}"
out='0'
fi

##checks
if < "${i<$a>}" == '-d' >; then
dir='1';
fi
if < "${i<$a>}" == '-b' >; then
br='1';
fi
if < "${i<$a>}" == '-r' >; then
rt='1';
fi
if < "${i<$a>}" == '-o' >; then
out='1';
fi
if < "${i<$a>}" == '-s' >; then
sub='1';
fi
if < "${i<$a>}" == '-l' >; then
lame='1';
fi

a=$(($a+1))
done

#list files
files=`find "$dir_name" -name "*.flac" -type f 2> /dev/null`
echo -e "${GREEN}Now I will do my work =) This is can take a while.${NC}"

echo "$files" | while read a;
do
echo -e "${BLUE}Processing file:${NC} $a"
##add subdirs
if < "$sub" == "1" > ; then
#remove last slash if it's exist
dir_name=`echo $dir_name | sed 's/\/.\{0\}$//'`
subdirs=`echo $a | sed 's/#//g' | sed "s#^$dir_name/##g" | sed 's#/\?<^ />\+.flac.\{0\}$##g'`
dir_out="$dir_out/$subdirs"
fi
#if there no out dir then make it
if < ! -d "$dir_out" > ; then
mkdir -p "$dir_out"
fi
#remove path, need only filenames
mp3name=`echo $a | sed 's/.\+\///' | sed 's/.flac/.mp3/'`

#read tags from files
ARTIST=`metaflac "$a" --show-tag=ARTIST | sed 's/.*=//g'`
TITLE=`metaflac "$a" --show-tag=TITLE | sed 's/.*=//g'`
ALBUM=`metaflac "$a" --show-tag=ALBUM | sed 's/.*=//g'`
TRACK=`metaflac "$a" --show-tag=TRACKNUMBER | sed 's/.*=//g'`
GENRE=`metaflac "$a" --show-tag=GENRE | sed 's/.*=//g'`
DATE=`metaflac "$a" --show-tag=DATE | sed 's/.*=//g'`

#remove last slash if it's exist
dir_out=`echo $dir_out | sed 's/\/.\{0\}$//'`
if < "$lame" == '0' >; then
lame_p="-q 2"
fi
#Encode to mp3 with all settings
flac -f -d -s "$a" -c | lame $rate -b $bitrate --add-id3v2 --ta "$ARTIST" --tt "$TITLE" --tl "$ALBUM" --tg "$GENRE" --ty "$DATE" $lame_p - "$dir_out/$mp3name";
if < -e "$dir_out/$mp3name" > ; then
echo -e "${BLUE}File is saved to${NC} $dirout/$mp3name"
else
echo -e "${RED}WARNING: There is no encoded file. Something wrong. Please read help, or contact with me!"
exit 0
fi
done



Знаю, много чего лишнего, но я очень старался =)
Вдруг кому-то пригодится.
Еще можно обьединить со скриптом, который разбирается с куями, и этот скрипт будет универсальным.
Не судите строго.
Спасибо dr_magnus за совет насчет тегов в своем скрипте
Спасибо за внимание.
UPD: Обновил, так как нашел кучу багов + спасибо Kaener за помощь.
UPD2:Исправил еще немного багов, теперь все должно работать хорошо. Обьявил это версией 0.50а =)
UPD3: Убрал временные файлы, добавил выборочные параметры для lame.


Тэги: bash flac mp3 скрипт скрипты
+ 7 -
Похожие Поделиться

goblinyara 10.06.2010 21:49 #
+ 1 -
эмм... у вас голубой цвет почему-то розовый=)
NickNill 10.06.2010 22:20 #
+ 1 -
а мне голубой не понравился =)
поэтому добавил единичку)
karlicos 10.06.2010 22:45 #
+ 1 -
Советую добавить чтобы help выводился при запуске без параметров) А то я попробовал - началось какое-то ололо)
NickNill 10.06.2010 23:59 #
+ 0 -
думал над этим, могу исправить)
NickNill 11.06.2010 00:03 #
+ 0 -
сделал =)
Kaener 11.06.2010 01:24 #
+ 2 -
Есть некоторые вопросы/предложения:

А у Вас точно работает скрипт, для варианта когда не указана директория «входящих» файлов?
Просто, по-моему вот эта строчка:files=`find "$dir_name" -name "*.flac"` не будет работать: из-за того что переменная $dir_name не инициализирована до этого момента в кавычках будет NULL, на что find отреагирует матом.

Если же убрать кавычки (или если был указан путь к папке), то появляется баг/фича — поиск осуществляется рекурсивно, а значит сконвертируются файлы внутри всех подкаталогов. Имхо, надо добавить параметр «-maxdepth 1», чтобы избежать этого.

Также проблема может возникнуть со строкой 137 — т.к. пользователь может указать путь к папке для вывода со слэшем в конце (что обычно бывает при автодополнении), то получится «~/%some_dir%//$mp3name» и lame выдаст ошибку. Может помочь пропускание полученного пути через sed вот так$dir_out=`echo $dir_out | sed s/'\/$'//`Правда не знаю насколько правильно данное выражение — мой скилл творить regexp’ы совсем плохо прокачан.

И ещё одно: если указать параметры по умолчанию, до разбора полученной строки, т.е. после «#some colors» дописать что-то вроде #default settings
dir_name="./"
dir_out="~/320"
bitrate="320"
rate="cbr"
то можно будет убрать проверки в 106-116 строках, а как бонус — пользователю скрипта будет удобнее менять дефолтные настройки. =)
NickNill 11.06.2010 01:37 #
+ 0 -
спасибо, не досмотрел немного. У меня сначала была эта баг\фича, но потом я добавил кавычки из-за других багов. Надо добавить проверку просто еще одну. Сейчас позанимаюсь исправлением накопившихся багов =)
Kaener 11.06.2010 01:59 #
+ 1 -
Да, бывает. Кстати, спасибо за топик — пнули меня таки более-менее разобраться с sed и awk. =)

P.S. И ещё одно дополнение: по-моему, в строке 85 у Вас опечатка.
NickNill 11.06.2010 02:24 #
+ 0 -
нету =)
NickNill 11.06.2010 01:39 #
+ 0 -
насчет начала строки.. а я как то и не подумал сделать так =) ща изменю
NickNill 11.06.2010 02:50 #
+ 0 -
что интересно, если задаётся mkdir -p "~/320", то и создается ~/320, а не 320. Даже если там и кавычек нету. Не знаю что придумать =(
cubiccat 11.06.2010 08:32 #
+ 1 -
mkdir -p "$HOME/320"
NickNill 11.06.2010 16:32 #
+ 0 -
спасибо!
orkaan 13.06.2010 22:00 #
+ 0 -
CUE (flac, ape) -> mp3.

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн