通常情况下,我们提到“视频”会有两个要素,声音和画面。但其实严格意义上说视频中含有视频流音频流,如果一个视频只有视频流,那么就只有画面没有声音,反之亦然。

我有听英语电影原声的习惯,但是总是放视频很不方便,网上的资源又不是太称心如意,就想着自己动手来分离,我首先想到的是 ffmpeg。

我们先来看看视频中的这两个流

1
$ ffmpeg -i mavel4.mp4

使用 ffmpeg 分离视频流和音频流-LMLPHP

执行该命令可以直接查看视频的信息,其中就有刚才的提到的视频流(Video: h264)音频流(Audio: aac)

使用参数 -vcodec copy -an-acodec copy -vn 可以分离出视频流和音频流。

分离视频

1
$ ffmpeg -i mavel4.mp4 -vcodec copy -an mav.mp4

等待转码成功后,观看 mav.mp4 发现已经没有声音了,查看发现只有一个流

使用 ffmpeg 分离视频流和音频流-LMLPHP

分离音频

1
$ ffmpeg -i mavel4.mp4 -acodec copy -vn m.m4a

再次查看音频流信息

使用 ffmpeg 分离视频流和音频流-LMLPHP

网上很多博客都是直接甩一个类似这样的命令

1
$ ffmpeg -i mavel4.mp4 -acodec copy -vn m.mp3

如果你执行的话,多半会报错,因为查看视频信息,很可能像例子中的音频流一样是 aac 格式的,什么是 aac 格式呢

关键是下面这句

也就是说,现在很多视频的音频流都将是这个格式,那直接分离 mp3 格式的音频自然会报错。

那我就是想要 mp3 的音频该怎么办呢?

再来一次转码

1
$ ffmpeg -i m.m4a m.mp3

或者直接将视频转码为 mp3 格式。

1
$ ffmpeg -i mavel4.mp4 m.mp3
03-16 16:18