FFmpeg是一个超级强大的工具,它可以在视频文件中添加、删除、提取或者替换音频。如果你的电脑上已经安装了FFmpeg,那么你就拥有了可以给电影添加或删除音频的工具!

我们一起来看看FFmpeg是如何做到的。

使用FFmpeg删除视频中的音频

很多人想要知道如何从录制的视频中删除音轨,比如马路噪音或者背景噪音。

删除音频最简单的方法是:只将视频复制到一个新的文件中,而不复制音频。这个方法之所以简单,是因为它无需将视频重新编码。下面是删除音频的命令行:

ffmpeg.exe -i videoWithAudio.mp4 -c:v copy -an videoWithoutAudio.mp4
  • 使用-c:v copy命令将视频复制到videoWithoutAudio.mp4

  • -an告诉FFmpeg不要复制音频

上述方法非常适用于电影中只有一个音轨的情况。但是,如果电影中有3~4个音轨,而你只想删除第二个音轨,该如何操作?

如何通过FFmpeg删除某个特定音轨?

我们在下一部分将学习到。

使用FFmpeg删除特定音频

你可以使用FFmpeg中的map命令来删除特定音轨。

map命令的通用语法是:

-map input_file_index:stream_type_specifier:stream_index

然后,你可以通过-map 0:a:1(从0开始计数)从视频中选择第二个音轨。在上文的例子中,如果你的文件中有一个视频和两个音轨,那么你就可以使用-map 0:a:1只选择第二个音轨,并将它复制到你的最终输出文件中。

同样,-map 0是指选择第一个输入文件中的所有数据(包括音频和视频),所以你需要先选择所有数据,然后取消选择音频。

ffmpeg.exe -i videoWithAudio.mp4 -map 0 -map 0:a:1 -copy videoOutput.mp4

如果电影中有5个音轨,除了第一个,其他你都想选择。这个时候你可以使用反向的map命令(在map命令的参数前加负号)。使用-map -0:a:0 这一命令,FFmpeg在选择时就会忽略第一个音轨。反向的map非常强大!

实际上,我们已在前文学习了使用 -an命令从视频中删除音频。你可以通过如下方式,使用反向的map来达到相同的效果。

ffmpeg -i videoWithAudio.mp4 -map 0 -map -0:a videoWithoutAudio.mp4

使用FFmpeg添加音频

你已经删除了一个音轨,那么你很可能想要再添加一个,对吧?下面我们将学习如何使用FFmpeg向视频中添加音频。

关注+私信我,领取2022最新最全学习提升资料,内容包括(C/C++,Linux,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)

在前文中你已经学习了map命令的使用,因此添加音频对你来说应该很容易。命令行如下所示:


ffmpeg \-i video.mp4 \-i audio.mp3 \-c copy \-map 0:v:0 \-map 1:a:0 \videoWithAudio.mp4

上面的命令行很容易理解。你所做的就是使用map命令将视频和音频分别从不同的文件中复制到同一个输出文件。

  • -map 0:v:0 选择了第0个输入文件(视频输入)的第0个轨道。

  • –map 1:a:0 选择了第一个输入文件(音频输入)的第0个轨道。

  • 不用重新编码,-c copy同时复制音轨和视轨到输出文件。如果你想要重新编码,可以选择合适的音视频编解码器,配置相应的编码质量。

使用FFmpeg从视频中提取音频

使用FFmpeg从视频提取音频是另一个非常有用且常见的操作。无论是否重新编码音频,你都可以这么做。

让我们先来看看第一种场景:不重新编码,直接从媒体文件中提取音频并保存下来。

提取音频意味着要舍弃掉视频,对吧?使用-vn 命令就可以帮助我们轻松删除视频。-vn命令与删除音频的-an命令类似。

然后,你所要做的就是将音频从源文件复制到目标文件。使用-acodec copy命令即可完成操作,该命令告诉FFmpeg只复制音频而不对其进行重新编码。

ffmpeg -i videoWithAudio.mp4 -vn -acodec copy onlyAudio.aac

很简单,对不对?

现在让我们看下另一种情况:当你提取音频后想要重新对它进行编码。下面是如何使用FFmpeg从视频中提取音频,然后使用libmp3lame将音频编码为不同的质量,并将其存储为mp3文件。

ffmpeg.exe -i videoWithAudio.mp4 -vn -c:a libmp3lame -q:a 1 onlyAudio.mp3

-q:a表示质量(在LAME文档中定义[1]),质量分布范围为0~6,其中0表示高质量音频,6表示低质量音频。

图片来自Pexels.com,作者为Stas Knop

使用FFmpeg从视频中替换音频

如何替换已包含音频的视频中的音轨?这将是我们今天最后研究的一种场景。

在上文我们已经讨论过,有两个步骤:

  • 删除音频

  • 添加替换音频

但有没有更快更好的方法?

有了FFmpeg,总能找到更好的方法!

请看下列命令行:

-map input_file_index:stream_type_specifier:stream_index.

所以,你可以使用-map 1:a:2来选择第二个输入文件中的第三个音轨,因为计数从0开始。


ffmpeg -i video_with_audio.mp4 -i newAudio.wav \-map 0:0 \-map 1:0 \-c:v copy \-c:a libmp3lame -q:a 1 \-shortest \video_with_newAudio.mp4

在上文的例子中,我们需要从一个文件中获取视频以及另一个文件中获取音频。而map命令非常便捷地完成了上述操作。我们从第一个输入文件(视频)中选择第0个轨道,并从第2个输入文件(音频)中选择第0个轨道。

然后我们原样复制视频并重新编码音频,再将它们一起放入新的文件中。如果你不想重新编码音频,你只需使用-a:c copy命令,那么音频就只被复制而不会重新编码。

-shortest命令用于确保当达到较短的输入文件(两个输入文件之一)长度时停止转换。如果这个功能在你的用例中无关紧要,那么你可以不使用这一命令。

 结  语 

好了,现在你已经知道了如何使用FFmpeg从视频中添加、删除、替换和提取音频。

后续文章中我们将介绍FFmpeg的更多功能和用法。

注释:

[1]https://wiki.hydrogenaud.io/index.php/LAME

原文链接:

https://ottverse.com/add-remove-extract-audio-from-video-using-ffmpeg/

音视频开发系列(24)使用FFmpeg添加、删除、替换和提取视频中的音频相关推荐

  1. 音视频开发系列(65)-FFMPEG进阶系列01-ffplay命令详解

    概述 ffplay是一个基于FFMPEG库和SDL库开发的多媒体播放器.它的主要目的是是用来测试FFMPEG的各种API,比如codec/format/filter等等库. 掌握ffplay的设计逻辑 ...

  2. 【音视频开发系列】一学就会,快速掌握音视频开发的第一个开源项目FFmpeg

    快速掌握音视频开发的第一个开源项目:FFmpeg 1.为什么要学FFmpeg 2.FFmpeg面向对象思想分析 3.FFmpeg各种组件剖析 视频讲解如下,点击观看: [音视频开发系列]一学就会,快速 ...

  3. 【音视频开发系列】盘点音视频直播RTSP/RTMP推流一定会遇到的各种坑,教你快速解决

    聊聊RTSP/RTMP推流那些坑 1.推流架构分析 2.推流缓存队列的设计 3.FFmpeg函数阻塞问题分析 [音视频开发系列]盘点音视频直播一定会遇到的各种坑,教你快速解决 更多精彩内容包括:C/C ...

  4. Android音视频学习系列(十) — 基于FFmpeg + OpenSL ES实现音频万能播放器

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  5. 【音视频开发系列】srs-webrtc-janus开源流媒体服务器分析

    全球最牛开源流媒体服务器源码分析 1.如何学习流媒体服务器 2.全球最牛流媒体服务器架构分析 3.我们能从全球最牛流媒体服务器得到什么 [音视频开发系列]srs-webrtc-janus流媒体服务器分 ...

  6. ZYNQ开发系列——把PS和PL程序烧写到FLASH中

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列--把PS和PL程序烧写到FLASH中 生成 fsbl.elf 生成 BOOT.bin 下载 BOOT.bin 文件到 ...

  7. 中英文视频识别字幕并对其添加字幕--自用可白嫖--中/英/中英双语字幕

    中英文视频识别字幕并对其添加字幕–自用可白嫖–中/英/中英双语字幕 文章目录 中英文视频识别字幕并对其添加字幕--自用可白嫖--中/英/中英双语字幕 01 平台介绍 1.1 网易见外工作台 1.2 A ...

  8. 【MOS】OCR/Vote disk 维护操作: (添加/删除/替换/移动) (文档 ID 1674859.1)

    [MOS]OCR/Vote disk 维护操作: (添加/删除/替换/移动) (文档 ID 1674859.1) 文档内容 目标 解决方案   准备磁盘   1. 磁盘大小   2. 裸设备或者块设备 ...

  9. 音视频开发系列(10)ffmpeg基础使用

    一.安装 打开https://ffmpeg.zeranoe.com/builds/,该网站中的FFMPEG分为3个版本:Static,Shared,Dev. 前两个版本可以直接在命令行中使用,他们的区 ...

最新文章

  1. 求两个矩形重叠部分的面积
  2. STM32开启定时器就立即进Update中断问题探索
  3. python打印字符串全排列_Python实现全排列的打印
  4. 一起谈.NET技术,Silverlight动态加载DLL
  5. linux下keepalived+nginx的负载均衡搭建
  6. Android导入第三方类库
  7. 异常处理和代码复用在python自动化运维中的使用(eNSP模拟器)
  8. 惠普M1005打印机驱动-LaserJet提供下载
  9. 乌拉、利用python实现tree命令
  10. 安医有计算机专业吗,他从安徽医科大保研到南京航空航天大学!给学弟学妹分享保研经历...
  11. 串级控制系统matlab仿真,锅炉串级三冲量给水控制系统的MATLAB 仿真
  12. android 软解8k视频,Android Q+5G现场播放8K视频:画面流畅
  13. 打印系统开发(6)——纸张尺寸对照表如下
  14. Linux导出Excel图片水印中文乱码解决
  15. Source Insight 设置和快捷键大全
  16. 微信小程序动态点赞php,微信小程序小组件基于Canvas实现直播点赞气泡效果
  17. python爬虫小说设计过程_Python制作爬虫采集小说
  18. EDI对接HELLA成功案例
  19. 认真学习jdk1.8下ConcurrentHashMap的扩容机制
  20. 前端原生javaScript,通过身份证号判断年龄、性别、出生日期。

热门文章

  1. 记一次阿里java实习生面试(失败)
  2. js实现返回上一页(页面刷新与不刷新)
  3. 计算机管理磁盘管理无法删除卷,如何解决对磁盘重新分区磁盘卷无法删除的问题...
  4. iOS开发:简易天气预报
  5. 如何把PPT文件压缩变小
  6. 20162312Java结对编程之挑战出题
  7. CodingTrip - 携程编程大赛 (预赛第二场)
  8. 孢子社群:今日推荐ARVR微信群:云贵川渝ARVR行业精英交流群 孢子91
  9. word中公式编辑器的快捷键
  10. mysql source导入大数据量时效率提升的方法