Удаление обложек альбомов из файлов MP3 с помощью командной строки

Не знаю, интересно ли вам это. Я создал довольно быстрый сценарий оболочки bash, который подходил для моих целей в то время. Он спрашивает, хотите ли вы установить проект или тег (s )для задач, а затем быстро создает несколько новых задач. Использует некоторые довольно громкие цветовые комбинации, я думаю, что только что открыл для себя метод "echo -e" в то время ;o)

Я искал сегодня и нашел ваш пост, потому что я хотел разработать скрипт для создания зависимостей, но похоже, что мне, возможно, придется изучить python; Я также хочу сделать синхронизацию напоминаний Google. Если вы нашли хороший инструмент, я был бы рад узнать, на каком решении вы остановились.

кр А


#!/bin/bash

#  Script:  twmulti
#  Created: 2016.02.11
#  Current: ~/Bin

#   clear the variables just in case a recent session set them
PRJNAME=""
TAGNAME=""
TSKNAME=""

clear

echo -e "\e[1;33;41mENTER PROJECT NAME >\e[0;m" 
read PRJNAME
if [ -z $PRJNAME ] ; then PRJNAME="" ; fi

echo -e "\n\e[1;33;41mENTER ANY TAG(S)  >\e[0;m" 
read TEMPTAGNAME
TAGNAME="+"`echo $TEMPTAGNAME | sed 's/ / +/g'`
if [ -z $TEMPTAGNAME ] ; then TAGNAME=""; fi

while :
do
    clear 
    echo -e "\e[1;33;41mENTER TASK DESCRIPTION (Project:$PRJNAME) >\e[0;m"
    echo -e "\e[1;33;41mor enter again to quit\e[0;m"
    read TSKNAME
        if [ -z $TSKNAME ] ; then exit ; fi 
        task add project\:$PRJNAME $TAGNAME $TSKNAME 1>/dev/null
    echo -e "\e[0;m"
done
0
30.12.2020, 02:09
4 ответа

Не похоже, чтобы было хорошее решение, и лучшее, что я придумал, это использовать ffmpeg для быстрого создания нового файла. Команда, предоставленная @awesome14, не работала у меня в моей системе (в основном работала, но вызывала много ошибок, в результате чего песни не копировались ). Это команда, которую я придумал.

for song in **/*.mp3
   do NAME=$(echo ${song%/*} | sed -e 's|[/ ]|-|g’)
      ffmpeg -y -i $song -vn -c copy /path/NOART/"$NAME-"${song##*/}; 
done

Это работает с оболочками bash5 или zsh.

  1. **/*.mp3Каждый файл, соответствующий.mp3, в каждом каталоге под текущий

  2. echo ${song%/*} | sed -e 's|[/ ]|-|g’преобразовать все косые черты и пробелы в части пути (не в имени файла )до тире

  3. —vn -c copyНе копировать видео (видео нет )и в противном случае копировать файл без изменений

  4. /path/NOART/"$NAME-"${song##*/}сохранить по пути с именем файла, заданным для переменной NAME и базовым именем песни $.

  5. Имя выходного файла будет выглядеть так: «10Cc -Look -Hear -Dressed To Kill.mp3».

Это имеет дополнительное преимущество, поскольку не удаляет все метаданные в песне, а удаляет только «видео», которое в данном случае является обложкой альбома.

1
18.03.2021, 22:39

Существует множество способов использования ffmpeg. Однако перечислять и объяснять их все на онлайн-сайте вопросов и ответов было бы нецелесообразно и неуместно. Существуют разные файлы mp3, которые требуют использования разных методов с ffmpeg.

Существует также несколько различных способов удаления изображений из mp3-файлов с помощью ffmpeg, в зависимости от вашей цели. Некоторым пользователям нужен меньший размер файла, в то время как другие хотят просто предотвратить отображение изображения, потому что оно может понадобиться им позже, поэтому они не хотят от него избавляться.

Документация ffmpeg упрощает детализацию и поиск именно того, что вам нужно.

ffmpeg -i tagged.mp3 -write_xing 0 -id3v2_version 0 untagged.mp3

— это всего лишь один метод. Это будет помещено в цикл for для обработки всех файлов.

0
18.03.2021, 22:39

Вы можете установить kid-cli, который можно использовать для изменения тегов метаданных из CLI. Я никогда не использовал его для удаления обложек альбомов, прежде чем увидел этот вопрос, но я думаю, что понял, как:

for file in **/*.mp3 do (sleep 2; printf %s\\n 'set "Picture:" ""' save exit) | kid3-cli $file; done

Несмотря на то, что это программа cli, kid3 -cli предназначена для интерактивного использования. По этой причине ожидается, что команды будут вводиться в интерактивном режиме. Кроме того, по какой-то причине приведенная выше команда не работает, если нет задержки. Если у вас есть целая куча файлов для обработки, возможно, вы могли бы смягчить это, запустив команду для нескольких файлов параллельно.

for file in **/*.mp3 do (:; (sleep 2; printf %s\\n 'set "Picture:" ""' save exit) | kid3-cli $file)&; done; wait

или:

(sleep 2; printf %s\\n 'set "Picture:" ""' save exit; sleep 2) | kid3-cli *.mp3; done

В последнем случае kid3 -cli также требуется задержка после передачи команд. ИДК почему, но по крайней мере вы можете обрабатывать все свои файлы одновременно.

PS :У меня нет файлов mp3 для проверки, поэтому я использовал файлы ogg/vorbis. Поскольку ogg использует другую систему тегов (vorbis comment ), чем mp3 (id3 ), это может работать одинаково в обоих форматах. Однако этот *должен *нормально работать для mp3 в любом случае.

0
18.03.2021, 22:39

@BowlOfRed справедливо указывает на прямой ответ в своем комментарии с использованием пакета eyeD3. Если это всего лишь один файл,

eyeD3 --remove-all-images filename.mp3

и с учетом исходного вопроса,

for file in **/*.mp3 do eyeD3 --remove-all-images $file; done

1
18.11.2021, 18:36

Теги

Похожие вопросы