4k+个*.m4a音频文件,怎么才能快速查看文件里有没有内容呢?

现在有4k+个*.m4a音频文件,大小大多都在几十k到两三千k之间;时长大多都在几十秒钟到几分钟之间,个别近小时。
已知这些音频文件中一定有一些是没有任何声音的,但是不知道具体数量有多少个,更不知道具体是哪些个文件。
怎么才能最高效(不用一个一个打开播放)地从中把没有声音的m4a文件全部都一个不落找出来?
ps:1⃣️我用Windows电脑;2⃣️没有声音的文件和有声音的文件大小没有明显区别,通过比较文件大小不能解决这个问题。

没有任何声音是啥意思,
是比如晚上无人的地方录制的声音,实际上还是会有微弱噪音。
还是 彻底的空白,比如 录音电路压根没通电 时录制的声音。

如果一点声音都没有,那我个人认为应该能从文件大小区别吧,只有一直有杂音才能让文件有比较大的体积吧大概

算峰值电平?小于某个阈值的文件算作没声音

如果有声音和没声音的文件响度差别很大,使用响度筛选即可。如果所谓没有声音包含低噪、白噪声,或者有声音的文件响度也不大,则比较麻烦,可能需要检测波形。

鉴于题主说文件大小差别不大,文件可能只是没有有效声音,而不是完全没有声音。

就是用播放器播放的时候耳朵听不到任何声音,但是文件大小看不出来没有内容的话,我猜可能只是人耳听力范围内的没声音吧。

这个怎么做呢?

让gpt替你写个程序就可以了,现在不方便测试就不贴答复了。

写一个Python程序,扫描一个目录下的所有音频文件,并计算这些文件的平均响度a、最高响度b,最后按平均响度a排序,输出a,b,文件路径到一个csv文件中

甚至可以要求他为你移动文件

一个猜想:转码成mp3,音质选128k以下,然后比较压缩率。或者再找个压缩失真更高的压缩算法,比较压缩率

用foobar扫描播放增益值(ReplayGain),扫描结束后保存到文件标签。
然后,新建一个RG值列,显示脚本为%replaygain_track_gain%,把这列按值从高到低的顺序排列。
最后,因为没声音的文件理论上RG值会比较高(比较大的负数或者比较小的正数),所以排在前面的文件大多数应该就是没声音的文件,这样就挑选出来了。

可以使用Python的pydub库,具体写法可以让ChatGPT给你弄个例子,比如

import os
import glob
from pydub import AudioSegment

import sys

files = sys.argv[1:]

for file_pattern in files:
    for filename in glob.glob(file_pattern):
        if os.path.isdir(filename):
            for root, _, fnames in os.walk(filename):
                for fname in fnames:
                    if fname.endswith('.m4a'):
                        filepath = os.path.join(root, fname)
                        audio = AudioSegment.from_file(filepath)
                        volume = audio.max_dBFS
                        if volume < -30:
                            print(filepath)
        elif filename.endswith('.m4a'):
            audio = AudioSegment.from_file(filename)
            volume = audio.max_dBFS
            if volume < -30:
                print(filename)

可以找出最大volume小于-30dB的文件,至于有没有效果,需要你自己去试了。