再一次,为了自我学习练习,尝试重新发明轮子:
有声书文件格式:
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的文章,但仍然找不到解决办法。我很想能够提取出音轨:num标记并使用它,但这也是我无法理解的(贫乏?)eyeD3文档已经足够做了。如果可能的话。我想我可以通过循环来使用标记重命名文件。
我确实使用Easytag实现了我的目标,但我确实喜欢学习命令行(脚本)编程。我发现find(exec)/sed/awk/xargs的组合/排列令人难以置信。
发布于 2022-11-30 01:08:57
假设mp3文件位于currect目录中,请尝试:
#!/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。
https://stackoverflow.com/questions/74621128
复制相似问题