项目需求

我司有个需求我们需要将视频中的音频提取出来,并且需要把提取出来的声音按照需要的时间段切片。

命令分析

1. 将视频中的音频提取出来
ffmpeg -i {file_path} -f wav -ar 16000 {file_name}file_path: 视频的文件路径file_name: 文件名称-ar: 设置音频采样频率。对于输出流,它默认设置为相应输入流的频率。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项-i: 输入文件网址-f: 强制输入或输出文件格式。通常会自动检测输入文件的格式,并根据输出文件的文件扩展名猜测格式,因此在大多数情况下不需要此选项。
2. 将音频按照时间段切片
ffmpeg -i {file_path} -vn -acodec copy -ss {start_time} -to {end_time} -c copy {file_name}file_path: 视频的文件路径start_time: 开始时间end_time: 结束时间file_name: 文件名称-vn: 作为输入选项,阻止文件的所有视频流被过滤或自动选择或映射到任何输出-acodec: 设置音频编解码器。这是 的别名-codec:a-ss: 当用作输入选项(before -i)时,在这个输入文件中寻找 位置。请注意,在大多数格式中,无法精确查找,因此ffmpeg将查找到position之前最近的查找点-to: 停止在位置写入输出或读取输入, -to 和 -t 是互斥的,-t 有优先权
3. 将音频压缩
ffmpeg -i {file_path} -b:a 64k -acodec mp3 -ar 44100 -ac 1 {file_name}file_path: 视频的文件路径file_name: 文件名称-ac: 设置音频通道数。对于输出流,它默认设置为输入音频通道的数量。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。-ar:设置音频采样频率。对于输出流,它默认设置为相应输入流的频率。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项
4.提升音频的声音
ffmpeg -i {file_path} -filter:a "volume=5dB" {file_name}
5.查看音频分贝
ffmpeg -i {file_path} -filter_complex volumedetect -c:v copy -f null /dev/null

代码

import os
import argparseclass Ffmpeg_tools:# ffmpeg -i ./file/4451511f2521cea6a78e8d0c7a5b9c03.mp4 -f wav -ar 16000 a.wav# ffmpeg -i ./wav_file/a.wav -b:a 64k -acodec mp3 -ar 44100 -ac 1 ./split_file/a.mp3# ffmpeg -i ./wav_file/a.wav -vn -acodec copy -ss 00:00:00 -t 00:01:30 1.wav# ffmpeg -i ./wav_file/BoobssoundMoanOrgasm…teenwav_file.wav -vn -acodec copy -ss 00:00:22 -to 00:00:33 -c copy ./split_file/BoobssoundMoanOrgasm…teensplit_file2.wav# ffmpeg -i ./split_file/PILLOWHUMPINGASMRthebestpleasuresoundssplit_file0.wav -filter:a "volume=5dB" output.wav 提升音频的声音# ffmpeg -i ./split_file/PILLOWHUMPINGASMRthebestpleasuresoundssplit_file0.wav -filter_complex volumedetect -c:v copy -f null /dev/null  查看音频分贝cmd_map = {"mv_to_audio": "ffmpeg -i {0} -f wav -ar 16000 {1}","split_audio": "ffmpeg -i {0} -vn -acodec copy -ss {1} -to {2} -c copy {3}","zip_to_mp3": "ffmpeg -i {0} -b:a 64k -acodec mp3 -ar 44100 -ac 1 {1}","add_mp3_fb": "ffmpeg -i {0} -filter:a 'volume={1}dB' {2}","select_fb_data": "ffmpeg -i {0} -filter_complex volumedetect -c:v copy -f null /dev/null"}def __init__(self, name, suffix, cmd_type, times = [], fb=5):self._name = nameself._suffix = suffixself._file_path = "./file/{}".format(".".join([name,suffix]))self._wav_path = "./wav_file/{}".format(".".join([name+"wav_file",'wav']))self._cmd_type = cmd_typeself._split_path = './split_file/{}'self._zip_file = "./zip_file/{}".format(".".join([name+"zip_file",'mp3']))self._times = timesself.fb = fbdef run(self):try:params = self.construction_params()cmds = self.construction_cmd(params=params)for _ in cmds:if self.excute_cmd(_):print("成功")else:print("失败")breakexcept Exception as e:print(e)def construction_cmd(self, params):cmd_strs = []try:for _ in params:cmd_strs.append(self.cmd_map.get(self._cmd_type).format(*_))return cmd_strsexcept Exception as e:print(e)return []def construction_params(self):params = []try:if self._cmd_type == 'mv_to_audio':params.append([self._file_path, self._wav_path])if self._cmd_type == 'split_audio':for _ in range(len(self._times)):split_path = self._split_path.format('.'.join([self._name+"split_file"+str(_), 'wav']))params.append([self._wav_path, self._times[_][0], self._times[_][1], split_path])if self._cmd_type == 'zip_to_mp3':params.append([self._file_path, self._zip_file])if self._cmd_type == 'add_mp3_fb':split_path = self._split_path.format('.'.join([self._name, 'wav']))params.append([split_path, self.fb, split_path])if self._cmd_type == 'select_fb_data':split_path = self._split_path.format('.'.join([self._name, 'wav']))params.append([split_path])return paramsexcept Exception as e:print(e)return paramsdef excute_cmd(self, cmd):try:print(cmd)a = os.system(cmd)print(a)return Trueexcept Exception as e:print(e)return Falseif __name__ == "__main__":# parser = argparse.ArgumentParser(description="mv_to_audio")# parser.add_argument('--old_file_path', help="原文件路径")# parser.add_argument('--new_file_path', help="新文件路径")# args = parser.parse_args()# print(args)split_times = {# "4451511f2521cea6a78e8d0c7a5b9c03" : [['00:00:03','00:00:32'],['00:00:34','00:01:37'],['00:01:43','00:02:45'],['00:03:01','00:03:57'],['00:04:01','00:04:51'],['00:04:53','00:05:17']],"PILLOWHUMPINGASMRthebestpleasuresounds": [['00:00:15','00:00:24'],['00:00:38','00:00:48'],['00:00:51','00:01:02'],['00:01:44','00:00:50'],['00:01:10','00:01:16'],['00:01:31','00:01:33'],['00:02:05','00:02:15'],['00:02:18','00:02:33'],['00:02:46','00:02:55'],['00:03:02','00:03:12'],['00:03:14','00:03:26'],['00:03:35','00:03:45'],['00:03:46','00:04:06']]# "345":[['00:00:01','00:00:07']]}for i,j,k in os.walk('./file'):for _ in k:file_names = _.split('.')name = file_names[0]suffix = file_names[1]Ffmpeg_tools(name, suffix, 'mv_to_audio').run()Ffmpeg_tools(name, suffix, 'split_audio', split_times[name]).run()# 运行下面两条命令的时候需要将 108-115 注释掉# 查看 音频分贝     # Ffmpeg_tools("PILLOWHUMPINGASMRthebestpleasuresoundssplit_file0", "wav", 'select_fb_data', split_times['PILLOWHUMPINGASMRthebestpleasuresounds']).run()# 调解音频分贝 默认5分贝 可以自己设定#Ffmpeg_tools("PILLOWHUMPINGASMRthebestpleasuresoundssplit_file0", "wav", 'add_mp3_fb', split_times['PILLOWHUMPINGASMRthebestpleasuresounds'],5).run()

