首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用eyeD3 with,xargs设置mp3标记

使用eyeD3 with,xargs设置mp3标记
EN

Stack Overflow用户
提问于 2022-11-29 22:57:09
回答 1查看 21关注 0票数 1

再一次,为了自我学习练习,尝试重新发明轮子:

有声书文件格式:

代码语言:javascript
复制
filenames        : titletag
001 bookname.mp3 : bookname
002 bookname.mp3 : bookname
003 bookname.mp3 : bookname

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

我尝试过各种构造(见下文),但除了逐个文件地执行它之外,我无法理解一个脚本,它将执行目录中的所有文件。

要设置标题标记,eyeD3需要eyeD3 -t "new tag" FILENAME

eyeD3 filename返回

代码语言:javascript
复制
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。

代码语言:javascript
复制
eyeD3 001 bookname.mp3 | awk  '/track/ {print $2}' | xargs I% sh -c 'eyeD3 -t % "001 bookname.mp3"'

因此,此代码是一个概念,但会引发一个错误:

代码语言:javascript
复制
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的组合/排列令人难以置信。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-30 01:08:57

假设mp3文件位于currect目录中,请尝试:

代码语言:javascript
复制
#!/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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74621128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档