Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Mp3tag

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

MAC18

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mp3tag


Мощная и в то же время простая в использовании программа для редактирования метаданных (тегов) в аудиофайлах. Поддерживается пакетное редактирование тегов ID3 (v1, v2.3, v2.4), iTunes MP4, WMA, Vorbis, APE в файлах разных форматов (aac, alac, aif/aifc/aiff, dsf, flac, mka/mkv, ape, mp3, mp4/m4a/m4b/m4v/iTunes, mpc, ogg, opus, ofr/ofs, spx, tak, tta, wma, wv, wav, webm). Позволяет переименовывать треки в соответствии с имеющимися в них сведениями, заменять символы или слова из тегов и имён, импортировать/экспортировать, создавать списки воспроизведения и многое другое. Имеется поддержка онлайн-сервисов для получения данных, которые позволяют автоматически заполнить все поля, например, при копировании аудио-CD.
Поддерживает язык сценариев, позволяющий автоматизировать сложные операции редактирования тегов, пакетного режима и экспорта информации, что является уникальной возможностью для программ такого рода.
Массу готовых сценариев можно найти на официальном форуме программы.
 
Поддерживаемые ОС: Windows 7, 8, 8.1, 10, 11 (последняя версия для Windows XP SP3, Vista, 2003 - 3.05); macOS (платная)
Интерфейс переведён на разные языки, в том числе на русский.


Текущая версия: 3.31 [2025-08-15]
Автор: Florian Heidenreich
История версий
Начиная с версии 2.81 программа имеет возможность штатной портативной установки (выбором соответствующего режима при запуске установщика).
 
Скачать:
Текущая версия
Последняя версия для XP
Бета-версии
Microsoft Store
videohelp(в т.ч. распакованные из инсталлятора portable x86/x64)

Последние версии программы имеют опцию портативной установки, в старых версиях нужно соблюдать инструкцию (официальная инструкция от автора программы) (перевод инструкции на русский язык)
Стоит заметить, что авторский вариант портабилизации программы полнофункционален, в отличие от портаблоидов, которые можно встретить на страницах топика, поскольку последние, как правило, не имеют возможности сохранять настройки программы, а также пользовательские сценарии, шаблоны экспорта и т.д., тогда как авторский вариант сохраняет все настройки в папке программы.
Не путайте эту программу с программой Mp3Tag Pro (от ManiacTools) которая появилась позднее, имеет другого автора (русскоязычного) и не бесплатна: программы между собой никак не связаны (кроме целей использования) и совершенно различны по функциональности.

Всего записей: 407 | Зарегистр. 27-12-2004 | Отправлено: 17:41 09-02-2005 | Исправлено: MAX63ru, 11:50 15-08-2025
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Celsus
Цитата:
Что значит returns true?
Вообще легко гуглится - например
 
 
insorg
Цитата:
- Да. (True)
Тогда уж надо "- Истину глаголешь!"

Всего записей: 2773 | Зарегистр. 20-04-2004 | Отправлено: 19:17 30-05-2025
insorg



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KChernov
Истинно так.

Всего записей: 19765 | Зарегистр. 04-11-2010 | Отправлено: 19:23 30-05-2025
www_world

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Celsus

Цитата:
Не доходит логика работа формул.  
$neql(x,y)    returns true if x not equal to y
Что значит returns true?

Например

Код:
$neql($len(%title%),0)

