昨天推荐了一个线上加工视频的网站,可以对mp4文件的音量进行增强。我分析了一个它可能的实现方式,于是有了这篇文章。
线上工具版
hyang0,公众号:生有可恋如何提高mp4视频文件的声音
在线工具的操作界面如下:

网站对视频文件的大小做了限制,毕竟免费的工具也是要占用服务器资源的。同时上传视频至外部网站也存在信息泄露的风险,如果能自己实现当然更好。线上工具提供的方法是通过增加/减少分贝来调整音量,而之前尝试的剪辑工具则是设置百分比,增加150%或200%这种来达到让音量倍增的效果。调整分贝值对于非专业人士并不友好,因为大家并不了解分贝对应的声音强度,并且在尝试过程中,重新编码后的音频有可能会出现破音,因为声音是个波形,增加的太多就会形成噪音和失真。
在试过 ffmpeg 之后,我大概了解这个线上工具是怎么做的了。ffmpeg 是个处理音视频的开源软件,几乎大部分的视频软件和公司都在用它。我们在剪辑软件上看到的增加音量的功能可能就是用它做出来的。
在使用 ffmpeg 之前先要安装它,在 Ubuntu 系统上安装过程为:
$ sudo apt-get install ffmpeg[sudo] password for hyang0:Reading package lists... DoneBuilding dependency treeReading state information... DoneThe following additional packages will be installed:i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libavcodec58 libavdevice58 libavfilter7 libavformat58libavresample4 libavutil56 libbdplus0 libbluray2 libbs2b0 libchromaprint1 libcodec2-0.9 libdc1394-22libfftw3-double3 libflite1 libgme0 libgsm1 libigdgmm11 liblilv-0-0 libmysofa1 libnorm1 libopenal-data libopenal1libopenmpt0 libpgm-5.2-0 libpostproc55 librubberband2 libsdl2-2.0-0 libserd-0-0 libshine3 libsnappy1v5 libsndio7.0libsord-0-0 libsratom-0-0 libssh-gcrypt-4 libswresample3 libswscale5 libva-drm2 libva-x11-2 libva2 libvdpau1libvidstab1.1 libx264-155 libx265-179 libxvidcore4 libzmq5 libzvbi-common libzvbi0 mesa-va-driversmesa-vdpau-drivers ocl-icd-libopencl1 va-driver-all vdpau-driver-allSuggested packages:ffmpeg-doc i965-va-driver-shaders libbluray-bdj libfftw3-bin libfftw3-dev libportaudio2 serdi sndiod sordiopencl-icd libvdpau-va-gl1 nvidia-vdpau-driver nvidia-legacy-340xx-vdpau-driver nvidia-legacy-304xx-vdpau-driverThe following NEW packages will be installed:ffmpeg i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libavcodec58 libavdevice58 libavfilter7libavformat58 libavresample4 libavutil56 libbdplus0 libbluray2 libbs2b0 libchromaprint1 libcodec2-0.9 libdc1394-22libfftw3-double3 libflite1 libgme0 libgsm1 libigdgmm11 liblilv-0-0 libmysofa1 libnorm1 libopenal-data libopenal1libopenmpt0 libpgm-5.2-0 libpostproc55 librubberband2 libsdl2-2.0-0 libserd-0-0 libshine3 libsnappy1v5 libsndio7.0libsord-0-0 libsratom-0-0 libssh-gcrypt-4 libswresample3 libswscale5 libva-drm2 libva-x11-2 libva2 libvdpau1libvidstab1.1 libx264-155 libx265-179 libxvidcore4 libzmq5 libzvbi-common libzvbi0 mesa-va-driversmesa-vdpau-drivers ocl-icd-libopencl1 va-driver-all vdpau-driver-all0 upgraded, 58 newly installed, 0 to remove and 287 not upgraded.Need to get 46.2 MB of archives.After this operation, 209 MB of additional disk space will be used.Do you want to continue? [Y/n] y
可以看到安装 ffmpeg 会安装大量的依赖,因为处理视频的过程会大量用到第三方的编解码器。
安装完 ffmpeg 后,我们就可以用它来提升 mp4 文件的音量了,比如类似上述线上工具的功能,在命令行上是这样操作的:
$ ffmpeg -i test.mp4 -filter:a "volume = 10dB" -strict -2 output.mp4
增加音量就在 "volume = 10dB" 中更改数字即可,其中 -strict -2 是因为我的 mp4 文件的编码有点问题,在 ffmpeg 处理时提示需要加这个参数,如果不加可以执行,就不需要加。在不加 -strict -2 时,我的执行结果如下:
$ ffmpeg -i test.mp4 -filter:a "volume = 10dB" output.mp4ffmpeg version 2.8.17-0ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developersbuilt with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609configuration: --prefix=/usr --extra-version=0ubuntu0.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencvlibavutil 54. 31.100 54. 31.100libavcodec 56. 60.100 56. 60.100libavformat 56. 40.101 56. 40.101libavdevice 56. 4.100 56. 4.100libavfilter 5. 40.101 5. 40.101libavresample 2. 1. 0 2. 1. 0libswscale 3. 1.101 3. 1.101libswresample 1. 2.101 1. 2.101libpostproc 53. 3.100 / 53. 3.100Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41title : EVCapture4.1.9软件录制encoder : Lavf57.25.100comment : 本视频由湖南一唯信息科技开发的EV录屏软件录制,www.ieway.cnDuration: 00:04:33.72, start: 0.023220, bitrate: 534 kb/sStream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080, 402 kb/s, 18.86 fps, 20 tbr, 10240 tbn, 40 tbc (default)Metadata:handler_name : VideoHandlerStream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)Metadata:handler_name : SoundHandlerFile 'output.mp4' already exists. Overwrite ? [y/N] y[libx264 @ 0x150cf20] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2[libx264 @ 0x150cf20] profile High, level 4.0[libx264 @ 0x150cf20] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=34 lookahead_threads=5 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=20 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00[aac @ 0x150de80] The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
在最后一行提示需要加参数,按提示进行操作即可,提示信息也说的很清楚,编码器没有激活,如果需要激活需要增加额外参数。
[aac @ 0x150de80] The encoder 'aac' is experimental but experimental codecs are not enabled,add '-strict -2' if you want to use it.
除了通过增加分贝值的形式来调整音量,还可以通过百分比的形式来调整音量,以下命令行将音量提高至200%,即音量增加了一倍。
$ ffmpeg -i test.mp4 -filter:a "volume = 2" -strict -2 output.mp4
有了这个工具,以后再也不用担心录音时话筒声音小了,同时也可以实现视频工具自由,不用再去看那些收费的视频剪辑软件了,它们也就是把开源的东西包一层,还卖的死贵,自己动手丰衣足食。
关于 ffmpeg 的更多功能可以参考以下文章:
https://trac.ffmpeg.org/wiki/AudioVolume
https://ffmpeg.org/ffmpeg.html
https://github.com/aisuhua/ffmpeg-demo
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。