ffmpeg实现视频和音频分离,并且将声音切片相关推荐

  1. Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 1.1.ffmpeg音视频合成  1.2.Atitit 视频音频分离 提取法 1.3.ffmpeg对视频封装和分离 使用ffmpeg对

    Atitit ffmpeg功能表 多媒体处理类库工具 音频视频 目录 1.1. ffmpeg音视频合成 1 1.2. Atitit 视频音频分离 提取法 1 1.3. ffmpeg对视频封装和分离 1 ...

  2. ffmpeg 提取 视频,音频,字幕 方法

    ffmpeg 提取 视频,音频,字幕 方法 (How to Extract Video, Audio, Subtitle from Original Video?) 1.    提取视频 (Extra ...

  3. 使用FFmpeg进行视频抽取音频,之后进行语音识别转为文字

    1.首先需要下载FFmpeg: 2.Gradle依赖 def void forceVersion(details, group, version) {if (details.requested.gro ...

  4. FFMPEG音视频同步-音频实时采集编码封装成MP4

    https://blog.csdn.net/quange_style/article/details/90083173

  5. ffmpeg 有声视频合成背景音乐(合成多声音/合成多音轨)

    第一步 先把mp4视频转成mpg(不转换有个坑(比如视频前段开头视频是图片合成的视频无声的 在拼接主题视频有声的 在拼接背景音乐最后段会产生无声的情况) 我研究了好久) ffmpeg -i 测试3.m ...

  6. ffmpeg 视频提取音频 php-ffmpeg

    composer require php-ffmpeg/php-ffmpeg 注意:请在 php.ini 中开启这两个函数proc_open,proc_get_status.找到 disable_fu ...

  7. 人声分离:快速分离视频和音频中的人声和背景伴奏,超简单

    目前很多手机上比较常见的视频剪辑APP都有将视频声去掉这个功能,通过特定音频消音的方式将视频里声音部分去除,但是往往我们在做视频剪辑的时候,只是需要视频中的人声或者视频中的背景伴奏时,这些主流视频剪辑 ...

  8. [办公自动化软件教程] EV视频转换器怎么分离视频和音频?

    本篇文章由 泉州SEO www.234yp.com 整理发布,办公自动化软件教程 www.234yp.com/Article/154666.html 谢谢合作! 办公自动化软件教程 很多时候,由于各种 ...

  9. 使用ffmpeg调整视频时长倍速

    简介:通过ffmpeg调整视频时长,既可以尽量因调整视频时长引起的对视频质量的侵害,也能避免使用第三方工具收费或者广告问题,从而更干净安全的获取目标视频时长转换. 相关攻略: 利用ffmpeg将avi ...

最新文章

  1. 百度地图API(二)
  2. html根据文档定位,html文档中的location对象属性理解及常见的用法
  3. 如何理解卷积神经网络中的1*1卷积
  4. InterlockedIncrement函数详解
  5. 域用户频繁被锁定怎么解决_Oracle11g用户频繁锁定并且解锁后不允许登录
  6. Django框架——HttpRequest对象
  7. 新塘linux启动过程,NUC972调试笔记之NAND分区调整新增
  8. 谷歌引擎html,国内免费使用谷歌翻译引擎
  9. 计算机网络基础 (一) —— 概念、组成、功能、分类
  10. @property的使用
  11. CNCC 2022| 隐私计算:理论、技术、应用与未来
  12. h5 app跳转客服咨询 临时会话 (没有开通在线咨询、无法会话)
  13. jetson nano yolov5部署及USB摄像头实时检测 初次尝试
  14. JS处理JSON字符串转数组,数字超17为处理方法
  15. KNN算法及KNN的优化算法-加权KNN
  16. Chrome 创建快捷方式后在单页面打开网页内容
  17. 毕业设计房屋出租研究现状
  18. 【嵌入式模块】FT232RL——一个带有ISP功能的USB转TTL模块
  19. QT中关闭应用程序和窗口的函数(quit(),exit()以及close()的区别)
  20. 手把手教你用Hexo搭建免费个人博客

热门文章

  1. 【工程师经验分享】 2 嵌入式大牛开发经验心得及其学习方向
  2. react事件 组件设计传参使用
  3. SQL Server基础操作(此随笔仅作为本人学习进度记录六 !--程序块和循环)
  4. 总结八:面试程序员前需要的准备工作
  5. 程序员最大的悲哀是什么?
  6. php正方系统,正方教务系统快速自动评教脚本
  7. java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
  8. 五年程序员谈软件工程师做职业规划的重要性
  9. 在GitHub上搭建个人主页
  10. 独家对话AAAI、ACM、ACL三会会士Raymond J. Mooney | 香侬专栏