если количество символов в теге "Название композиции" не равно нулю, то выражение возвращает значение Истина (то есть, данный тег чем-то заполнен (хотя это может быть и символ(ы) пробела)
Пример использования

Код:
$if($neql($len(%title%),0),%title%,%_filename%)

если ("если количество символов в теге "Название композиции" не равно нулю, то выражение возвращает значение Истина (то есть, данный тег чем-то заполнен (хотя это может быть и символ(ы) пробела)") => Истина (то есть тег "Название композиции" содержит любые символы), то оставляем его как есть (возвращаем содержимое его самого), а противном случае (тег "Название композиции" НЕ содержит любые символы) - в качестве значения возвращаем "Название файла".  
На практике подобным выражением можно заполнить теги "Название композиции" в медиафайлах, в которых они отсутствуют (если вместо $len(%title%) вписать $len($trim(%title%)), то пустыми тегами "Название композиции" будут считаться и теги содержащие лишь пробельные символы).

Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 20:51 30-05-2025
volodyalipkin



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеется несколько полей в неправильной кодировке. Можно ли их исправить в один шаг?

Всего записей: 773 | Зарегистр. 12-10-2002 | Отправлено: 21:38 30-05-2025
www_world

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volodyalipkin

Цитата:
Имеется несколько полей в неправильной кодировке. Можно ли их исправить в один шаг?

Конечно.
Достаточно составить соответствующий Action скрипт.
В зависимости от типа "неправильной кодировки" можно использовать либо тип Action - Convert codepage, либо составить элементарный скрипт замен из пар "символ(ы) кракозябры" - "корректный символ".

Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 21:51 30-05-2025
volodyalipkin



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
www_world

Цитата:
тип Action - Convert codepage

Это понятно. Вопрос как там указать два поля.

Всего записей: 773 | Зарегистр. 12-10-2002 | Отправлено: 02:42 31-05-2025
www_world

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volodyalipkin

Цитата:
Вопрос как там указать два поля.

Добавьте вторую строку в это же Action, но со вторым полем.

Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 04:02 31-05-2025
Celsus



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg

Цитата:
Если заданные x и y не равны (not equal), то функция выдаёт (ака "возвращает" = returns) значение true.

Спасибо, наконец дошло, как работает это
 
Непонятно, почему при действии format value где
field:ARTIST
format string:$regexp(%title%,'(feat)','$1')
копирует весь TITLE в ARTIST
Изначально:
TITLE:Blue Way (Aerotek Remix)
ARTIST:Amir Farhoodi
Почему действие выполняется?
 
Добавлено:

Цитата:
Вообще легко гуглится - например

Я читал, я долго не понимал, как работает это.
 
 
Добавлено:
Сразу напишу, что пытаюсь сделать при помощи команд $if($eql
Бывает 4 варианта (на самом деле больше. но неважно), когда исполнитель (певец или музыкант) зачем-то указывается в теге TITLE:
Blue Way (feat. Anna) (Aerotek Remix)
Blue Way feat. Anna (Aerotek Remix)
Blue Way (Aerotek Remix)  (feat. Anna)
Blue Way (Aerotek Remix) feat. Anna
Еще может быть вариант без скобок, к примеру:
Blue Way (feat. Anna)
Blue Way feat. Anna
Но сначала хочется разобраться с первыми четырьмя вариантами.
Я сделал действие format value, которое копирует певца из тега TITLE в тег ARTIST:
%artist% $regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1')
Затем два действия replace with regular expression, которые удаляют певца из тега TITLE в зависимости от его расположения относительно скобок:
TITLE
\(*feat. .*?\)* \(
(
 
TITLE
 \(*feat. .*?\)*$
пустота
 
Проблема в том, что если применить первое действие к TITLE, в котором не указан певец (feat. Anna), то к тегу ARTIST целиком добавляется TITLE.
 
Поэтому нужно условие, чтобы первое действие выполнялось только, если исполнитель указан в TITLE, но как сделать это?
$if($eql(а вот тут что?
Как я представляю себе это:
$if($eql(feat=%TITLE%),%artist% $regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1'),%artist%)
Но так не работает
 

Всего записей: 463 | Зарегистр. 02-04-2011 | Отправлено: 18:19 31-05-2025 | Исправлено: Celsus, 19:05 31-05-2025
www_world

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Непонятно, почему при действии format value где
field:ARTIST
format string:$regexp(%title%,'(feat)','$1')
копирует весь TITLE вместо ARTIST
Изначально:
TITLE:Blue Way (Aerotek Remix)
ARTIST:Amir Farhoodi

$regexp(%title%,'(feat)','$1')
означает найти в теге %title% (название композиции) все подстроки feat и заменить их ими самими ($1), то есть, тег %title% после операции замены остается неизменным.
Иначе говоря,  
$regexp(%title%,'(feat)','$1') == %title%  (без учета регистра символов).
А далее после этой "замены" вы форматируете тег ARTIST результатом вашей формат строки, то есть заменяете его содержимым тега %title% (TITLE)
Все работает корректно - что написали, то и получили.
 

Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 19:04 31-05-2025 | Исправлено: www_world, 19:13 31-05-2025
www_world

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Сразу напишу, что пытаюсь сделать при помощи команд $if($eql
Бывает 4 варианта (на самом деле больше. но неважно), когда исполнитель (певец или музыкант) зачем-то указывается в теге TITLE:
Blue Way (feat. Anna) (Aerotek Remix)
Blue Way feat. Anna (Aerotek Remix)
Blue Way (Aerotek Remix)  (feat. Anna)
Blue Way (Aerotek Remix) feat. Anna
Еще может быть вариант без скобок, к примеру:
Blue Way (feat. Anna)
Blue Way feat. Anna
Но сначала хочется разобраться с первыми четырьмя вариантами.
Я сделал действие format value, которое копирует певца из тега TITLE в тег ARTIST:
%artist% $regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1')
Затем два действия replace with regular expression, которые удаляют певца из тега TITLE в зависимости от его расположения относительно скобок:
TITLE
\(*feat. .*?\)* \(
(
 
TITLE
 \(*feat. .*?\)*$
пустота
 
Проблема в том, что если применить первое действие к TITLE, в котором не указан певец (feat. Anna), то к тегу ARTIST целиком добавляется TITLE.
 
Поэтому нужно условие, чтобы первое действие выполнялось только, если исполнитель указан в TITLE, но как сделать это?
$if($eql(а вот тут что?
Как я представляю себе это:
$if($eql(feat=%TITLE%),%artist% $regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1'),%artist%)
Но так не работает  

Попробуйте отформатировать тег ARTIST таким образом
$if($neql($trim($regexp(%title%,'.*[ \(\[]feat[. ]*([^$\(\)\n\r\t\[\]]+).*',$1)),%title%),$trim($regexp(%title%,'.*[ \(\[]feat[. ]*([^$\(\)\n\r\t\[\]]+).*',%artist% feat. $1)),%artist%)
 
Удалить певца из тега TITLE можно так
$regexp($trim($regexp(%title%,'[ \(\[]feat[. ]+[^\(\[$]*',' ')),'[ ][ ]+',' ')

Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 21:41 31-05-2025 | Исправлено: www_world, 22:09 31-05-2025
Celsus



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
www_world
Спасибо. Попробую ваш скрипт
Я переделал свой скрипт, внимательно прочитав пост Casual_Tea https://community.mp3tag.de/t/execute-regular-expression-only-if-brackets-present/68639/5
У него была такая же проблема https://community.mp3tag.de/t/simple-way-to-abort-action-if-regex-does-not-match/66243
Он пишет:
$regexp(x,e,r,c)
As the default behavior that's sensible. I just wish there was a 5th parameter to toggle the behavior from returning x when no match is found
Другими словами, когда $regexp(%title%,'.*?\(?(feat..*?)\)?(\s\(.*?)?$|$','$1') не находит искомое, то возвращает %title%
 
В итоге заработало:
$if($neql($regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1'),%title%),%artist% $regexp(%title%,'.*?\(?(feat..*?)\)?(\s\(.*?)?$|$','$1'),%artist%)
 
Просто поменял $eql на $neql  
 
А вот если применять следующий скрипт к случаю, когда в TITLE нет feat Anna, то к ARTIST прибавляет TITLE целиком, хотя по логике должно возвращаться %artist%, так как $eql не вернул TRUE:
$if($eql($regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1'),%title%),%artist% $regexp(%title%,'.*?\(?(feat..*?)\)?(\s\(.*?)?$|$','$1'),%artist%)
 
Тут нет логики, $regexp работает неправильно внутри $if($eql
 
offtop
Вчера еще пробовал конструкцию $if($eql(x,y),x,$if($eql(x,y),x,y)) и чтото не заработало.
 
Хорошо бы найти редактор, в котором подсвечивались бы блоки

Всего записей: 463 | Зарегистр. 02-04-2011 | Отправлено: 11:52 01-06-2025 | Исправлено: Celsus, 12:24 01-06-2025
Bing0

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В старых тэгах itunes eсть и такое - Blue Way (Aerotek Remix) [Extended] {feat. Anna}

Всего записей: 65 | Зарегистр. 24-05-2025 | Отправлено: 12:17 01-06-2025
www_world

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bing0

Цитата:
В старых тэгах itunes eсть и такое - Blue Way (Aerotek Remix) [Extended] {feat. Anna}

Фигурных скобок добавить в вышеприведенный скрипт, типа
$if($neql($trim($regexp(%title%,'.*[ \(\[\{]feat[. ]*([^$\(\)\{\}\t\[\]]+).*',$1)),%title%),$trim($regexp(%title%,'.*[ \(\[\{]feat[. ]*([^$\(\)\{\}\t\[\]]+).*',%artist% feat. $1)),%artist%)
 
Celsus
По поводу
Цитата:
$if($eql($regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1'),%title%),%artist% $regexp(%title%,'.*?\(?(feat..*?)\)?(\s\(.*?)?$|$','$1'),%artist%)  
и тд и тп, то вам стоит задавать вопросы там, откуда вы его взяли.
Вам предложено более универсальное решение, а разбираться в хитросплетениях урезанного в возможностях варианта, априори неспособного корректно обработать даже такой список вариантов

Код:
Blue Way feat. Anna (Aerotek Remix)
Blue Way feat. Anna Gun [Aerotek Remix]
Blue Way (feat. Anna) (Aerotek Remix)
Loco (feat. J Mandly) [Radio Edit]
Blue Way (feat Anna Gun) (Aerotek Remix)
Blue Way (Aerotek Remix) feat. Anna Gun
Blue Way (Aerotek Remix) [Extended] {feat. Anna}

и пытаться исправить этого горбатого - боюсь, что желающих найдется немного. Впрочем, надежда есть всегда, если ждать достаточно долго.
 
Добавлено

Цитата:
А вот если применять следующий скрипт к случаю, когда в TITLE нет feat Anna, то к ARTIST прибавляет TITLE целиком, хотя по логике должно возвращаться %artist%, так как $eql не вернул TRUE:
$if($eql($regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1'),%title%),%artist% $regexp(%title%,'.*?\(?(feat..*?)\)?(\s\(.*?)?$|$','$1'),%artist%)  

В этом случае
$regexp(%title%,'.*?\(?(feat.*?)\)?(\s\(.*?)?$|$','$1') == %title% (регэксп не найден -> замен нет -> возвращается исходная строка %title%)
и весь скрипт идентичен скрипту
$if($eql(%title%,%title%),%artist% %title%,%artist%)
Что неправильного он делает?!

Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 18:34 01-06-2025 | Исправлено: www_world, 18:59 01-06-2025
Celsus



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
www_world

Цитата:
$if($eql(%title%,%title%),%artist% %title%,%artist%)
Что неправильного он делает?!

Как я понимаю, то если $eql не возвращает true, то выполняется не %artist% %title%, а %artist%, ведь в $eql точно так же regexp не находит искомое и нет замены, или в этом случае он все равно возвращает true?
Большое спасибо за скрипт.

Всего записей: 463 | Зарегистр. 02-04-2011 | Отправлено: 14:07 02-06-2025 | Исправлено: Celsus, 14:07 02-06-2025
lvqcl

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему $eql(%title%,%title%) должен возвращать false, а не true?

Всего записей: 1299 | Зарегистр. 03-02-2007 | Отправлено: 14:23 02-06-2025
www_world

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Celsus

Цитата:
Как я понимаю, то если $eql не возвращает true, то выполняется не %artist% %title%, а %artist%, ведь в $eql точно так же regexp не находит искомое и нет замены, или в этом случае он все равно возвращает true?

Логический оператор $eql(x,y) сравнивает x и y (они могут быть строками или числами)  и возвращает  ИСТИНА, если они одинаковые. в противном случае - ЛОЖЬ.
 
Строковый оператор $regexp(x,e,y) заменяет (а не просто ищет) в строке х подстроку e (записанную с пом. регулярного выражения) подстрокой у (записанной, в том числе, и с использованием шаблонов замен, но не обязательно). Независимо от того, произведены замены или нет, результат работы оператора - строка:
  • исходная, если подстрока не найдена или если подстрока поиска идентична подстроке замен;
  • измененная, если подстрока поиска найдена и она не идентична подстроке замен;  
  • строка нулевой длины, если подстрока поиска e найдена и охватывает всю исходную строку x [одношагово или последовательными шагами: напр. регэксп .{1} охватит любую строку целиком за n шагов, где n = числo символов в строке], a подстрока замен у - нулевой длины.
     
    Условный оператор (триггер) $if(w,x,y) дает на выходе строку (или число) - x, если w есть ИСТИНА или y, если w есть ЛОЖЬ.

  • Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 17:01 02-06-2025 | Исправлено: www_world, 17:40 02-06-2025
    Celsus



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Можно ли указать теги в строчку, которым присваивается одно значение, чтобы не создавать разные действия для каждого тега? Конкретно, хочу затереть много тегов значением %Null% или аналогичным.

    Всего записей: 463 | Зарегистр. 02-04-2011 | Отправлено: 16:48 05-08-2025 | Исправлено: Celsus, 16:49 05-08-2025
    www_world

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Можно ли указать теги в строчку, которым присваивается одно значение, чтобы не создавать разные действия для каждого тега? Конкретно, хочу затереть много тегов значением %Null% или аналогичным.

    Можно
    - создать одно дейстствие (Action)  с неограниченным числом шагов (отдельных операций) в нем, которое выполняется выполняется, как одна операция
    - объединить несколько отдельных Action, в Preset, выполняемый одним кликом

    Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 18:18 05-08-2025
    Celsus



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    - создать одно дейстствие (Action)  с неограниченным числом шагов (отдельных операций) в нем, которое выполняется выполняется, как одна операция

    Как такой столбик вместить в 1 format value или в 1 replace?  
    https://i.postimg.cc/cJXbRbM8/2025-08-09-092126.png

    Всего записей: 463 | Зарегистр. 02-04-2011 | Отправлено: 07:23 09-08-2025
    www_world

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Celsus

    Цитата:
    Как такой столбик вместить в 1 format value или в 1 replace?  
    https://i.postimg.cc/cJXbRbM8/2025-08-09-092126.png

    Создание:

    Использование:

     
    Однако если вам нужно тупо удалить определенные поля, то логичнее использовать, в зависимости от количества удаляемых и остающихся полей,
    либо Action операцию

    либо Action операцию
     

    Всего записей: 626 | Зарегистр. 04-11-2018 | Отправлено: 20:05 12-08-2025 | Исправлено: www_world, 20:19 12-08-2025
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Программы » Mp3tag


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2025

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru