20210903----追加:
================================================================
这是之前发的一篇博客,现在来看,vlc的本质其实是一个播放器,处理音视频流,重点在于播放,所以在流传输的过程中一直涉及到时间的控制,用来分离音视频,还真的很为难,会很慢,因为只是利用的存文件的功能把原本用来播放的视频流输出到文件了,所以按照下面的方法分离音视频,你可能要把整个文件慢慢地从头播到尾,才完整地分离出来。 不合适,如果只是单纯想分离音视频,即解复用,直接用ffmpeg, 不会涉及到时间戳,单纯解复用或者转码:
ffmpeg -i 2018.mp4 -codec copy -bsf: h264_mp4toannexb -f h264 tmp.264
注释:
-i 2018.mp4: 是输入的MP4文件
-codec copy: 从mp4中拷贝
-bsf: h264_mp4toannexb: 从mp4拷贝到annexB封装
-f h264: 采用h264格式
tmp.264: 输出的文件
====================================================================
环境 window ,vlc播放器
使用vlc的串流功能,将视频文件中的 音频视频(编码流,比如 mp4文件中的h264,或者是其他的流)分离,输出到文件。
点击添加,选择要分离的视频文件
点击串流:
点击下一步
点击添加,设置一个要输出到的文件名称。
点下一个,进行输出配置,配置文件 播放器有几个默认的配置,现在我们是提取源数据,把激活转码去掉(其实没有关系,为了不必要的问题,还是去掉吧)
重点是这个自定义的配置,封装格式里面选择 RAW,即不封装
视频编解码器里面,勾上视频,保持原视频轨
音频里面,我们现在只提取视频,全部不勾选,同理,字幕也不选
最后,点击流
到这里大概也看出来了,根据这个自定义的配置,能实现的功能,可多了,比如 文件格式转换,甚至是转码,或者是输出到网络流等等,vlc自带有一部分定义好的常用配置,比如搭建rtsp流服务器。
如果需要提取的时候同时本地播放,(这样便于观察),在选择流输出配置的时候勾选上 在本地显示即可
20190523:补充,后续再使用的过程中发现有些问题,经常没有文件输出,查看了vlc源码发现问题(这应该是一个bug)
解决:在最后一步流输出,生成的字符串中,显示地指明 用 raw 格式封装。即上面的
file{dst=E:\\test\\XX,no-overwrite}
改为: file{mux=raw,dst=E:\\test\\XXX,no-overwrite}
xxx为输出的文件。 这个原因在于,如果没有显示指明mux=raw的话, vlc内部会根据你的输出文件名称后缀名去猜测你要封装的格式,但是我从其源码上看出来,没有后缀名为.raw 的格式匹配,所以最好显示指明。(也许这是版本的一个bug)