我有一个音频文件库,其组织方式如下Audio/ArtistName/AlbumName/TrackName.ext
。许多元数据都是不正确的,我想使用FFmpeg 元数据一次性更正所有文件。
我发现这篇文章可以在子文件夹内的文件上执行命令。但是,我仍然需要子文件夹的名称ArtistName
和子文件夹内的文件,AlbumName
才能在每个音频文件上执行命令:
ffmpeg -i inputfile -metadata artist="Subfolder Artist Name" -metadata album="Subfolder Album Name" outputfile
如何根据文件所在子文件夹的名称编辑文件元数据?
编辑:我正尝试在 Linux CLI 或 Bash 脚本中执行此操作。我尝试遍历文件夹(艺术家),然后遍历其中的子文件夹(专辑),然后循环遍历文件并根据艺术家文件夹和专辑子文件夹的名称值运行命令。我曾尝试过循环遍历文件夹,但它不适用于子文件夹,无法对子文件夹中的文件执行命令。我能够返回艺术家和专辑名称,但我仍然无法获取曲目名称。cd
进入艺术家文件夹有效,但进入专辑文件夹无效
for artist in /tank/music/*/
do
art= basename "${artist}"
cd "${artist}"
for album in ./*/
do
alb= basename "${album}"
cd "${album}"
for track in ./*/
do
echo "${art}"
echo "${alb}"
echo "${track}"
done
done
done
如果您
cd
降低了一个级别,则必须cd
先退出,然后才能处理同一级别的另一个值。我认为轨道是文件而不是目录。
未经测试:
cd 退出:
或者使用 subshell,以便 cd out 隐式:
或者一开始就不要 cd:
替代方法: