问题背景
由于之前爷爷的唱戏机充不进去电,过年时给爷爷买了个新的。但这个新买的机子,它的曲目(视频)在U盘里,声音普遍较低,我爷爷的耳朵不好,声音需要比正常的声音调大一些。
在Videolouder这个网站里可以实现调大分贝的诉求,而且是免费的,但是不能批量上传,由于有900多首曲目,我决定看看能否通过编程的方式解决。
解决过程
查阅了网络上的一些方式,对于Python来说,我查到有Pydub、Moviepy、 Ffmpeg可以达到这样的要求。
其中Moviepy不支持“mkv”的视频格式(感觉应该是支持的,因为它底层也是依赖于Ffmpeg,但我自己尝试时是会报错的),而且只能按照原先分贝的倍数调整。(图片地址)。
Pydub使用时需要在Windows上安装Ffmpeg,可以按照增加固定分贝来实现音量增加,但是不支持“mkv”格式(感觉应该是支持的,因为它底层也是依赖于Ffmpeg,但是我自己尝试时,最终出来的mkv视频文件无法读取)(图片地址)。
穿插说一下,为什么非要基于分贝的倍数调整呢?下图给出了答案(图片地址)。不仅如此,Ffmpeg非常强大,对于视频、音频的操作,你能想象到的都能做,业界音视频处理底层大都是Ffmpeg,包括上面提到的Pydub、Moviepy底层都是基于Ffmpeg,有需要可以学一下。
前两种方式代码及使用简单,但是它们都不支持“mkv”格式,所以只能使用稍微繁琐的ffmpeg。
在使用ffmpeg时,它是有Python对应的包的,叫ffmpeg-python,但是你安装了这个按照官网的代码也是不能用的,会报FileNotFoundError: [WinError 2] 系统找不到指定的文件。
,这是因为你不仅需要安装ffmpeg-python,还需要在本机上安装Ffmpeg。有许多文章写Windows如何安装ffmpeg的,安装挺简单的,主要就是要记得配置环境变量,这里就不写了。
安装成功后,在利用ffmpeg-python编写语句时,我找了半天都没有找到提高视频音量的语句,不想研究了,因为我日后可能也用不到这个东西。最后只能用ffmpeg的CMD呢种方式,没想到CMD还可以通过Python来进行书写。在配置完Ffmpeg后,要重新启动PyCharm,否则还会报一个乱码的错。
以下为成功的代码:
import os
cmd = "ffmpeg -i C:/C/ForMyGrandfather/456.杨钰莹毛宁心雨.mkv -filter:a volume=10dB C:/C/ForMyGrandfather/456.杨钰莹毛宁心雨2.mkv"
os.system(cmd)
音量成功增加。
如果要批量的话,只需要读取目录中所有文件名(利用Python的“os”包可以实现,网络上代码很多,这里不写了),然后每次更改”cmd“语句里的文件名称即可,可以利用“format”来实现,像下面这样,在外面套一个for循环进行拼接即可。
print("地址{}地址".format("C:C:/C"))
结果
在Videolouder中推荐提高3分贝,这个果然是有道理的,像我上面代码提高了10分贝,在唱戏机调到最大音量时,声音明显变大了,但杂音非常多。
还没有完,我又分别尝试了二三十的耳机,一百出头的耳机,一千多的耳罩式耳机,发现越贵的耳机杂音越小,而且耳罩式的耳机声音异常的大,还没杂音,所以我在网上买了一个不到一百元的耳机,等回来之后我看看效果怎么样,如果还不行,我会整体调高3分贝或5分贝的音量。