列出 MP3 文件和持续时间

列出 MP3 文件和持续时间

所以我想显示 MP3 文件及其持续时间的列表。

ffprobe确实显示了文件的持续时间。但它的输出却很糟糕。它把所有的东西都放进去stderr,我发现没有办法删除它关于它是如何编译的“非常有用”的信息。

因此,如果我循环它*.mp3,每次都会显示该信息。

我可以编写一个过滤器脚本,但可能有更简单的解决方案吗?

答案1

要获得这样的输出:

00:07:22 first.mp3
00:02:33 second.mp3
00:04:04 third.mp3

使用:

for file in *.mp3
do
  echo -n $(ffprobe "$file" 2>&1 | grep 'Duration' | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1)
  echo " $file"
done 

在哪里

  • 2>&1将 stderr 重定向到 stdout
  • grep ...仅过滤具有持续时间的行
  • 第一次cut ...摘录Duration: 00:07:22.33
  • 第二次cut ...摘录00:07:22.33
  • 第三次cut ...摘录00:07:22

答案2

您可以轻松地删除使用stderr-loglevel -quiet选项输入的信息。在这种情况下,您必须查询要显示的字段。

[user@host ~]$ ffprobe -loglevel quiet -show_entries format=duration test/test.mp3 
[FORMAT]
duration=172.434286
[/FORMAT]

现在,这仍然提供了一些可以精简的额外信息以及以秒为单位的持续时间。

[user@host test]$ ffprobe -loglevel quiet -show_entries format=duration \-print_format default=noprint_wrappers=1:nokey=1 -pretty test.mp3 
0:02:52.434286

在这里,-print_format可以使用 来消除额外的信息:

  • default=noprint_wrappers=1会删除这些[FORMAT]东西
  • nokey=1将删除键名duration=

最后但并非最不重要的一点是,您可以使用-pretty或 只是-sexagesimal将持续时间(以秒为单位)转换为某种HH:MM:SS.MICROSECONDS格式。


要查找文件夹中的所有 MP3 文件,您可以结合上面的命令findffprobe

[user@host ~]$ find test/ -name '*mp3' -printf "%f:\t" -exec ffprobe -loglevel error -print_format default=noprint_wrappers=1:nokey=1 -pretty -show_entries stream=duration "{}" \;
test.mp3:   0:02:52.434286

相关内容