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

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

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

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

dfx 06.03.2010 18:40

СкриптыБыстрая перекодировка музыки в единый формат

1.Имеется музыкальная коллекция, в которой музыка в разных форматах - ogg, flac, mp3.
2.Имеется смартфон от Нокии, плеер которого играет только mp3, wav и amr с midi.
3.А ещё имеется желание быстро закидывать музыку на самтрфон, не проверяя формат музыки и не заморачиваясь с перекодировкой.

Этих трёх пунктов хватило, чтобы написать небольшой скрипт на Python, который будет делать всё это за меня. Мне лишь надо закидать нужные папки с музыкой на карту памяти и запустить там этот скрипт.

  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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!python
#coding:utf8

__author__ = 'der_FeniX<[email protected]>'
__version__ = '0.4'
__doc__ = """
Скрипт перекодировки аудиофайлов (можно и видеофайлы, если подправить
параметры для ffmpeg'а и список расширений), найденных в текущей
директории и всех её поддиректориях, если есть необходимость в
перекодировке (формат отличается от необходимого) с возможностью
перемещения перекодированных и копирования не нуждающихся в перекодировании
файлов в указанную папку.
"""

import os
from re import sub
from shutil import copy as shcopy
from sys import argv,exit
from string import atoi

dir=os.getcwd()#Текущая директория
#Расширения файлов, которые надо будет перекодировать
avail_exts = (
'.m4a',
'.ogg',
'.flac',
'.ape',
'.wma',
'.wav',
)
#В какой формат перекодировать
ext = 'mp3'

tmp_dir = '/tmp/2mp3'
bitrate = 256 #Битрейт по умолчанию
mode = 'new_dir' #По умолчанию конвертация происходит во временную папку
target_dir = False
dry_run = False

#Обработка параметров коммандной строки
if len(argv) &gt; 1:
k = 0
for arg in argv:
k = k + 1
if arg == '-b': #Указан битрейт
if len(argv) &lt; k+1:
print "Необходимо указать значение битрейта"
exit()
else:
bitrate = atoi(argv<k>)
elif arg == '-h' or arg == '--help': #Справка
print """%s
Автор: %s Версия: %s
Использование: %s <-b bitrate> <-h|--help> <-c> <-t target_dir> <-dry_run>

-b bitrate — при перекодировании использовать битрейт равынй bitrate
-h, --help — краткая справка по использованию
-c — работать в текущей дирректории. Все файлы будут перекодироваться рядом с оригиналами, а оргиналы удаляться. Без этого параметра файлы будут кодироваться во временную директорию
-t target_dir — директория, в которую будут перемещены перекодированные файлы и скопированы файлы, не нуждающиеся в перекодировании
-dry_run — тестовый запуск. Никаких изменений производиться не будет, но будет показан ход выполнения операций и все действия, которые должны будут выполниться с указанными параметрами
"""%(__doc__, __author__, __version__, argv<0>)
exit()
elif arg == '-c':
mode = 'current_dir' #Работать в текущем каталоге
print "Внимание! После конвертации исходные файлы будут удалены!"
elif arg == '-t':
#Директория, в которую будут скопированы файлы после конвертации
if len(argv) &lt; k+1:
print "Необходимо указать целевую дирректорию"
exit()
else:
target_dir = argv</k><k>
elif arg == '-dry_run':
dry_run = True




#Параметры для ffmpeg
ffmpeg_cmd = ' -i "%s" -ab %dK "%s"'


print "Используется битрейт %dКб/с"%bitrate
print

def recursiveLoadFileNames(path, m = False):
list =

#Проходим рекурсивно по всем вложенным папкам
for root, dirs, files in os.walk(path):
for file in files: #Все найденные файлы
if not m:
if not file.endswith('.' + ext) and file.endswith(avail_exts): #если они не mp3
list.append(os.path.join(root, file)) #собираем в список
elif mode == 'new_dir':
if target_dir:
tdir = target_dir
else:
tdir = tmp_dir

newfile = sub(dir, tdir,os.path.join(root, file))
print "Копируем '%s' в '%s'"%(os.path.join(root,file), newfile)
if not dry_run:
shcopy(file, newfile)
else:
list.append(os.path.join(root, file)) #собираем в список

return list

def renamesItAll(filename):
filename_ = sub("'","^", filename)
filename_ = sub('"', '', filename_)
if not filename == filename_ and mode == 'current_dir' and not dry_run:
os.rename(filename, filename_)
filename = filename_
if mode == 'new_dir':
if not os.access(tmp_dir, 4):
# try:
os.makedirs(tmp_dir)
# except:
# pass
filename_ = sub(dir, tmp_dir, filename)

filename_ = sub("\.<a-za-z0-9>*$", '.' + ext, filename_) #Создаём новое имя файла (меняем расширение)

return (filename, filename_)


print
print "Получаем список файлов, нуждающихся в конвертации"
if mode == 'new_dir':
print "а также копируем файлы, не нуждающиеся в конвертации"

print
files = recursiveLoadFileNames(dir) #Получили список всех немп3-шек в текущем каталоге и во всех подкаталогах
print
print "Готово!"
print

#Теперь начинаем обработку всех найденных файлов
for f in files:
f, nf = renamesItAll(f)
#Если есть уже mp3-файл с таким именем - удаляем его.
if (os.access(nf,4)):
os.unlink(nf)

print ("Перекодируем '%s' в '%s'..."%(f, nf))
params = ffmpeg_cmd%(f, bitrate, nf) #Подставляем параметры
if not dry_run:
pipe = os.popen("sh -c 'ffmpeg %s 1>/dev/null 2>&1'" % params) #Запускаем перекодировку
print pipe.read(4096) #Выводим ответы об ошибках ffmpeg'а
print "Готово!"

if mode == 'current_dir':
print "Удаляем оригинальный файл..."
if not dry_run:
os.unlink(f) #Удаляем исходный файл
print "Готово!"

print

print
print
print "Все файлы переконвертированы"
if mode == 'new_dir':
print "и сохранены в %s"%tmp_dir
print
if target_dir and mode == 'new_dir':
files = recursiveLoadFileNames(tmp_dir)
for f in files:
nf = sub(tmp_dir, target_dir, f)
print "Перемещается файл %s в %s"%(f, nf)
if not dry_run:
os.renames(f, nf)
print "Файлы перемещены из %s в %s"%(tmp_dir, target_dir)
try:
os.rmdir(tmp_dir)
except:
print "Не удалось удалить директорию %s. Сделайте это вручную, если необходимо."%tmp_dir

</a-za-z0-9></k>



Тэги:
+ 7 -
Похожие Поделиться

ZogG 06.03.2010 19:28 #
+ 0 -
что за телефон?
dfx 06.03.2010 19:29 #
+ 0 -
5800 XpressMusic
haku 06.03.2010 20:53 #
+ -2 -
Велосипед детектед.
dfx, зачем пытаться пользоваться стандартным плеером (который даже играть папку не умеет)? Используйте наконец православный (пусть и китайский, но с хорошим переводом) TTPod 3.51. Кстати нативный для симбиан, не какая-нибудь там ява.
dfx 06.03.2010 21:01 #
+ 3 -
Во-первых, пусть хоть сто раз велосипед.
Во-вторых, я хочу пользоваться стандартным плеером. Мне он нравится и меня в нём всё устраивает. Мне нужно играть папку, у меня есть исполнители и альбомы. Я их играю. Ну или плейлисты. И для меня единственный недостаток этого плеера только в том, что он мало форматов играет. И я нашёл решение для себя. Если оно никому больше не пригодится (в чём я сомневаюсь - быстро перекодировать все файлы в каталоге и подкаталогах - дело полезное) - так тому и быть. Но если тебе что-то не нужно - то это не значит, что это никому не нужно и/или глупо. Не нужно - не пользуйся.
exelens 06.03.2010 21:21 #
+ 1 -
Во-вторых, я хочу пользоваться стандартным плеером. Мне он нравится и меня в нём всё устраивает.

