Показать полную графическую версию : [решено] Работа с Mp3 файлами
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
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 файлу добавляет.
а как много картинок ко многим файлам добавить?
Vovchik1900, заработало? Тогда по #21 (http://forum.oszone.net/post-1684624-21.html) я не экспериментирую и не отписываюсь. А в чём же там дело было? Отпишитесь, пожалуйста, на этот счёт.
а мне нада много картинок ко многим файлам добавить.
Будем делать. Только нужно более внятное разъяснение, нежели:
допустим в папке лежат мп3 файлы. Их примерно 10-15 (может больше). В другой папке лежат картинки. Тоже 10-15 (может больше). *.jpg файлы, разные.
В чем задача:
Как сделать программу, чтобы она поочереди добавляла к мп3 файлам картинки. То есть прописывала в тег к мп3 файлу.
Алгоритм примерно такой: к первому мп3, первую картинку---положил в третью папку, ко второму мп3, вторую картинку---положил в третью папку и так далее до конца. »
В частности:
1. Речь идёт только о передней обложке альбома? То есть, как правило — будет одно изображение на группу файлов *.mp3, так?
2. Как соотносить, по каким правилам — какие изображения к каким файлам *.mp3 соответствуют?
Vovchik1900
31-05-2011, 05:27
Iska,
в файле setup.py папки eyeD3 (она же eyeD3-0.6.17. просто переименовал) было написано package_dir={'eyeD3':'src\eyeD3'},
переделал на package_dir={'eyeD3':'C:\PyModules\eyeD3\src\eyeD3'},
В частности:
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+картинка).
Ориентироваться будем на какую-то систему именования пар *.mp3/*.jpg или просто идти по порядку, независимо от имён?
Vovchik1900
31-05-2011, 10:24
Iska,
на систему именования пар. например: Treck1 только к Picture1, Treck2 только к Picture2 и так далее до конца.
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
Iska,
работает. Спасибо большое))!!
А можно:
1. код подробней расписать. например не очень ясно echo Need arguments или rem echo Need arguments. Вы например
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. как тогда будет?
в принципе меня устраивает, то что есть..... любопытно все-таки.
код подробней расписать. »
@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%», что, конечно, не является правильным.
2. если у меня треки имеют формат 1.Исполнитель-Название трека.mp3 и так до nnnn.Исполнитель-Название трека.mp3, а картинки тоже как-нибудь пронумерованы. »
Написать пакетный файл как-нибудь ;).
Vovchik1900
06-06-2011, 06:45
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
Справка по тэгам форума (http://forum.oszone.net/misc.php?do=bbcode)
Это язык пакетных файлов. Здесь он именуется также как «Категория CMD/BAT» — по расширениям пакетных файлов.
Vovchik1900
06-06-2011, 06:53
Спасибо за разъяснения.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC