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

Смотреть жесткое видео

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

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

27.11.09 14:16

Dariaконвертируем ALAC 2 FLAC

Мой второй бешскрипт.

Мне очень нравится lossless формат FLAC. И опять главная медиатека русского сегмента сети мне чем-то не угодила. Дело в том, что иногда lossless в ней встречается хоть и отдельными файлами (для каждого трека), но в формате ALAC. Это проприетарный формат с яблочным запахом. К сожалению или же к радости, его переваривает EasyTag, которым я активно пользуюсь (кстати, Exfalso с ним работает). Это подтолкнуло создать меня скрипт для конвертирования ALAC во FLAC.

Добрый google подсказал мне решение: библиотеки ffmpeg позволяют конвертировать почти всё во всё. Я уже было хотела ограничится однострочником вроде ffmpeg -y -i inputfile.alac outputfile.flac, но увы, не всё так просто - ffmpeg не может писать тэги во FLAC. Хотя возможно это скоро изменится, разработчики писали, что "уже работают" над патчем. Чтобы не ждать не скорое скоро, я написала свой костыль.

понадобятся пакеты ffmpeg, mpeg4ip-utils, flac. Я использую Ubuntu, и установила их вот так:

$ sudo apt-get install ffmpeg mpeg4ip-utils flac


на этом подготовка заканчивается, вот листинг:

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
#!/bin/bash
# alac2flac 0.1
# convert ALAC files to FLAC with keeping tags

# немножко цветов, я люблю цветы
RED='\e[1;31m'
BLUE='\e[1;34m'
NC='\e[0m'      # no color

f_flag=0        # флаг параметра переименования,             0 = флаг не поставлен
d_flag=0        # флаг параметра удаления входящего файла,   0 = флаг не поставлен  

# функция, которая оповещает об использовании и выходит с EX_USAGE
usage(){
        echo "alac2flac version 0.1"
        echo
        echo "usage: alac2flac [OPTION] INPUTFILE"
        echo
        echo "options:"
        echo -e "  -f   rename output file to '"$BLUE"TRACKNUMBER - ARTIST - TITLE.flac$NC'"
        echo "  -d      delete input file"
        exit 64         # EX_USAGE
}

# функция, которая обрабатывает переменные связанные с файлами
setFileVars(){
        INPUTFILE=$1
        OUTPUTFILE=$(echo $INPUTFILE | sed "s/.m4a$/.flac/i")
        FILEPATH=${INPUTFILE%/*}

        # а если в аргументе INPUTFILE нет родительских директорий?
        if [ "$FILEPATH" = "$INPUTFILE" ]
                then
                        FILEPATH=".";
        fi
}

# начнём пилить всё, что пришло с командной строки.
if (($# > 0))                           # если существуют аргументы,
        then
                while [ $# -gt 1 ]      # пока не останется лишь один, машина будет трудится.
                do
                        case $1 in
                                -f)     f_flag=1;;      # аргумент -f, поставим флаг
                                -d)     d_flag=1;;      # аргумент -d, поставим флаг
                        esac
                        shift                           # сдвинем аргументы $2->$1, $3->$2
                done
               
                if [ -f "$1" ]                          # если "последний" аргумент файл,
                        then                                   
                                setFileVars "$1"        # обрабатываем.
                        else                            # нет? намекаем, как этим пользоваться.
                                echo -e "Bad news, Harry! There are$RED no file in arguments!$NC"
                                echo
                                usage
                fi
        else
                usage                                   # матёрый пользователь напросился на помощь
fi

echo $INPUTFILE

# собсвенно, перекодировка произходит в этой строке
ffmpeg -y -i "$INPUTFILE" "$OUTPUTFILE" 2> /dev/null

ffmpeg_EXITCODE=$?

if (($ffmpeg_EXITCODE))
        then
                # если мы облажались, это отличное место для лога
                #echo $INPUTFILE >> failtoconvert.log
                echo -e "Bad news, Harry! Snape spelled Levicorpus, ya$RED ffmpeg goes wrong! ${NC}"
                exit $ffmpeg_EXITCODE
fi

rm -f "${INPUTFILE}".tag ; rm -f "${INPUTFILE}".tmp

# тэги FLAC и их друзья из лагеря ALAC
FIELDS='TITLE Name
ARTIST Artist
ALBUM Album
DATE Year
TRACKNUMBER Track
GENRE Genre'


# прочитаем все ALAC тэги и сохраним их в пустой файл
mp4info "$INPUTFILE" | tail --lines=+5 > "${INPUTFILE}".tmp

# это разделитель строки, ещё его называют line splitter
IFS=$'\n'

# отпарсим пары, создадим временый файл с нужными нам тэгами
for Var in $FIELDS              # в первой итерации Var будет иметь значение "TITLE Name"
        do
                FLACTAG=$(echo $Var| sed "s/\ .*//")            # разделяем эту сладкую парочку
                ALACTAG=$(echo $Var| sed "s/.*\ //")
                TAG=$(sed -n "s/^ $ALACTAG: //p" "${INPUTFILE}".tmp)
                eval $FLACTAG='"$TAG"'                          # магия, да?
                echo $FLACTAG="$TAG" >> "${INPUTFILE}".tag      # сохраняем в файл

        done

# подчистим TRACKNUMBER
TRACKNUMBER=$(printf %02d $(echo $TRACKNUMBER | sed "s/\ .*//"))

# импортируем во  FLAC напарсенные тэги из файла
metaflac --import-tags-from="${INPUTFILE}".tag "$OUTPUTFILE"

# подчистим
rm -f "${INPUTFILE}".tag ; rm -f "${INPUTFILE}".tmp

# код для параметра -d, чтоб удалить файл на входе
if (($d_flag))
        then
                rm -f $INPUTFILE       
fi

# код для параметра -f, чтоб переименовать файл на выходе.
if (($f_flag))
        then
                mv "$OUTPUTFILE" "$FILEPATH/$TRACKNUMBER - $ARTIST - $TITLE.flac"
                echo -e "$FILEPATH/$TRACKNUMBER - $ARTIST - $TITLE.flac   ${BLUE}..done! ${NC}"
        else
                echo -e "$FILEPATH/$OUTPUTFILE ${BLUE}..done! ${NC}"
       
fi

exit 0


Скопируйте скрипт в нужное вам место, через chmod +x дайте права на запуск и используйте, как хотите!
ps: Всяческие предложения и мнения приветствуются



ner_uto 27.11.09 19:27 # +1
# немножко цветов, я люблю цветы

Порадовало:)
dammer 28.11.09 01:32 # +0
Спасибо, работает отлично, как в прочем первый ваш скрипт.
Daria 28.11.09 08:43 # +1
пробовала этим и прежним скриптом получить инвайт на хабру, увы, даже в песочницу не попало.

=хочется взять и
zivot_je_cudo 30.11.09 10:18 # +0
Тоже несколько раз отправлял статьи в песочницу, в последний раз даже получил инвайт, который был уже активирован. Статья из песочницы сразу же благополучно исчезла, а повторно ее в хабрапесок никто не принял.
Sokoloff 29.11.09 02:13 # +0
Наткнулся тут на такой вот набор питоновских скриптов , сам не пробовал, но судя по документации умеют много чего.

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 96)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 2004 из 153 городов)
            Топ пользователей Топ блогов
            В сети: pumbur

            Новенькие: Niaque, newstoic, atheist, dieformetal, MrPack
            welinux.ru

            В хорошем качестве hd видео

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


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

            Online video HD

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

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

            Full HD video online

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

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

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