Полностью разделяю!

И для меня единственный недостаток этого плеера только в том, что он мало форматов играет.

Согласен, ему бы OGG и было бы всё шикарно.

Если оно никому больше не пригодится

Пригодилось =)
booley 06.03.2010 22:00 #
+ 0 -
Что-то я подчеркивание воспринял как ссылку.
Если хотите акцентировать, лучше использовать жирный шрифт или курсив, ИМХО :)
dfx 06.03.2010 22:03 #
+ -1 -
Ок, учту :)
exelens 06.03.2010 22:03 #
+ 1 -
лучше ИМХО
жирный для привлечения внимания,
а курсив для сарказма.
booley 06.03.2010 22:20 #
+ 1 -
Bold лучше использовать для выделения ключевых моментов. Глаз их замечает еще за строчку-две до самого выделенного текста, в отличие от Italic.

Поэтому если писать длинные, объемные, развернутые комментарии и, тем более, посты, ключевые моменты нужно выделять. Ибо в связи со спецификой веба, пользователи стали читать вдумчиво гораздо меньше, стало труднее читать неструктурированный большой текст.

Сарказм, конечно, дело хорошее, но иногда нужно просто выделить определенный текст без особого акцентирования внимания. Поэтому убивать один из четырех основных способов выделения (если честно, забыл английский термин, он на s начинается) и underline> просто на сарказм я считаю иррациональным. Сарказм должен определяться человеком самостоятельно, иначе это похоже на один из эпизодов The Big Bang Theory, где Леонард завел табличку «Sarcasm», в самом деле.

Хотел написать большой комментарий, но что-то не умею я воду по теме гнать. Но некоторые плюсы в теге b вы увидели, да?
exelens 06.03.2010 22:25 #
+ 0 -
Но некоторые плюсы в теге b вы увидели, да?

да
haku 06.03.2010 23:55 #
+ 0 -
Ха, что ж вы все нервные то такие. Вы всегда так на советы реагируете? Это всего-лишь конструктивная критика. Более простой, удобный и логичный способ. С моей точки зрения проще научить мобилку играть ogg, чем перекодировтаь половину муз.коллекции.
Хотите усложнять (писать скрипты) дело ваше. Но не забывайте, что после каждой перекодировки вы теряете в качестве музыки.
dfx 07.03.2010 00:03 #
+ -3 -
Ну уж про качество-то можешь не говорить. Через наушники ты эти потери всё-равно не заметишь.

А вообще, если тебе проще и лучше ставить кучу софта - ставь. Мне проще написать скрипт, чтобы продолжать пользоваться любимым и удобным софтом. Никто ведь не заставляет никого пользоваться моим способом. Другое дело, если бы никто кроме тебя не знал, что можно поставить программу какую-то... но ведь все знают. и раз уж зная это используют другой подход, значит есть на то причины.
Goury 07.03.2010 01:17 #
+ -1 -
после первой-второй перекодировки - может и не заметишъ
но с таким хобби и с удалением оригиналов дело врядли ограничится даже десятком перекодировок
dfx 07.03.2010 01:26 #
+ 0 -
во-первых, никто не собирается кодировать сто раз - перекодируется только один раз - при перемещении на плеер/телефон.
во-вторых, оригиналы никуда не удаляются, если, конечно, не сделать глупость и не запустить его в папке с коллекцией. читай внимательней.
Goury 07.03.2010 12:13 #
+ -2 -
ну я же не запрещаю вам перекодировывать
просто перекодировка по определению негативно влияет на музыку
а человекам, да и другим существам на планете, свойственно по возможности избегать негатива
dfx 07.03.2010 14:11 #
+ -1 -
Хорошо, тогда вообще никакого mp3! Только wav! А то в mp3, знаете ли, качество потеряно.
exelens 06.03.2010 21:20 #
+ 0 -
Велосипед детектед.

Фанатег детектед

зачем пытаться пользоваться стандартным плеером (который даже играть папку не умеет)?

Он умеет всё необходимое.
И да =) Удобно пользоваться плейлистами, а не папками + отлично можно по артистам выбирать.

Используйте наконец православный (пусть и китайский, но с хорошим переводом) TTPod 3.51.

А зачем мне ставить в телефон всякое .. .если стандартное работает отлично?
booley 06.03.2010 21:59 #
+ 0 -
если стандартное работает отлично?

Как мы видим, он не держит OGG, значит не все отлично.

Хотя в целом согласен с dfx
exelens 06.03.2010 22:02 #
+ 0 -
Как мы видим, он не держит OGG, значит не все отлично.

Ещё оно
не ходит за пивом,
не работает за меня,
не даёт корм коту,
не скачивает само торренты...

Всё! байкот ему, да?
booley 06.03.2010 22:21 #
+ 0 -
Мне хватает моего телефона Nokia 2600, который даже не играет музыку и с монохромным дисплеем.
Только SMS/звонки/змейка. Ъ Unix-way.
(Unix-way != Stollman-way)
exelens 06.03.2010 22:31 #
+ 0 -
ключевой момент
Мне хватает


Я же использую камерофон n79
Целыми днями слушаю музыку (по дороге на работу и обратно) и делаю фотки (на работе и на прогулках).

Для меня как раз и важно тыкать музыку. С этим стандартный плеер справляется просто отлично. Сейчас, окружающие меня стали покупать Samsung Galaxy Spica с андроидом... а я потыкал... оно тормозит ппц... и музыку с большим битрейтом лагает =)
booley 07.03.2010 04:39 #
+ 1 -
Можно заюзать отдельный девайс для музыки (ноутбук). Хоть iPod, хоть Archos с RockBoxом. Но тогда придется с собой много таскать, так что я согласен с тобой.

Но все равно, моя кофеварка не обязана стирать мне штаны
dfx 06.03.2010 22:02 #
+ -1 -
Ну, отсутствие поддержки форматов - по сути не является показателем качетсвенности работы %) Всё, что он умеет делать - он делает хорошо. А то, чего не умеет - ну не будем копировать напрямую, а только через перекодировку, ничего страшного :)
booley 07.03.2010 04:42 #
+ 0 -
haku detected!
Daria 06.03.2010 21:32 #
+ 3 -
может быть разумнее копировать файлы разрозненных форматов сначала куда либо в /tmp/ а уж потом скидывать результат перекодировки на карту?

