d-b Asked: 2023-08-27 22:05:59 +0800 CST2023-08-27 22:05:59 +0800 CST 2023-08-27 22:05:59 +0800 CST 将包含 opus 文件的目录转换为 CSV 或类似文件? 772 我有一个包含作品声音文件的文件夹。我想将该文件夹列表转换为可以在电子表格中使用的内容。我希望结果包含文件名、声音长度和文件大小等内容。如何才能做到这一点? files 1 个回答 Voted Best Answer Stéphane Chazelas 2023-08-27T23:11:50+08:002023-08-27T23:11:50+08:00 我建议exiftool这样做,因为它可以从大多数类型的文件中提取元数据并将其格式化为 csv: exiftool -csv -FileSize -Duration -- *.opus > list.csv 但至少我的版本exiftool似乎不支持从作品文件中提取持续时间。正如 @dodrg 所提到的,ffprobe可以并且还支持将其输出格式化为 CSV: { echo filename,duration,size for file in *.opus; do ffprobe -v warning \ -of csv=p=0 \ -show_entries format=filename,duration,size \ -i "$file" done } > list.csv 但这要慢得多,因为它看起来ffprobe无法一次从多个文件返回信息,因此我们需要为每个文件运行一次调用。 请注意,字段的顺序似乎是固定的。与您是否指定-show_entries format=filename,duration,size或一样-show_entries format=size,filename,duration,字段始终按filename, duration,size顺序列出。 jq您还可以告诉它以 JSON 格式输出所有内容,并使用 和重新设置您想要的字段和顺序的信息格式mlr。mlr还可以帮助您将 由 返回的信息exiftool与 由 返回的信息连接起来ffprobe。 例如: exiftool -csv -- *.opus | mlr --csv join --ijson -f <( for file in *.opus; do ffprobe -v warning -show_format -of json -i "$file" done | jq .format) -j SourceFile -l filename > list.csv 将then cut -f SourceFile,duration,size,Artist... 添加到mlr命令中以将输出限制为您感兴趣的字段。
我建议
exiftool
这样做,因为它可以从大多数类型的文件中提取元数据并将其格式化为 csv:但至少我的版本
exiftool
似乎不支持从作品文件中提取持续时间。正如 @dodrg 所提到的,ffprobe
可以并且还支持将其输出格式化为 CSV:但这要慢得多,因为它看起来
ffprobe
无法一次从多个文件返回信息,因此我们需要为每个文件运行一次调用。请注意,字段的顺序似乎是固定的。与您是否指定
-show_entries format=filename,duration,size
或一样-show_entries format=size,filename,duration
,字段始终按filename
,duration
,size
顺序列出。jq
您还可以告诉它以 JSON 格式输出所有内容,并使用 和重新设置您想要的字段和顺序的信息格式mlr
。mlr
还可以帮助您将 由 返回的信息exiftool
与 由 返回的信息连接起来ffprobe
。例如:
将
then cut -f SourceFile,duration,size,Artist
... 添加到mlr
命令中以将输出限制为您感兴趣的字段。