Видео ролики бесплатно онлайн

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

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

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

07.06.10 01:32 dr_magnus

Скрипты на bashПерекодирование аудиокниг

Я уже рассуждал на тему аудиокниг.
Кратко поясню для тех, кто пропустил - я не понимаю, зачем хранить аудиокниги в битрейте более 128. На слух ведь всё равно не различишь, а места занимает больше. Вот я и решил свою коллекцию перегнать в битрейт 96.
И заодно я решил проблему с переносом тегов (большое спасибо Iliander'у).
Кому интересно - под кат.

Я написал небольшой скрипт, который, если запустить его в папке с аудиокнигой, создает в ней директорию 96 и перекодирует туда найденные МР3-файлы с сохранением тегов.
Сам скрипт:
1
2
3
4
5
6
7
8
9
10
11

#!/bin/sh
mkdir 96
find -iname '*.mp3' | while read input_file;
do
    TITLE=$(mid3v2 -l "$input_file" | grep TIT2 | sed s/^TIT2=//)
    ARTIST=$(mid3v2 -l "$input_file" | grep TPE1 | sed s/^TPE1=//)
    ALBUM=$(mid3v2 -l "$input_file" | grep TALB | sed s/^TALB=//)
    lame -b 96 --cbr --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" "$input_file" "./96/$input_file";
done
 

И немного пояснений:
mid3v2 (входит в пакет mutagen) умеет показывать МР3-теги в таком виде:
IDv2 tag info for b01_00_00.mp3:
TPE1=Сергей Лукьяненко
TALB=Ночной дозор

grep'ом мы выдергиваем отсюда нужный нам тег, а sed'ом отрубаем ненужную часть.

Буду признателен, за любые дополнения. У меня не реализованы следующие вещи:
- Передача каталога как аргумента (никак не могу побороть проблемы с пробелами в именах);
- Удаление файлов после перекодирования (ну это не сложно);
- Переименование файлов согласно тегам (смотрю в сторону eyeD3)

UPD:
Немного подправил скрипт (спасибо за подсказки в коментариях), теперь умеет принимать имя каталога и не боится пробелов.
1
2
3
4
5
6
7
8
9
10
11
12
13
14

#!/bin/sh
dir_name="${1}"
cd "${dir_name}"
mkdir 96
find -iname '*.mp3' | while read input_file;
do
    TITLE=$(mid3v2 -l "$input_file" | sed -n 's/^TIT2=//p')
    ARTIST=$(mid3v2 -l "$input_file" | sed -n 's/^TPE1=//p')
    ALBUM=$(mid3v2 -l "$input_file" | sed -n 's/^TALB=//p')
    lame -b 96 --cbr --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" "$input_file" "./96/$input_file";
#   lame -b 96 --cbr --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" "$input_file" "./96/$ARTIST - $TITLE.mp3";
done
 



xT 07.06.10 03:01 # +3
Места занимает больше - где? на винте?!
Во времена терабайтных ЖД пора уже перестать задумываться о освобождении пары десятков мегабайт.
Если речь идёт про плеер, то не все ли равно сколько там одновременно книг находится?! Ты же их как музыку шафлом не слушаешь. Прочитал\прослушал с десяток - заменил на следующие.

p.s. перенес в скрипты и добавил теги
dr_magnus 07.06.10 09:28 # +2
ну если бы речь шла именно о паре дестяков мегабайт, то можно было бы не заморачиваться. но даже пережатие 128 в 96 уже экономит раза в полтора-два места, а это пара сотен мегобайт. для меня это все еще актуально.
xT 07.06.10 12:00 # +0
Запиши на болванку прочитанные книги
dr_magnus 07.06.10 12:52 # +0
что-то не очень я болванкам доверяю
xT 07.06.10 14:26 # +3
отправь сам себе по гуглопочте : )
m0nhawk 07.06.10 23:11 # +-1
Что-то я не доверяю Гуглу с его доступностью 99.9%…
cppmm 07.06.10 11:11 # +0
А у меня на нетбуке 4 гига памяти постоянной. И SD-карточка на два гига. И тоскать с собой террабайтный внешний винт я не хочу. А послушать иногда чего-нибудь, сидя в кафешке с вайфаем за чашечкой кофе можно. Так что, автору таки респект.
xT 07.06.10 11:59 # +0
И ты носишь с собой 20 аудиокниг?
cppmm 07.06.10 12:03 # +0
Иногда, да. Заливаю, к примеру, цикл книг какой-нибудь целиком и пока не прослушаю, валяется. Ну и плюс, кроме аудиокниг у меня есть ещё много разных вещей, чтобы туда складывать.
xT 07.06.10 14:27 # +0
Зачем целиком цикл? : ) не рационально
dr_magnus 07.06.10 14:58 # +0
а по моему очень даже. иногда нет возможности добраться до основного хранилища, а так - цикл всегда под рукой.
xT 07.06.10 15:00 # +1
не - не, зачем хранить книги из цикла, которые уже прослушал?!
haku 08.06.10 04:38 # +0
зачем хранить книги? о_О
xT 08.06.10 09:06 # +0
имелся ввиду нетбук
nemckoff 07.06.10 03:36 # +4
Вы серьёзно? Когда винты на терабайты стоят сущие копейки перегонять 128 в 96? :D
Но дело полезное вот в чем. Можно хранить музыку в lossless или mp3 с битрейтом 320, но для переносного плеера (который не понимает всякие .ape, .flac) перекодировать.
dr_magnus 07.06.10 09:28 # +0
копейка рубль бережет, а по поводу места я отписался выше.
lava 07.06.10 09:34 # +6
зачем тут ещё и греп, если уже сед есть?
sed -n 's/^TPE1=//p ;'
dr_magnus 07.06.10 09:58 # +4
наверное плохо знаю матчасть :-)
Iliander 07.06.10 10:10 # +2
Аж чаем подавился, когда свой ник в RSS увидал.
А скрипт, кстати, хороший, полезный. Помимо, собственно, аудиокниг (которые я слушаю весьма редко, читать больше нравится), помнится, пока не убил свой MP4-плеер, возился с перекодировкой аудио под него. На тот момент так и не решил, как можно сохранять теги — опыта недоставало.
ariessoft 07.06.10 10:41 # +3
Музыку с компьютера перекидываю на плеер таким вот скриптом на питоне (lame_tag):

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
#!/usr/bin/env python
import os
import eyeD3
import optparse

outdir = "/media/T10/"

parser = optparse.OptionParser()
(options, args) = parser.parse_args();

for f in args:
  dname = os.path.dirname(f)
  bname = os.path.basename(f)
  if not os.path.exists(outdir+dname):
    os.makedirs(outdir+dname)

  print "Imput file = " , f
  outF = outdir + dname + "/" + bname
  print "Output file = ", outF
 
  if os.path.isfile(f) and not os.path.isfile(outF):
    if eyeD3.isMp3File(f):
     
      tag = eyeD3.Tag()
      tag.link(f)

      tnum = tag.getTrackNum()

      trackNum = tag.getTrackNum()[0];
      trackTotal = tag.getTrackNum()[1];

      artist = tag.getArtist()
      album = tag.getAlbum()
      title = tag.getTitle()
      genre = tag.getGenre()
      date = tag.getYear()
      images = tag.getImages()


      for img in images:
        img.writeFile(outdir + dname, bname + ".jpg")

      print "Tags =", trackNum, trackTotal, artist, album, title, genre, date, images  

      print "Start lame"

      os.spawnv('P_WAIT','/usr/bin/lame',['lame','-V5',f,outF])

      print "Tagging..."

      tag2 = eyeD3.Tag()
      tag2.link(outF,eyeD3.ID3_V2)

      tag2.setVersion(eyeD3.ID3_V2_3)
      tag2.do_tdtg=False

      tag2.setTextEncoding(eyeD3.UTF_16_ENCODING)

      tag2.setTrackNum((trackNum, trackTotal));
      tag2.setTitle(title)
      tag2.setArtist(artist)
      tag2.setAlbum(album)
      tag2.setGenre(genre)
      tag2.setDate(date)
     
      if os.path.exists(outdir+dname+"/"+bname+".jpg"):
        tag2.addImage(3,outdir+dname+"/"+bname+".jpg", u"")
        os.remove(outdir+dname+"/"+bname+".jpg")

      tag2.update(eyeD3.ID3_V2_3)

      print "OK"

Копируются теги и даже альбомная картинка.
Запускаю в папке с нужной музыкой командой:
find . -name "*.mp3" -exec lame_tag {} \;

Думаю немного переделать и все ваши задачи решаться
lava 07.06.10 11:25 # +0
имхо, логичнее использовать -iname. Разве только всегда следить за регистром.
Daria 07.06.10 15:04 # +2
Буду признателен, за любые дополнения. У меня не реализованы следующие вещи:
- Передача каталога как аргумента (никак не могу побороть проблемы с пробелами в именах);

используй экранирование или же заключай путь в кавычки

- Переименование файлов согласно тегам (смотрю в сторону eyeD3)

mv "$input_file" "$ARTIST - $TITLE.mp3"
dr_magnus 07.06.10 15:15 # +0
mv "$input_file" "$ARTIST - $TITLE.mp3"

спасибо

а вот с пробелами никак не получается - find постоянно ругается на пробелы
Iliander 07.06.10 15:50 # +0
эм…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

if [[ -n "$1" ]] ; then
        WHERE="${1}"
else
        WHERE="."
fi

mkdir "${WHERE}/96"

find "${WHERE}" -iname '*.mp3' | while read input_file;
do
    TITLE=$(mid3v2 -l "$input_file" | grep TIT2 | sed s/^TIT2=//)
    ARTIST=$(mid3v2 -l "$input_file" | grep TPE1 | sed s/^TPE1=//)
    ALBUM=$(mid3v2 -l "$input_file" | grep TALB | sed s/^TALB=//)
    lame -b 96 --cbr --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" "$input_file" "${WHERE}/96/$ARTIST - $TITLE.mp3";
done
xT 07.06.10 17:30 # +0
Мне одному заметна повторяемость и желание обернуть в функцию?)
Iliander 07.06.10 17:46 # +0
Может и не одному, но я ничего такого тут не вижу, что можно было бы оборачивать в функцию и в этом был бы смысл. :)
dr_magnus 07.06.10 17:33 # +0
не совсем - теперь уже косяк проявился в этой конструкции:

lame  -b 96 --cbr  --tt "$TITLE"  --ta "$ARTIST"  --tl "$ALBUM"  "$input_file" "${WHERE}/96/$ARTIST - $TITLE.mp3";

Can't init outfile '/media/sdc1/Music/Audio Books/Лукьяненко Сергей/Цикл "Дозоры"/02 - Дневной дозор/96//media/sdc1/Music/Audio Books/Лукьяненко Сергей/Цикл "Дозоры"/02 - Дневной дозор/00_00_04.mp3'

а использовать переименование выходного файла не стал, т.к. нету тега TITLE.
выкрутился следующим образом
1
2
dir_name="${1}"
cd "${dir_name}"

а все остальное без изменений
Iliander 07.06.10 17:45 # +0
Can't init outfile '/media/sdc1/Music/Audio Books/Лукьяненко Сергей/Цикл "Дозоры"/02 - Дневной дозор/96//media/sdc1/Music/Audio Books/Лукьяненко Сергей/Цикл "Дозоры"/02 - Дневной дозор/00_00_04.mp3'

гм… Так и думал, что там без косяков не обойдется, но т.к. тестил его по-быстрому на альбоме из своей дискографии с аккуратными тегами — результатом удовлетворился и оставил.
выкрутился следующим образом

Тогда вставь хотя бы проверку на наличие "$1", чтобы скрипт был немного более универсальным. А то ругаться в консоль будет.
А так, в принципе, решение хорошее, даже лучше моего — KISS в действии :-)
Daria 08.06.10 00:59 # +-4
кавычки в имени файла, о боже!
lwilis 08.06.10 02:16 # +2
В XX|-ом веке живем. Привыкайте.
Daria 09.06.10 02:55 # +0
не знала, что в XXI веке сарказм променяют на кавычки. верните мне время назад!

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 124)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 2201 из 181 города)
            Топ пользователей Топ блогов
            В сети: doraneko, eva, dfx

            Новенькие: ingmar, moler, sayrink, nupam, 0xED
            welinux.ru

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

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


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

            Online video HD

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

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

            Full HD video online

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

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

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