думаю, что так быстрее, позволит избежать нехватку места на карте, и ещё более бережнее позволяет использовать карту.
dfx 06.03.2010 21:56 #
+ 0 -
Это личное дело каждого и сути не меняет. Я так написал, потому что сам так сделал, когда писал этот скрипт и мне так было удобно. Хотя, конечно, через папку-посредника юудет лучше.
Можно будет даже расширить скрипт в этом плане, чтобы он сам потом ещё и перекидывал сконвертированное в указанную папку из временной %)
booley 06.03.2010 21:58 #
+ 1 -
Можно даже сделать скрипт для Наутилуса, типа "Кинуть на телефон" :)
dfx 06.03.2010 22:00 #
+ 0 -
да, вариант... спасибо за идею ;)
dfx 06.03.2010 23:11 #
+ -1 -
Скрипт немного обновлён.
Daria 06.03.2010 23:58 #
+ 0 -
мотивирует начать изучать питон.
dfx 07.03.2010 00:05 #
+ 0 -
Если это ты про себя, то начинай - не пожалеешь! :) Очень приятный и удобный язык. Я сам только месяца два как всерьёз им занялся, но уже тащусь от разработки на нём (если это, конечно, можно назвать разработкой) :)
Goury 07.03.2010 01:18 #
+ -1 -
а на с++ слабо ?
dfx 07.03.2010 01:24 #
+ 0 -
С++ я не осилил пока, тока азы. Но, имхо, для задач, подобных этой, C++ не нужен. Это всё-равно что гаубица для дуэли...
Goury 07.03.2010 12:16 #
+ -1 -
зря ты так. с++ не гаубица, а просто особо точный скальпель
а питон тут как топор - рубанул и ня, кавай
а скальпелем придётся повырезать, конечно
но зато можно вырезать произведение искусства
очень советую освоить, ибо с++ гораздо проще с точки зрения синтаксиса, но предоставляет гораздо более широкий функционал, ввиду которого сильно развивается алгоритмическое мышление, так необходимое программисту
dfx 07.03.2010 14:13 #
+ 0 -
Каждый инструмент для своего предназначен.
Скальпель так скальпель. Но тогда наш случай - простая царапина на руке. А ты уже резать собрался, хотя достаточно зелёнкой помазать.
Goury 07.03.2010 18:45 #
+ -2 -
вы предлагаете топором намазывать зелёнку?
О.о
booley 07.03.2010 17:54 #
+ 0 -
Вы видели когда-нибудь гуру топора? С его помощью умельцы делали и делают потрясающие вещи.
Тут все зависит от того, в чьих руках инструмент. Если вы хирург, то скальпель будет удобнее (привычнее), а если нет, то чоуж...

Это еще можно сравнить с молотками/ледорубами в ледолазании. Можно и с ледорубом. Но зачем, когда использование молотка просто приятнее, он входит лучше и держит крепче.
exelens 07.03.2010 18:02 #
+ 0 -
Лучше лазером.
Вон у нас в Питере, дворникам дадут лазеры =) Сосули сбивать.

Срезают лазером сосули,
В лицо впиваются снежины.
До остановы добегу ли,
В снегу не утопив ботины?

А дома ждет меня тарела,
Тарела гречи с белой булой;
В ногах — резиновая грела,
И тапы мягкие под стулом.

В железной бане — две селеды,
Торчат оттуда ложа с вилой.
Есть рюма и бутыла с водой,
Она обед мой завершила.

Я в кружу положу завары,
Раскрою «Кобзаря» Шевчены —
Поэта уровня Петрары
И Валентины Матвиены.
booley 07.03.2010 18:18 #
+ 1 -
Ты СОВЕРШЕНННО не понимаешь в чем суть ледолазания. Ледолазание это не альпсборы, "о, чуваки, я получил значок альпиниста, лол". Ледолазание это не псевдонадежное вкручивание ледобуров. Ледолазание это не скалолазание, сплав или восхождение. Ледолазание это такая штука, когда люди могут побыть чудовищами - сильно бьющими молотки в лед, непрощающими ненатянутые кошки, уничтожающими рельеф гадами, которыми они на самом деле и являются.

Скоро лед растает, а мы лазим. Ледобуры вылетают через двадцать минут на солнце, а мы лазим.

Парень упал и сломал руку, а мы лазим и хотим еще. Риск, горы, лед, воздух, мы лазим. Кошки Salewa, ледорубы Эдельвейс, тупые берцы - а мы лазим и просим еще. Мы бездушно лазим по разным местам, долбать лед - наша стихия, мы - истинное лицо ледолазания.
dfx 07.03.2010 18:22 #
+ 0 -
И тут Остапа понесло... =)
exelens 07.03.2010 18:23 #
+ 1 -
=))) пора отказываться от травы
Goury 07.03.2010 18:48 #
+ -1 -
мм...
думается они просто сами без зрения останутся и прохожих переслепят
а слегка подтаявшая сосуля станет достаточно прозрачной для него
Goury 07.03.2010 18:46 #
+ -1 -
топор тяжелее и занимает больше места
а так против него я ничего не имею, кстати
просто я фанат компактности и оптимизаций
booley 07.03.2010 04:35 #
+ 2 -
Goury, предлагаю написать вам на с++. Или с. Да хоть на фортране, на любом компилируемом языке. Слабо?

