在一个包含 1593 个文件的小型 FLAC 文件夹中,ffprobe
运行时间比 长 12 倍以上metaflac
。如何加快 的单线程性能ffprobe
?
我尝试告诉ffprobe
它执行相同的操作并通过运行仅打印VORBIS_COMMENT
或字段,但不幸的是这并不能提高性能。TAG
ffprobe -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
,因此我不会将其标记为解决方案,尽管这确实是一个很好的速度改进。