Shell-Script

海量 .flac –> .mp3 轉碼:如何編寫保留 ID3 標籤資訊的 shell 腳本?

  • January 7, 2017

最近幾週,我已經從一種相當“親力親為”的 .flac –> .mp3 轉碼方法轉變為一種更加“設置並忘記”的方法。

第一步是停止使用 GUI 前端(帶有 LAME 外掛的 Audacity),而是使用我在此處概述的方法。

第二步是找到一個 bash shell 腳本,它會告訴命令循環以遞歸方式工作,從而允許在一個簡單的步驟中對具有許多包含 .flac 文件的子目錄的目錄進行轉碼。該答案由 askubuntu.com 的使用者提供。

現在我想學習如何進一步細化,以便保留 ID3 標籤資訊。連結到上述 ID3 標記數據的方法,只剩下最少的部分(即僅保留標題欄位)。

誰能教我如何編寫這樣的shell腳本?


shell 腳本已更新如下:

#!/bin/bash
file="$1"
flac -cd "$file" | lame --preset fast extreme - "${file%.flac}.mp3"
id3cp "$file" "${file%.flac}.mp3"

在 ~/Desktop/ stackfind . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \;中進行操作會得到以下輸出:

01 - Amon Tobin - Chomp Samba.flac: done         
LAME 3.98.4 64bits (http://www.mp3dev.org/)
Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz
Encoding <stdin> to ./01 - Amon Tobin - Chomp Samba.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)
Parsing ./01 - Amon Tobin - Chomp Samba.flac: done.  Copying to ./01 - Amon Tobin - Chomp Samba.mp3: done

id3info對於原始 .flac 和生成的 .mp3 分別給出:

*** Tag information for 01 - Amon Tobin - Chomp Samba.flac

(即什麼都沒有);

*** Tag information for 01 - Amon Tobin - Chomp Samba.mp3
*** mp3 info
MPEG1/layer III
Bitrate: 128KBps
Frequency: 44KHz

.flac 肯定有標籤資訊。我可以通過打開 EasyTAG 來驗證這一點。EasyTAG 將其稱為“FLAC Vorbis Tag”,而 .mp3 則稱為“ID3 Tag”。這是問題嗎?

#!/bin/sh

file="$1"
outfile=${file%.flac}.mp3

eval $(metaflac --export-tags-to - "$file" | sed "s/=\(.*\)/='\1'/")

flac -cd "$file" | lame --preset fast extreme \
       --add-id3v2 --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \
       --ty "$DATE" --tn "$TRACKNUMBER" --tg "$GENRE" \
       - "$outfile"

如何使用 mp3fs 將 flac 批量編碼為 mp3

您可以使用 mp3fs 將它們呈現為虛擬 mp3,以及可以將復製作業排隊的程序,而不是使用程序將 flac 文件轉換為 mp3。它對我來說非常好用。

下載並安裝 mp3fs 和超級複印機:

sudo apt-get install mp3fs ultracopier

為要執行的每個 mp3fs 創建一對 flac 和 mp3 目錄。我有一個雙核 cpu,所以我執行兩個。如果將 flac 目錄保留在 flac 文件所在的分區上,則可以快速移動它們。該分區在我的系統上稱為“儲存”。

cd /media/Storage
mkdir mp3fs mp3fs/flac_1 mp3fs/mp3_1 mp3fs/flac_2 mp3fs/mp3_2

您可以從命令行掛載目錄或將它們添加到/etc/fstab. 您還可以在掛載時配置虛擬 mp3 的比特率和編碼算法。我想要具有 320kbps 恆定比特率的 mp3,而跛腳可能需要花費所有時間才能產生最好的 mp3。

在命令行上:

mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 -o allow_other,ro
mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 -o allow_other,ro

如果保險絲抱怨,比如

fusermount:無法打開 /etc/fuse.conf:權限被拒絕

fusermount:選項 allow_other 僅在 etc/fuse.conf 中設置了“user_allow_other”時才允許

然後取消註釋中的user_allow_other選項/etc/fuse.conf,和/或使其可讀

sudo chmod 644 /etc/fuse.conf

或來自/etc/fstab

mp3fs#/media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 fuse user,ro,allow_other,bitrate=320,quality=0 0 0
mp3fs#/media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 fuse user,ro,allow_other,bitrate=320,quality=0 0 0

將目錄添加到後/etc/fstab,您可以使用

sudo mount -a

完畢!啟動超級複印機。它會在您的 gnome 面板或您使用的任何東西中放置一個指示器圖示。點擊它,選擇添加副本。我做了兩次以使用兩個核心。使用您的文件瀏覽器將一些flac 移動到flac_1。導航到 mp3_1 目錄,然後將您的 mp3 拖到超級複印機視窗之一以啟動複製隊列。Ultracopier 將詢問文件的目的地。您現在有一個核心忙於將一批 flacs 編碼為 mp3。

要使用另一個核心,請將 flac 文件移動到 flac_2,然後將 mp3 從 mp3_2 拖到第二個超級複印機視窗。

更新:我現在使用 MiniCopier 而不是超級複印機,它更容易使用。請參閱下面的評論。

引用自:https://unix.stackexchange.com/questions/10168