Это я к чему — советовать и троллить (а еще минусовать стартера топика ;) все горазды. Но стоит видеть разумное решение (юзать питон) и не предлагать заведомо не лучшее решение. Я еще могу понять haku, с его альтернативным путем решения той же проблемы, что у автора поста, но вас, в данном случае, я не понимаю. Да, я поставил вашему комментарию минус.
Goury 07.03.2010 12:17 #
+ -1 -
не забывайте пожалуйста, что в каждой шутке есть доля шутки
dfx 07.03.2010 01:17 #
+ 0 -
Во кто-то (даже знаю кто) разошёлся - заминусовал %) На обиженных воду возят.
booley 07.03.2010 04:37 #
+ 0 -
(даже знаю кто)

=Слоупок
Я все пропустил.
dfx 07.03.2010 01:29 #
+ 0 -
Кто подскажет как и чем проще будет организовать перенос тегов при конвертации? а то ffmpeg не хочет сам этого делать... %)
Goury 07.03.2010 12:20 #
+ -1 -
с++ =)
Daria 08.03.2010 03:37 #
+ 1 -
я так делала, через mp4info их считывала, писала в файл, а потом через metaflac записывала. но там всё в другую сторону нежели у тебя работает.

http://welinux.ru/post/1943/
dfx 08.03.2010 12:02 #
+ -1 -
Ну, учитывая, что скрипт можно использовать для конвертации в любой формат, поддерживаемый ffmpeg (а если он не поодерживает, то заменить его чем-то дргуим можно быстро), то пригодится всё-равно :) спасибо :)
dicson 16.05.2010 15:30 #
+ 0 -
python mutagen как вариант. mutagen В репозиториях обычно присутствует.
dfx 04.06.2010 09:52 #
+ 0 -
Запоздалое спасибо :) Потыкаю :)
dicson 04.06.2010 11:11 #
+ 0 -
Не за что. Там правда для каждого формата свой модуль,а это небольшой гемор
dimqua 07.03.2010 04:20 #
+ 1 -
Use OGGPlay, Luke! И да, зачем вообще нужна музыка в mp3, когда есть кошерные Flac и WavPack ?
cppmm 04.06.2010 11:58 #
+ 0 -
Мой плеер не умеет кошерные, а может только mp3 и wav.
booley 07.03.2010 04:41 #
+ 0 -
Позабавили два минусующих, которые минусовали комментарии dfx, насколько я вижу, даже без их прочтения. Но где-то часам к полчетвертого они отправились спать.

Парни, вы подняли мне настроение с утра, спасибо!
exelens 07.03.2010 07:23 #
+ 0 -
Не корми. Сам знаешь кого.
booley 07.03.2010 17:55 #
+ 1 -
С утра меня забавило со всего, что читалось :-)
dimqua 07.03.2010 04:48 #
+ 0 -
Вывод? Карма не нужна.
booley 07.03.2010 04:56 #
+ 0 -
Она ни на что не влияет. А вообще, нужна. Взгляни на muhas. Дельные вещи обычно говорит, вот и карма растет :)
exelens 07.03.2010 07:23 #
+ 0 -
Не обсуждается.
dfx 09.03.2010 13:03 #
+ -1 -
Готова новая версия скрипта, с новым функционалом. Куда лучше выкинуть её? Здесь же обновить или в новую тему?
cppmm 04.06.2010 11:58 #
+ 0 -
Обнови с пометкой UPDATE: добавлены плюшки такие-то.
dfx 04.06.2010 12:09 #
+ 0 -
Обновлял, дважды. Дописывал UPD: в конце... Всё обрезано и наполовину убито оказалось через месяц :)
Сделаю сохранение тэгов - обновлю скрипт и дополню описание.

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

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


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

Online video HD

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

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

Full HD video online

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

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

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