`ffprobe` 比 `metaflac` 慢 12 倍。如何加快 `ffprobe` 的​​速度?

`ffprobe` 比 `metaflac` 慢 12 倍。如何加快 `ffprobe` 的​​速度?

在一个包含 1593 个文件的小型 FLAC 文件夹中,ffprobe运行时间比 长 12 倍以上metaflac。如何加快 的单线程性能ffprobe

我尝试告诉ffprobe它执行相同的操作并通过运行仅打印VORBIS_COMMENT或字段,但不幸的是这并不能提高性能。TAGffprobe -show_entries format_tags ..

此脚本搜索可能的 URL:

1. ffprobe

$ time find . -type f -iname "*.flac" -print0 | while read -d $'\0' FILENAME; do
    INFOS=$(ffprobe -hide_banner "$FILENAME" 2>&1)
    URL=$("$INFOS"|& grep -i 'http\|www')
    if [ "$URL" != "" ]; then
        echo -e "$FILENAME\t$URL"
    fi
done | column -t -s $'\t'

2. metaflac

(只有这一行不同:)

...
    INFOS=$(metaflac --list --block-type=VORBIS_COMMENT "$FILENAME" 2>&1)
...

基准:

CPU 是 Ryzen 5600X,文件位于外部 850 EVO 1TB SSD 上。

单线程基准测试:

$ 时间查找..
metaflac real 0m2,579s
mediainfo real 0m14,222s
ffprobe real 0m32,379s
exiftool real 1m21,881s

编辑 为了加快速度,我修改了代码以并行运行:

getURLs() {
    FILENAME=$1
    URL=$(mediainfo "$FILENAME" 2>&1 | grep -i 'http\|www')
    if [ "$URL" != "" ]; then
        echo -e "$FILENAME\t$URL"
    fi
}

find . -type f -iname "*.flac" -print0 | while read -d $'\0' FILENAME; do
    getURLs "$FILENAME" &
done | column -t -s $'\t'

wait

这个并行化的脚本版本充分利用了我的 5600X CPU,并且性能似乎受到 CPU 限制:

多线程基准测试:

$ 时间查找..
metaflac real 0m0,695s
mediainfo real 0m2,109s
ffprobe real 0m4,844s

我要求提高单线程速度ffprobe,因此我不会将其标记为解决方案,尽管这确实是一个很好的速度改进。

相关内容