简单几招教你玩转音视频 DIY

Posted Data-Mining

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单几招教你玩转音视频 DIY相关的知识,希望对你有一定的参考价值。

目录

前言

正文

一、概念解惑

1. 视频

2. 音频

3. 工具

二、音视频 DIY

1. 原始视频文件

2. 单独抽离音频

3. 单独抽离视频

4. 任意组合音频和视频文件

结尾


前言

很多时候,大家都会想自己操作一下身边的音频文件和视频文件,当有这个想法时,大概率会想到使用各种剪辑工具。那我们有没有别的更加简单的选择呢?必须的,今天就来带大家掌握一门新的技术,可以只要视频文件中的音频或者视频,还有任意组合两个音频和视频文件。

正文

一、概念解惑

1. 视频

日常生活中,我们通常所说的视频文件其实包括视频和音频两部分,再直白一点的说法就是画面和声音两部分,常见的视频文件有 mp4、flv、avi、rmvb 等。

2. 音频

日常生活中,常说的音频文件就是纯音频文件,比如常见的 mp3、aac 等。

3. 工具

查看视频文件媒体信息的工具,一般用 ffprobe 或者 mediaInfo,前者是命令行工具,后者带有图形用户界面,比较适合入门选手和小白同学使用。

mediaInfo 的使用方式也非常简单,只需要把视频文件拖拽到界面窗口中,程序就会自动列出视频文件中所包含的视频和音频的媒体信息。下面演示一下 mediaInfo 的使用效果,首先看一下视频源文件,非常经典的《大雄兔》:

查看效果如下图所示:

从上图可以非常清晰的看到该视频文件中包含 AVC 编码的视频和 AAC 编码的音频,其中,AVC 和 AAC 分别是一种视频和音频的编码格式。接下来的实验都将围绕这段视频文件进行展开,另外还有一个工具,也是本文的主角——ffmpeg,接下来的实验都将使用到它。

二、音视频 DIY

1. 原始视频文件

在开始今天的演示之前,我们先来看一下即将用于实验的视频源文件的样子,请往上翻,是的,就是刚才介绍的《大雄兔》视频。

2. 单独抽离音频

如何从视频文件中单独抽离出音频呢?如果使用 ffmpeg 的话,会非常简单。假设,我们想要把视频文件中的音频数据抽离出来保存到 onlyaudio 的音频文件中,只需执行如下命令:

ffmpeg -i big_buck_bunny.mp4 onlyaudio.aac -y

执行结果如下图所示:

使用 mediaInfo 查看目标文件 onlyaudio.aac 的媒体信息:

从上图可以看出目标文件 onlyaudio.aac 中只包含音频信息。这个音频文件是可以直接播放的,就像 mp3 一样,常用的播放器都支持。划重点:如果一个MV文件太大,自己又只想要其中的音乐,那么这个方法就派上用场啦,哈哈😄

现在已经实现了只要音频数据,那如何实现只要视频数据呢?请看下文。

3. 单独抽离视频

如何从视频文件中单独抽离出视频呢?如果使用 ffmpeg 的话,也非常简单。假设,我们想要把视频文件中的视频数据抽离出来保存到 onlyvideo 的视频文件中,只需执行如下命令:

ffmpeg -i big_buck_bunny.mp4 -an onlyvideo.mp4 -y

执行结果如下图所示:

使用 mediaInfo 查看目标文件 onlyvideo.mp4 的媒体信息: 

从上图可以看出目标文件 onlyvideo.mp4 中只包含视频信息。我们播放这个视频文件时,会发现是没有声音的。 划重点:现实生活中,如果我们只想把视频画面保存下来,不想要背景声音,这就是一个很好的处理方法。

已经实现了视频和音频数据的分离,那能实现二者的组合吗?答案是可以,请看下文。

4. 任意组合音频和视频文件

如何实现纯音频和纯视频文件的组合呢?同样也要用到本文的神兵利器——ffmpeg。接下来准备素材:纯视频素材就用上文的 onlyvideo.mp4 文件,纯音频素材我们换一个,用我非常喜欢的音乐——《少年》(不忘初心,永远做那个逐风少年)。

执行 ffmpeg 命令如下:

ffmpeg -i onlyvideo.mp4 -i 少年.mp3 combine.mp4 -y

执行结果如下:

