eyeD3与find, xargs设置mp3标签



再次尝试重新发明轮子-自我学习练习:

有声书文件格式:

filenames        : titletag
001 bookname.mp3 : bookname
002 bookname.mp3 : bookname
003 bookname.mp3 : bookname

在我的播放器(VLC)中,我在播放列表中只看到书名,这使得很难知道我在听什么章节。我在睡觉的时候听,所以第二天我试着回来看看我在做什么。

我已经尝试了各种结构(见下文),但除了一个文件一个文件地做之外,我无法理解一个脚本将处理目录中的所有文件。

设置标题标签eyeD3期望eyeD3 -t "new tag" FILENAME

eyeD3 filename返回

Time: 07:52 MPEG1, Layer III    [ 64 kb/s @ 44100 Hz - Mono ]
----------------------------------------------------------------------------------------------
ID3 v2.3:
title: 1
artist: Some Author
album: bookname
track: 1        
UserTextFrame: [Description: year]
2014
FRONT_COVER Image: [Size: 38061 bytes] [Type: image/jpeg]
Description: Album cover

这行行得通,IIRC

eyeD3 001 bookname.mp3 | awk  '/track/ {print $2}' | xargs I% sh -c 'eyeD3 -t % "001 bookname.mp3"'

这段代码就是概念但是会抛出一个错误:

find .  -iname "*.mp3" -exec eyeD3 -t "{}" {}
find: Only one instance of {} is supported with -exec ... +

这个结构,如果它工作的话,将把文件扩展名放在标签中。

我想把文件名,甚至只是曲目号到标题标签(只是为了知道如何做进一步的字符串操作)

我花了半个晚上的时间阅读find/xargs,但仍然找不到解决方案。我希望能够提取track:num标签并使用它,但这也是我无法理解(微薄?)eyeD3文档足够做的。如果可能的话。我想我可以循环使用标签重命名文件

我确实使用Easytag实现了我的目标,但我确实喜欢学习命令行(脚本)编程。find(exec)/sed/awk/xargs的组合/排列让我感到难以置信。

假设mp3文件位于当前目录中,您会请尝试:

#!/bin/bash
for f in *.mp3; do                                      # loop over *.mp3 files
track=$(eyeD3 "$f" | awk '/track/ {print $2}')      # extract track number
echo eyeD3 -t "$track" "$f"                         # print the command line
done

如果输出正常,则去掉echo

最新更新