ffmpeg音视频文件音视频流抽取,初步尝试人声分离
文章目录ffmpeg抽取音视频文件中的音频流音频流类型AAC与m4a的区别AAC与mp3的区别用ffmpeg查看视频的信息用ffmpeg抽取AAC音频流从AAC文件中获取音轨音轨是什么东西分离人声和背景声测试系统介绍安装测试查看效果ffmpeg抽取音视频文件中的H264视频流ffmpeg抽取音视频文件中的H265数据参考链接ffmpeg抽取音视频文件中的音频流音频流类型音频流主流上可分为AA...
文章目录
ffmpeg抽取音视频文件中的音频流
音频流类型
音频流主流上可分为AAC、m4a、mp3,
AAC与m4a的区别
AAC是一种音频编码形式,m4a是一种封装形式。打个比方,如同橙汁可以被封装在易拉罐里一样,aac如同橙汁,m4a如同易拉罐。m4a是一种多功能的封装工具,可以装进无损的 Apple Lossless 音乐(就是苹果手机里的无损音乐),甚至MP3也可以封装进m4a里。
aac有两种,DVD时代的 MPEG-2 AAC 和 高清时代的 MPEG-4 AAC。比较老的 MPEG-2 AAC 标准已经淘汰了,这种编码的音频通常用 .aac 后缀;现在的 aac 音频都是 MPEG-4 AAC 标准的,一般都是用 m4a 来封装,后缀是 .m4a 。
m4a最早就是苹果用来封装它自己的 Apple Lossless 的,苹果的全系列设备都可以完美支持。
采用AAC音频编码形式并且扩展名有AAC.M4A.MP4这三种,不同的硬件可能支持不同的扩展名.如果遇到你的播放器支持播放AAC却不能播放你放进去的AAC歌曲时.可以改正下扩展名就可以了。
综上所述M4A与AAC的区别就是,他是属于AAC众多编码中的一种,而且是属于编码众多编码中优化最好的一种,所以通过该编码压缩处理的音乐,音质也是极好极好的。
AAC与mp3的区别
两者都是有损压缩音频编码的方式,但市面上显然mp3的普及度要比aac高的多
用ffmpeg查看视频的信息
使用-i参数可以在命令行中显示视频的信息,包含视频文件的音视频编解码格式,视频时长,比特率等,方便我们做进一步的处理
ffmpeg.exe -i 1.mp4
输出如下
用ffmpeg抽取AAC音频流
在命令行中使用命令
ffmpeg.exe -i 1.mp4 -vn -acodec copy output.aac
即可从1.mp4中抽取出音频流output.aac
从ffmpeg的输出信息中可以看到,输入的视频文件中包含视频流和音频流,输出信息中只有音频流
从AAC文件中获取音轨
音轨是什么东西
音轨就是在音序器软件中看到的一条一条的平行“轨道”。每条音轨分别定义了该条音轨的属性,如音轨的音色,音色库,通道数,输入/输出端口,音量等
分离人声和背景声
提取音轨与分离人声和背景声可能不是一回事,尝试使用一个叫做spleeter把一个视频中人声和背景声区分开来
测试系统介绍
- 系统版本为:ubuntu14.04.5
- ffmpeg版本:采用apt-get ffmpeg自动安装
- Python版本:3.6.5(anaconda3 5.2自带版本)
安装
因为是测试,所以没有使用GPU版本,采用的是CPU版本,可以通过pip来安装
pip install spleeter
需要使用的TensorFlow版本为1.4,对应的python版本最大为3.6
测试
测试使用两个文件,第一个为自带音频文件的audio_example.mp3;第二个为视频文件2.mp4
分别使用命令,在文件夹output得到运行后的结果
./spleeter separate -i audio_example.mp3 -p spleeter:2stems -o output
./spleeter separate -i 2.mp4 -p spleeter:2stems -o output
输出文件夹内容:
在使用的时候会自动下载模型文件,也可以预先下载后放到文件夹/pretrained_models/2stems中,跟spleeter同级目录
查看效果
输出的.wav文件比原视频要大不少,不过结果还是不错的
能正确分离出来了人声,背景声虽然略带人声,但应该是做了模糊,会不那么清晰
源文件和输出文件可见下载:
https://download.csdn.net/download/zengraoli/12201519
ffmpeg抽取音视频文件中的H264视频流
有时在视频编辑场景中需要将视频流提取出来进行编辑,比如给视频重新配音等,这时就需要单独提取视频流了,用ffmpeg的命令提取出视频文件的视频流如下
ffmpeg.exe -i 1.mp4 -vcodec copy -an output.mp4
用-i查看输出视频,可看出仅有一个视频流
ffmpeg抽取音视频文件中的H265数据
首先需要看一下包含h265视频的视频流显示的内容
提取h265视频流的方式则对应为
ffmpeg.exe -i video-h265.mkv -vcodec copy -an 2.mkv
如果h265视频包含在mp4容器里,需要使用如下命令
ffmpeg.exe -i video-h265.mp4 -vcodec copy -an -bsf hevc_mp4toannexb -f hevc
因为在mp4中存储的视频数据并不是标准的annexb格式,需要将mp4的视频存储格式存储为annexb格式
来看看提取出来的h265视频
用支持的播放器,比如WMP即可直接播放
参考链接
更多推荐
所有评论(0)