Output #0, mp4, to 'combine.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf57.25.100
    Stream #0:0(eng): Video: mpeg4 ( [0][0][0] / 0x0020), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 24 fps, 12288 tbn, 24 tbc (default)
    Metadata:
      handler_name    : VideoHandler
      encoder         : Lavc57.24.102 mpeg4
    Side data:
      unknown side data type 10 (24 bytes)
    Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc57.24.102 aac
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
  Stream #1:0 -> #0:1 (mp3 (native) -> aac (native))
Press [q] to stop, [?] for help
frame=  137 fps=0.0 q=21.6 size=     363kB time=00:00:05.71 bitrate= 520.0kbits/frame=  397 fps=397 q=22.3 size=     868kB time=00:00:16.54 bitrate= 429.8kbits/frame=  686 fps=457 q=16.1 size=    1385kB time=00:00:28.58 bitrate= 397.0kbits/frame=  963 fps=481 q=21.8 size=    1852kB time=00:00:40.12 bitrate= 378.0kbits/frame= 1267 fps=507 q=19.3 size=    2384kB time=00:00:52.79 bitrate= 369.9kbits/frame= 1442 fps=480 q=14.2 size=    2652kB time=00:01:08.91 bitrate= 315.2kbits/frame= 1442 fps=412 q=14.2 size=    2945kB time=00:01:28.58 bitrate= 272.3kbits/frame= 1442 fps=360 q=14.2 size=    3224kB time=00:01:46.23 bitrate= 248.6kbits/frame= 1442 fps=320 q=14.2 size=    3515kB time=00:02:04.41 bitrate= 231.4kbits/frame= 1442 fps=288 q=14.2 size=    3829kB time=00:02:24.35 bitrate= 217.3kbits/frame= 1442 fps=262 q=14.2 size=    4148kB time=00:02:44.53 bitrate= 206.5kbits/frame= 1442 fps=240 q=14.2 size=    4473kB time=00:03:05.10 bitrate= 198.0kbits/frame= 1442 fps=222 q=14.2 size=    4824kB time=00:03:27.40 bitrate= 190.6kbits/frame= 1442 fps=206 q=14.2 size=    5150kB time=00:03:48.15 bitrate= 184.9kbits/frame= 1442 fps=200 q=14.2 Lsize=    5499kB time=00:03:56.12 bitrate= 190.8kbits/s speed=32.7x
video:1703kB audio:3730kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.206521%
[aac @ 0x7f97cf80c200] Qavg: 509.626

使用 mediaInfo 查看目标文件 combine.mp4 的媒体信息: 

从上图我们可以看到,目标文件中已经包含了《大雄兔》的视频画面和《少年》的背景音乐,此时播放该视频文件,你会发现原来的背景声音已经换成《少年》音乐。哈哈,是不是很神奇!

另外,还有一个有意思的地方,如果你足够细心的话,你就会发现原来一分钟的视频文件,和《少年》音频组合后,变成了三分钟五十六秒。这是为什么呢?因为《少年》这首音乐的时长是三分钟五十六秒,合并的过程中,ffmpeg 会默认以时长最长的文件作为目标文件的时长。此时,有小伙伴可能就会问:视频总共是一分钟的内容,那一分钟后会显示什么画面呢?答案是显示最后一帧的画面,也就是音视频领域常说的静帧画面。如果想了解更多音视频知识,可以看我相关的技术专栏。这里就不过多展开了,本文只为了让更多其他领域的小伙伴了解 ffmpeg 的常用方法。

结尾

好了,今天关于视频文件的常用操作就介绍完了,包括从视频文件中单独抽离音频数据、从视频文件中单独抽离视频数据、任意组合两个音频和视频文件。方法也非常简单,但是其中的原理却大有深意,感兴趣的小伙伴可以深入了解。能写这篇文章,需要感谢五一假期,平时工作太忙了,很少有时间安心写一篇文章。写完文章的感觉真棒,哈哈,正值五一,也祝大家劳动节快乐!

作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄 

以上是关于简单几招教你玩转音视频 DIY的主要内容,如果未能解决你的问题,请参考以下文章

一招教你玩转21种设计模式

编程中最难的就是命名?这几招教你快速上手

拥有这些超详细资源,让你玩转 NVIDIA Maxine,解锁实时人工智能音频视频和 AR

手把手教你玩转Canvas

IOS 教你玩转UITableViewController和TableView

一招教你学会给视频变速