Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Работа с Mp3 файлами (http://forum.oszone.net/showthread.php?t=206418)

Vovchik1900 08-05-2011 12:54 1672432

Работа с Mp3 файлами
 
Здравствуйте.

Дело вот в чем:
допустим в папке лежат мп3 файлы. Их примерно 10-15 (может больше). В другой папке лежат картинки. Тоже 10-15 (может больше). *.jpg файлы, разные.
В чем задача:
Как сделать программу, чтобы она поочереди добавляла к мп3 файлам картинки. То есть прописывала в тег к мп3 файлу.
Алгоритм примерно такой: к первому мп3, первую картинку---положил в третью папку, ко второму мп3, вторую картинку---положил в третью папку и так далее до конца. Чтобы потом при воспроизведении можно было видеть эту картинку в плеере как обложку диска.

Я нашел команды на С++. Могу дать ссылки. Понимаю, что тут должен быть цикл, но сделать не могу. Вообще можно же такое не только на С++ написать? Помогите пожалуйста с кодом. Если не трудно.

BlackEric 08-05-2011 18:39 1672640

Возьмите готовую программу.
Например посмотрите здесь: http://forum.oszone.net/thread-201713.html

Vovchik1900 08-05-2011 19:53 1672675

Спасибо конечно. Я бы все-таки хотел за одно посмотреть как это работает. В готовом виде. Поэтому и прошу код. А так, да вы правы у меня надо мноого файлов обработать.))

Iska 08-05-2011 19:56 1672679

Vovchik1900, поясните, какой из ID3 тэгов будет использоваться для:
Цитата:

Цитата Vovchik1900
добавляла к мп3 файлам картинки. То есть прописывала в тег к мп3 файлу. »

и какие программы для воспроизведения сие понимают.

Vovchik1900 08-05-2011 20:07 1672690

Iska,

Мой медиа плеер на нокии)) А если серьезно, то аимп, винамп, винмедиа плеер. Или я что-то не так понял? Команды для работы с *.jpg файлами нашел в ID3Lib 3.05.

Iska 08-05-2011 20:11 1672695

Цитата:

Цитата Vovchik1900
Или я что-то не так понял? »

Не Вы, а я. Потому и спрашиваю. В какой именно тэг:
Цитата:

Цитата Vovchik1900
прописывала в тег к мп3 файлу »

?

Vovchik1900 09-05-2011 06:37 1672889

Цитата:

Цитата Iska
В какой именно тэг »

Я не знаю как это происходит. Может и не в тег прописывается.
Знаю, что такое как мне надо может делать аимп. Полностью *.jpg файл добавляет к мп3 файлу. Например был мп3 размером 1 мегабайт, а jpg 500 килобайт. В аимпе соединишь и получишь мп3 файл размером 1.5 мегабайт. Я это делал через редактор тегов в аимпе. Поэтому и подумал, что в тег к мп3 файлу прописывается.

А про прогу спрашиваю, потому, что надоело в аимпе много кнопок тыкать. Надо около 1000 мп3 файлов обработать. Положил их в одну папку, картинки в другую, запустил прогу, она их соединила (не знаю как), и все.))

Iska 09-05-2011 10:35 1672963

Цитата:

Цитата Vovchik1900
Я не знаю как это происходит. Может и не в тег прописывается.
Знаю, что такое как мне надо может делать аимп. Полностью *.jpg файл добавляет к мп3 файлу. Например был мп3 размером 1 мегабайт, а jpg 500 килобайт. В аимпе соединишь и получишь мп3 файл размером 1.5 мегабайт. Я это делал через редактор тегов в аимпе. Поэтому и подумал, что в тег к мп3 файлу прописывается. »

Хорошо, тогда опишите, как именно Вы это делаете в AIMP.

Vovchik1900 09-05-2011 16:43 1673148

Iska,

В аимпе файлы кидал в плейлист, потом тыкал по файлу и заходил в: информация о файле. Открывался quick tag editor. В нем можно добавить.

Iska 09-05-2011 18:25 1673186

Vovchik1900, да не про то уже в третий раз я спрашиваю Вас, а в какой именно тэг добавляете? Назовите его. Скриншот, наконец, сделайте, и обведите поле нужного тэга красной линией. Хоть как-нибудь укажите этот тэг.

Vovchik1900 11-05-2011 17:33 1674434

Iska,

А! вот вы о чем! Не знаю какой тег. А команду нашел вот:

Binary Fields

The last type field that ID3Lib provides support for is a binary field. This holds miscellaneous data that can't be easily described any other way, such a JPEG image.

ID3_Field::Set()

отсюда: http://id3lib.sourceforge.net/id3lib-manual.php

Iska 11-05-2011 20:22 1674541

Vovchik1900, в общем и целом я понял, что Вы имели в виду. Теперь я уточню: Вы хотите каким-либо образом программным способом внедрять в тело указанного файла формата mp3 (или любого другого формата, поддерживающего внедрение ID3V2 тэгов) указанный файл изображения в формате jpg. Так?

Vovchik1900 13-05-2011 05:23 1675363

Iska,

Да, вы правы.

Vovchik1900 16-05-2011 16:28 1677315

Iska,

Не обязательно
Цитата:

Цитата Iska
формата mp3 (или любого другого формата, поддерживающего внедрение ID3V2 тэгов) »

хватит только мп3. Блин))) тока щас заметил)))

Iska 24-05-2011 03:48 1681487

Vovchik1900, ясно. Со своей стороны могу предложить, например, следующее:

1. Загрузить и установить ActivePython (я пробовал на версии ActivePython 2.6.6.17, сейчас для загрузки доступна и версия 2.6.6.18; 3.x в любом случае не рекомендую, дабы не править скрипты). В дальнейшем предполагается, что установка была произведена в умолчальную папку «C:\Python26».

2. Загрузить и установить модуль eyeD3. Для установки потребуется предварительно распаковать «eyeD3-0.6.17.tar.gz» в произвольную папку, я взял — «C:\PyModules». Внутри неё после распаковки архива (сгодится и WinRAR, и 7-Zip) должна оказаться папка «eyeD3-0.6.17» из архива со следующим содержимым:
читать дальше »
Код:

╔═════════════════ C:\PyModules\eyeD3-0.6.17 ═══╤════════╤═════╗
║и                Имя                  │Размер│  Дата  │Время║
║⌂..                                    │ Вверх│24.05.11│02:33║
║├bin                                    │ Папка│02.02.09│07:54║
║├doc                                    │ Папка│02.02.09│07:54║
║├etc                                    │ Папка│24.05.11│02:33║
║├src                                    │ Папка│24.05.11│02:33║
║ acsite                              m4 │  7257│02.02.09│07:54║
║ authors                                │  316│02.02.09│07:54║
║ ChangeLog                              │ 15532│02.02.09│07:54║
║ configure                              │105242│02.02.09│07:54║
║ copying                                │ 18009│02.02.09│07:54║
║ install                                │  9478│02.02.09│07:54║
║ Makefile                            in │  5194│02.02.09│07:54║
║ news                                  │  9738│02.02.09│07:54║
║ readme                                │ 10097│02.02.09│07:54║
║ README                            html│ 10956│02.02.09│07:54║
║ setup.py                            in │  530│02.02.09│07:54║
║ thanks                                │  1586│02.02.09│07:54║
║ todo                                  │  1458│02.02.09│07:54║
║                                        │      │        │    ║
║                                        │      │        │    ║


Далее нужно переименовать следующие файлы:
Код:

C:\PyModules\eyeD3-0.6.17\setup.py.in
в:
Код:

C:\PyModules\eyeD3-0.6.17\setup.py
и
Код:

C:\PyModules\eyeD3-0.6.17\src\eyeD3\__init__.py.in
в:
Код:

C:\PyModules\eyeD3-0.6.17\src\eyeD3\__init__.py
После чего установить модуль командой:
Код:

C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\setup.py install
в результате чего в папку:
Код:

C:\Python26\Lib\site-packages
будет добавлена папка «eyeD3» со следующим содержимым:
читать дальше »
Код:

╔════════════ C:\Python26\Lib\site-packages\eyeD3 ═══════╤═════╗
║и                Имя                  │Размер│  Дата  │Время║
║⌂..                                    │ Вверх│24.05.11│02:30║
║ __init__                            py │  1713│02.02.09│07:54║
║ __init__                            pyc│  845│22.05.11│22:23║
║ binfuncs                            py │  3558│02.02.09│07:54║
║ binfuncs                            pyc│  3102│22.05.11│22:23║
║ frames                              py │ 85569│02.02.09│07:54║
║ frames                              pyc│ 63546│24.05.11│02:24║
║ mp3                                py │ 28296│02.02.09│07:54║
║ mp3                                pyc│ 21655│22.05.11│22:23║
║ tag                                py │ 66306│02.02.09│07:54║
║ tag                                pyc│ 55821│22.05.11│22:23║
║ utils                              py │  5278│02.02.09│07:54║
║ utils                              pyc│  5687│22.05.11│22:23║
║                                        │      │        │    ║
║                                        │      │        │    ║


3. Теперь можно попробовать добавить потребный тэг. Сначала я приведу команду целиком, затем попробую расписать отдельные детали. Итак, добавим изображение из файла «C:\Мои проекты\Wallpapers\wallpaper_su.jpg» в тэг ID3v2.3 «Передняя обложка альбома» в аудиофайл «E:\Песочница\0056\ABBA (Eagle).mp3»:
Код:

C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image="C:\Мои проекты\Wallpapers\wallpaper_su.jpg"`FRONT_COVER "E:\Песочница\0056\ABBA (Eagle).mp3"
* «C:\PyModules\eyeD3-0.6.17\bin\eyeD3» — python'овский модуль для работы с командной строкой.
* «--no-color» — параметр, запрещающий добавление в вывод Escape-последовательностей для работы с цветом.
* «-F `» — параметр, меняющий умолчальный разделитель двоеточие («:») множественных полей в атрибутах на гравес («`»), что позволяет указывать полные пути (разбором исходного кода было установлено, что иначе полный путь, например — «C:\Мои проекты\Wallpapers\wallpaper_su.jpg», будет воспринят как два отдельных поля). Разумеется, можно указать свой разделитель.
* «--v2» — внедрение поддерживается только во второй версии тэгов, посему указываем, что будем работать именно со второй версией — ID3v2.x.
* «--to-v2.3» — принудительная конвертация существующих тэгов ID3 в версию ID3v2.3. Вынужденный шаг, сделанный специально для Вас, ибо по умолчанию, при задании потребного параметра «--v2» создаются тэги версии ID3v2.4, а мне не удалось добиться отображения внедрённых обложек данной версии тэгов ни в AIMP2 (несмотря на заявленное:
Цитата:

AIMP v2.61 Build 583 (07.08.2010)
========================================

- Исправлено: некорректно читается обложка альбома из ID3v2.4

), ни в Windows Media Player (который, возможно, у меня просто старый). ID3v2.4 корректно умеет отображать, например, foobar2000. С другой стороны, и он вернулся именно к ID3v2.3 как к основному способу:
Цитата:

1.1.6
* Improved tag compatibility with other software.

o ID3v2.3 tags are now written by default since version 2.4 seems to be widely ignored by software vendors.

Так что, смотрите сами именно по Вашим приложениям, какую именно подверсию пользовать — ID3v2.3 или же ID3v2.4.

NB: Изложенное выше не претендует ни на полноту, ни на абсолютную корректность.

Vovchik1900, если Вас устраивает подобный подход — попробуйте и отпишитесь, сработало ли у Вас внедрение изображения на одиночном файле. Тогда будем двигаться дальше.

Vovchik1900 29-05-2011 02:14 1684376

Вложений: 1
Iska,
Когда устанавливаю eyeD3 , выдает такую ошибку:

Iska 29-05-2011 02:35 1684381

Vovchik1900:
1. Ошибка возникает на этом этапе?
Код:

C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\setup.py install
2. Наличествует ли в папке «C:\PyModules\eyeD3-0.6.17» папка «src»?
читать дальше »
Код:

╔═════════════════ C:\PyModules\eyeD3-0.6.17 ══╤════════╤═02:32
║и                Имя                  │Размер│  Дата  │Время║
║⌂..                                    │ Вверх│29.05.11│02:32║
║├bin                                  │ Папка│24.05.11│02:33║
║├build                                │ Папка│24.05.11│02:38║
║├doc                                  │ Папка│24.05.11│02:33║
║├etc                                  │ Папка│24.05.11│02:33║
├src                                  │ Папка│24.05.11│02:33
║ acsite                            m4 │  7257│02.02.09│07:54║
║ authors                              │  316│02.02.09│07:54║
║ ChangeLog                            │ 15532│02.02.09│07:54║
║ configure                            │105242│02.02.09│07:54║
║ copying                              │ 18009│02.02.09│07:54║
║ install                              │  9478│02.02.09│07:54║
║ Makefile                          in │  5194│02.02.09│07:54║
║ news                                  │  9738│02.02.09│07:54║
║ readme                                │ 10097│02.02.09│07:54║
║ README                            html│ 10956│02.02.09│07:54║
║►setup                              py │  530│02.02.09│07:54║
║ thanks                                │  1586│02.02.09│07:54║
║ todo                                  │  1458│02.02.09│07:54║
║                                      │      │        │    ║
║                                      │      │        │    ║


3. Наличествует ли в папке «C:\PyModules\eyeD3-0.6.17\src» папка «eyeD3»?
читать дальше »
Код:

╔═══════════════ C:\PyModules\eyeD3-0.6.17\src ╤════════╤═02:37
║и                Имя                  │Размер│  Дата  │Время║
║⌂..                                    │ Вверх│29.05.11│02:37║
║├eyeD3                                │ Папка│29.05.11│02:34
║                                      │      │        │    ║
║                                      │      │        │    ║


Vovchik1900 29-05-2011 05:58 1684390

Iska,

1. да. ошибка на этом этапе.

2. и 3. Конечно. все папки на своих местах.

команду
C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\setup.py install
ввожу в командную строку.
У меня вин7 макс СП1
может я не там прописываю команду или винда тупит?

Iska 29-05-2011 08:50 1684410

Vovchik1900, сложно сказать. Я использую Windows XP Professional SP3, доступа к Windows 7 нет — посему, к сожалению, даже не могу попробовать воспроизвести Ваши действия. Здесь: Justin Wishart: Python: eyeD3 Installation on Windows, например, есть подтверждение работоспособности под Windows 7.

Попробуйте, на всякий случай, попробовать исполнить установку в командной строке, запущенной с повышенными привилегиями. Если не поможет — попробуйте задать вопрос на русскоязычных питоношных форумах:
Портал Python-программистов
VPF::Python - Форум программистов
PyDev: Форум python-разработчиков
дав ссылку на данную тему.

Vovchik1900 29-05-2011 10:47 1684446

Iska,
вы писали раньше
будет добавлена папка «eyeD3» со следующим содержимым:
Код:

« скрыть
Код:

╔════════════ C:\Python26\Lib\site-packages\eyeD3 ═══════╤═════╗
║и                Имя                  │Размер│  Дата  │Время║
║⌂..                                    │ Вверх│24.05.11│02:30║
║ __init__                            py │  1713│02.02.09│07:54║
║ __init__                            pyc│  845│22.05.11│22:23║
║ binfuncs                            py │  3558│02.02.09│07:54║
║ binfuncs                            pyc│  3102│22.05.11│22:23║
║ frames                              py │ 85569│02.02.09│07:54║
║ frames                              pyc│ 63546│24.05.11│02:24║
║ mp3                                py │ 28296│02.02.09│07:54║
║ mp3                                pyc│ 21655│22.05.11│22:23║
║ tag                                py │ 66306│02.02.09│07:54║
║ tag                                pyc│ 55821│22.05.11│22:23║
║ utils                              py │  5278│02.02.09│07:54║
║ utils                              pyc│  5687│22.05.11│22:23║
║                                        │      │        │    ║
║                                        │      │        │    ║

Можно ведь эту папку заархивировать и сюда прикрепить?
Я подумал, что если эти файлы себе положу в C:\Python26\Lib\site-packages\eyeD3 то заработает

Iska 29-05-2011 17:23 1684624

Vovchik1900, я попробую сравнить содержимое «C:\Python26» до и после установки «eyeD3» и отпишусь здесь.

читать дальше »
Данный текст:
╔════════════ C:\Python26\Lib\site-packages\eyeD3 ═══════╤═════╗
║и Имя │Размер│ Дата │Время║
имеет смысл заключать в тэг «code» для выравнивания:
Код:

╔════════════ C:\Python26\Lib\site-packages\eyeD3 ═══════╤═════╗
║и                Имя                  │Размер│  Дата  │Время║
║⌂..                                    │ Вверх│24.05.11│02:48║


Vovchik1900 30-05-2011 16:36 1685167

Iska,
помучился и подключил eyeD3.
Код:

C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image="C:\Мои проекты\Wallpapers\wallpaper_su.jpg"`FRONT_COVER "E:\Песочница\0056\ABBA (Eagle).mp3"
работает. но только 1 картинку к 1 файлу добавляет.

а как много картинок ко многим файлам добавить?

Iska 31-05-2011 04:35 1685432

Vovchik1900, заработало? Тогда по #21 я не экспериментирую и не отписываюсь. А в чём же там дело было? Отпишитесь, пожалуйста, на этот счёт.

Цитата:

а мне нада много картинок ко многим файлам добавить.
Будем делать. Только нужно более внятное разъяснение, нежели:
Цитата:

Цитата Vovchik1900
допустим в папке лежат мп3 файлы. Их примерно 10-15 (может больше). В другой папке лежат картинки. Тоже 10-15 (может больше). *.jpg файлы, разные.
В чем задача:
Как сделать программу, чтобы она поочереди добавляла к мп3 файлам картинки. То есть прописывала в тег к мп3 файлу.
Алгоритм примерно такой: к первому мп3, первую картинку---положил в третью папку, ко второму мп3, вторую картинку---положил в третью папку и так далее до конца. »

В частности:
1. Речь идёт только о передней обложке альбома? То есть, как правило — будет одно изображение на группу файлов *.mp3, так?
2. Как соотносить, по каким правилам — какие изображения к каким файлам *.mp3 соответствуют?

Vovchik1900 31-05-2011 05:27 1685434

Iska,

в файле setup.py папки eyeD3 (она же eyeD3-0.6.17. просто переименовал) было написано
Код:

package_dir={'eyeD3':'src\eyeD3'},
переделал на
Код:

package_dir={'eyeD3':'C:\PyModules\eyeD3\src\eyeD3'},
Цитата:

Цитата Iska
В частности:
1.
2. »

1. нет. у меня уже отсортировано все. например в папке C:\MUS\Audio\ лежит музыка: Treck1.mp3, Treck2.mp3....... а в папке C:\MUS\picture\ лежат картинки: Picture1.jpg, Picture2.jpg....... то есть 10 мп3 файлам (или даже более) соответствует 10 (или даже более) картинок. каждому мп3 своя картинка.
2. все картинки и мп3 пронумерованы. пусть соединяет 1й+1я, 2й+2я....... (мп3+картинка).

Iska 31-05-2011 09:30 1685503

Ориентироваться будем на какую-то систему именования пар *.mp3/*.jpg или просто идти по порядку, независимо от имён?

Vovchik1900 31-05-2011 10:24 1685528

Iska,


на систему именования пар. например: Treck1 только к Picture1, Treck2 только к Picture2 и так далее до конца.

Iska 05-06-2011 08:00 1688629

Vovchik1900, тогда попробуем с помощью пакетного файла (правильнее и удобнее бы было на самом Python'е, но мой опыт работы с ним — от силы часов шесть, посему — не берусь), например:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFolderMP3=%~1
set sFolderImage=%~2

if defined sFolderMP3 (
        if defined sFolderImage (
                if exist "%sFolderMP3%" (
                        if exist "%sFolderImage%" (
                                call :ScanFolder "%sFolderMP3%" "%sFolderImage%"
                                exit /b 0
                        ) else (
                                echo Folder [%sFolderImage%] not found.
                        )
                ) else (
                        echo Folder [%sFolderMP3%] not found.
                )
        ) else (
                echo Need arguments.
        )
) else (
        rem echo Need arguments.
)

echo.
echo Usage: %~nx0 ^<Folder with *.mp3 files^> ^<Folder with *.jpg files^>
echo.
echo Use template ^<Track*.mp3^> for audio files. Example:
echo.
echo    Track1.mp3
echo    Track2.mp3
echo    ...
echo    TrackNNN.mp3
echo.
echo Use template ^<Picture*.jpg^> for image files. Example:
echo    Picture1.jpg
echo    Picture2.jpg
echo    ...
echo    PictureNNN.jpg

endlocal
exit /b 1

:ScanFolder "%sFolderMP3%" "%sFolderImage%"
        setlocal

        for /l %%i in (1, 1, 999) do (
                if exist "%sFolderMP3%\Track%%i.mp3" (
                        if exist "%sFolderImage%\Picture%%i.jpg" (
                                attrib.exe -r "%sFolderMP3%\Track%%i.mp3"
                                echo Adding [%sFolderImage%\Picture%%i.jpg] to [%sFolderMP3%\Track%%i.mp3]

                                C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image=""`FRONT_COVER "%sFolderMP3%\Track%%i.mp3"
                                C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image="%sFolderImage%\Picture%%i.jpg"`FRONT_COVER "%sFolderMP3%\Track%%i.mp3"
                        )
                )
        )

        endlocal
        exit /b

Пример вызова пакетного файла:
Код:

0001.cmd "E:\Песочница\0056\mp3" "E:\Песочница\0056\jpg"

Vovchik1900 05-06-2011 20:18 1688910

Iska,

работает. Спасибо большое))!!

А можно:

1. код подробней расписать. например не очень ясно echo Need arguments или rem echo Need arguments. Вы например
Цитата:

Цитата Iska
C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image="C:\Мои проекты\Wallpapers\wallpaper_su.jpg"`FRONT_COVER "E:\Песочница\0056\ABBA (Eagle).mp3" »

расписали что я аж.... понял все))

2. если у меня треки имеют формат 1.Исполнитель-Название трека.mp3 и так до nnnn.Исполнитель-Название трека.mp3, а картинки тоже как-нибудь пронумерованы. Напрмер 1.Picture и так до nnnn.Picture. как тогда будет?
в принципе меня устраивает, то что есть..... любопытно все-таки.

Iska 06-06-2011 01:56 1689035

Цитата:

Цитата Vovchik1900
код подробней расписать. »

читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

Присваиваем переменной окружения sFolderMP3 первый аргумент пакетного файла (без возможных кавычек)
set sFolderMP3=%~1
Присваиваем переменной окружения sFolderImage первый аргумент пакетного файла (без возможных кавычек)
set sFolderImage=%~2

Делаем проверки на то, что, как минимум задано два аргумента пакетного файла, и они обозначают объекты файловой системы:

Если переменная окружения sFolderMP3 определена (т.е., первый аргумент пакетного файла был задан), то…

if defined sFolderMP3 (
        Если переменная окружения sFolderImage определена (т.е., второй аргумент пакетного файла был задан), то…
        if defined sFolderImage (
                Если существует папка [или файл, здесь у меня, к сожалению, ошибка] %sFolderMP3%, то…
                if exist "%sFolderMP3%" (
                        Если существует папка [или файл, и здесь у меня ошибка] %sFolderImage%, то…
                        if exist "%sFolderImage%" (
                                Сделав проверки, вызываем процедуру переименования
                                call :ScanFolder "%sFolderMP3%" "%sFolderImage%"
                                Выходим из пакетного файла без ошибки
                                exit /b 0
                        ) else (
                                Папка [или файл, здесь у меня ошибка] %sFolderImage% не существует — сообщаем об ошибке
                                echo Folder [%sFolderImage%] not found.
                        )
                ) else (
                        Папка [или файл, здесь у меня ошибка] %sFolderMP3% не существует — сообщаем об ошибке
                        echo Folder [%sFolderMP3%] not found.
                )
        ) else (
                Переменная окружения sFolderImage определена (т.е., второй аргумент пакетного файла не был задан) — сообщаем об ошибке
                echo Need arguments.
        )
) else (
        Переменная окружения sFolderMP3 не определена (т.е., вообще пакетный файл был вызван вовсе без аргументов, можно сообщать об ошибке, но я не стал, ибо далее всё одно будет выведено сообщение по использованию пакетного файла
        rem echo Need arguments.
)

Если дошли сюда — значит, чего-то не хватает. Выводим сообщение по использованию пакетного файла
echo.
echo Usage: %~nx0 ^<Folder with *.mp3 files^> ^<Folder with *.jpg files^>
echo.
echo Use template ^<Track*.mp3^> for audio files. Example:
echo.
echo    Track1.mp3
echo    Track2.mp3
echo    ...
echo    TrackNNN.mp3
echo.
echo Use template ^<Picture*.jpg^> for image files. Example:
echo    Picture1.jpg
echo    Picture2.jpg
echo    ...
echo    PictureNNN.jpg

endlocal
Выходим из пакетного файла с ошибкой
exit /b 1

Процедура переименования
:ScanFolder "%sFolderMP3%" "%sFolderImage%"
        setlocal

        Перебираем переменную «%%i» от 1 до 999 с шагом 1
        for /l %%i in (1, 1, 999) do (
                Если существует файл «%sFolderMP3%\Track%%i.mp3», то…
                if exist "%sFolderMP3%\Track%%i.mp3" (
                        Если существует аналогичный ему файл «%sFolderImage%\Picture%%i.jpg», то…
                        if exist "%sFolderImage%\Picture%%i.jpg" (
                                Снимаем возможный атрибут Read-Only (что часто бывает при копировании *.mp3 с CD/DVD) у файла «%sFolderMP3%\Track%%i.mp3»
                                attrib.exe -r "%sFolderMP3%\Track%%i.mp3"
                                Выводим сообщение
                                echo Adding [%sFolderImage%\Picture%%i.jpg] to [%sFolderMP3%\Track%%i.mp3]

                                Сначала удаляем существующий FRONT_COVER. Для этого вызываем модуль Python eyeD3 с аргументами:
                                --no-color — не добавлять в вывод цветовые Escape-последовательности
                                -F `— использовать в качестве разделителя гравес «`» вместо умолчальных двойных кавычек (сие позволяет использовать двойные кавычки для указания полных путей к файлам)
                                --v2 — будем работать со второй версией тэгов
                                --to-v2.3 — преобразуем существующие тэги к к версии 2.3
                                --add-image=""`FRONT_COVER — удаляем FRONT_COVER, если он есть, указав пустое имя файла
                                "%sFolderMP3%\Track%%i.mp3" — имя файла, с которым работаем

                                C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image=""`FRONT_COVER "%sFolderMP3%\Track%%i.mp3"
                                Теперь добавляем новый FRONT_COVER. Для этого вызываем модуль Python eyeD3 теми же аргументами, за исключением:
                                --add-image="%sFolderImage%\Picture%%i.jpg"`FRONT_COVER — добавляем FRONT_COVER, указывая имя файла «%sFolderImage%\Picture%%i.jpg»

                                C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image="%sFolderImage%\Picture%%i.jpg"`FRONT_COVER "%sFolderMP3%\Track%%i.mp3"
                        )
                )
        )

        endlocal
        exit /b

Для проверки существования папки правильно использовать ссылку именно на папку, как:
Код:

if exist "%sFolderMP3%\." …
или просто:
Код:

if exist "%sFolderMP3%\" …
а не:
Код:

if exist "%sFolderMP3%" …
ибо последнее сработает также и для файла «%sFolderMP3%», что, конечно, не является правильным.

Цитата:

Цитата Vovchik1900
2. если у меня треки имеют формат 1.Исполнитель-Название трека.mp3 и так до nnnn.Исполнитель-Название трека.mp3, а картинки тоже как-нибудь пронумерованы. »

Написать пакетный файл как-нибудь ;).

Vovchik1900 06-06-2011 06:45 1689074

Iska,

Спасибо большое!!))

а теперь самый последний вопрос: вот этот код, который находит папку.... сшивает картинки и музыку...... это на каком языке программирования? на Python?
читать дальше »

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

Присваиваем переменной окружения sFolderMP3 первый аргумент пакетного файла (без возможных кавычек)
set sFolderMP3=%~1
Присваиваем переменной окружения sFolderImage первый аргумент пакетного файла (без возможных кавычек)
set sFolderImage=%~2

Делаем проверки на то, что, как минимум задано два аргумента пакетного файла, и они обозначают объекты файловой системы:

Если переменная окружения sFolderMP3 определена (т.е., первый аргумент пакетного файла был задан), то…
if defined sFolderMP3 (
        Если переменная окружения sFolderImage определена (т.е., второй аргумент пакетного файла был задан), то…
        if defined sFolderImage (
                Если существует папка [или файл, здесь у меня, к сожалению, ошибка] %sFolderMP3%, то…
                if exist "%sFolderMP3%" (
                        Если существует папка [или файл, и здесь у меня ошибка] %sFolderImage%, то…
                        if exist "%sFolderImage%" (
                                Сделав проверки, вызываем процедуру переименования
                                call :ScanFolder "%sFolderMP3%" "%sFolderImage%"
                                Выходим из пакетного файла без ошибки
                                exit /b 0
                        ) else (
                                Папка [или файл, здесь у меня ошибка] %sFolderImage% не существует — сообщаем об ошибке
                                echo Folder [%sFolderImage%] not found.
                        )
                ) else (
                        Папка [или файл, здесь у меня ошибка] %sFolderMP3% не существует — сообщаем об ошибке
                        echo Folder [%sFolderMP3%] not found.
                )
        ) else (
                Переменная окружения sFolderImage определена (т.е., второй аргумент пакетного файла не был задан) — сообщаем об ошибке
                echo Need arguments.
        )
) else (
        Переменная окружения sFolderMP3 не определена (т.е., вообще пакетный файл был вызван вовсе без аргументов, можно сообщать об ошибке, но я не стал, ибо далее всё одно будет выведено сообщение по использованию пакетного файла
        rem echo Need arguments.
)

Если дошли сюда — значит, чего-то не хватает. Выводим сообщение по использованию пакетного файла
echo.
echo Usage: %~nx0 ^<Folder with *.mp3 files^> ^<Folder with *.jpg files^>
echo.
echo Use template ^<Track*.mp3^> for audio files. Example:
echo.
echo    Track1.mp3
echo    Track2.mp3
echo    ...
echo    TrackNNN.mp3
echo.
echo Use template ^<Picture*.jpg^> for image files. Example:
echo    Picture1.jpg
echo    Picture2.jpg
echo    ...
echo    PictureNNN.jpg

endlocal
Выходим из пакетного файла с ошибкой
exit /b 1

Процедура переименования
:ScanFolder "%sFolderMP3%" "%sFolderImage%"
        setlocal

        Перебираем переменную «%%i» от 1 до 999 с шагом 1
        for /l %%i in (1, 1, 999) do (
                Если существует файл «%sFolderMP3%\Track%%i.mp3», то…
                if exist "%sFolderMP3%\Track%%i.mp3" (
                        Если существует аналогичный ему файл «%sFolderImage%\Picture%%i.jpg», то…
                        if exist "%sFolderImage%\Picture%%i.jpg" (
                                Снимаем возможный атрибут Read-Only (что часто бывает при копировании *.mp3 с CD/DVD) у файла «%sFolderMP3%\Track%%i.mp3»
                                attrib.exe -r "%sFolderMP3%\Track%%i.mp3"
                                Выводим сообщение
                                echo Adding [%sFolderImage%\Picture%%i.jpg] to [%sFolderMP3%\Track%%i.mp3]

                                Сначала удаляем существующий FRONT_COVER. Для этого вызываем модуль Python eyeD3 с аргументами:
                                --no-color — не добавлять в вывод цветовые Escape-последовательности
                                -F `— использовать в качестве разделителя гравес «`» вместо умолчальных двойных кавычек (сие позволяет использовать двойные кавычки для указания полных путей к файлам)
                                --v2 — будем работать со второй версией тэгов
                                --to-v2.3 — преобразуем существующие тэги к к версии 2.3
                                --add-image=""`FRONT_COVER — удаляем FRONT_COVER, если он есть, указав пустое имя файла
                                "%sFolderMP3%\Track%%i.mp3" — имя файла, с которым работаем
                                C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image=""`FRONT_COVER "%sFolderMP3%\Track%%i.mp3"
                                Теперь добавляем новый FRONT_COVER. Для этого вызываем модуль Python eyeD3 теми же аргументами, за исключением:
                                --add-image="%sFolderImage%\Picture%%i.jpg"`FRONT_COVER — добавляем FRONT_COVER, указывая имя файла «%sFolderImage%\Picture%%i.jpg»
                                C:\Python26\python.exe C:\PyModules\eyeD3-0.6.17\bin\eyeD3 --no-color -F ` --to-v2.3 --v2 --add-image="%sFolderImage%\Picture%%i.jpg"`FRONT_COVER "%sFolderMP3%\Track%%i.mp3"
                        )
                )
        )

        endlocal
        exit /b


Iska 06-06-2011 06:50 1689075

Справка по тэгам форума

Это язык пакетных файлов. Здесь он именуется также как «Категория CMD/BAT» — по расширениям пакетных файлов.

Vovchik1900 06-06-2011 06:53 1689077

Спасибо за разъяснения.


Время: 01:09.

Время: 01:09.
© OSzone.net 2001-