Python 如何实现批量转换视频音频的采样率
作者:剑客阿良_ALiang 发布时间:2022-06-30 11:16:46
标签:Python,视频,音频,采样率
前言
本文主要分享一个python代码,可以将多个视频中的音频转化为相同采样率的视频。对视频格式的校验没有做,也不是很关键。
环境依赖
ffmpeg环境安装,具体安装可以参考在Windows上安装FFmpeg程序的图文方法
ffmpy安装:
pip install ffmpy -i https://pypi.douban.com/simple
代码
不废话,上代码。
#!/user/bin/env python
# coding=utf-8
"""
@project : csdn
@author : 剑客阿良_ALiang
@file : transfor_mp4_audio_sampling_rate.py
@ide : PyCharm
@time : 2021-11-24 13:48:08
"""
from ffmpy import FFmpeg
import os
def transfor(video_path: str, tmp_dir: str, result_dir: str):
file_name = os.path.basename(video_path)
base_name = file_name.split('.')[0]
file_ext = file_name.split('.')[-1]
ext = 'wav'
audio_path = os.path.join(tmp_dir, '{}.{}'.format(base_name, ext))
print('文件名:{},提取音频'.format(audio_path))
ff = FFmpeg(
inputs={
video_path: None}, outputs={
audio_path: '-f {} -vn -ac 1 -ar 16000 -y'.format('wav')})
print(ff.cmd)
ff.run()
if os.path.exists(audio_path) is False:
return None
video_tmp_path = os.path.join(
tmp_dir, '{}_1.{}'.format(
base_name, file_ext))
ff_video = FFmpeg(inputs={video_path: None},
outputs={video_tmp_path: '-an'})
print(ff_video.cmd)
ff_video.run()
result_video_path = os.path.join(result_dir, file_name)
ff_fuse = FFmpeg(inputs={video_tmp_path: None, audio_path: None}, outputs={
result_video_path: '-map 0:v -map 1:a -c:v copy -c:a aac -shortest'})
print(ff_fuse.cmd)
ff_fuse.run()
return result_video_path
def handle(video_dir: str, tmp_dir: str, result_dir: str):
if os.path.isdir(video_dir):
for file in os.listdir(video_dir):
try:
result = transfor(
os.path.join(
video_dir,
file),
tmp_dir,
result_dir)
except Exception as e:
print(e)
continue
if result:
print(result)
if __name__ == '__main__':
handle(
'C:/Users/huyi/Desktop/shipin',
'C:/Users/huyi/Desktop/tmp',
'C:/Users/huyi/Desktop/result')
代码说明
1、handle方法入参分别为:视频目录、临时目录、最终结果视频目录。
2、handle方法会遍历视频目录,一次对视频做transfor方法处理,步骤为:(1)提取视频音频并转化为定义的采样率音频;(2)提取视频中不带音频的视频;(3)融合新视频与新音频合成最终视频到指定的结果目录。
3、没有音频的异常直接丢弃,无需进行转换。
4、最终结果目录的文件名与原视频目录的文件名一致。
5、该代码主要转化为16k采样率,可以按照需求调整。
验证一下
原始视频采样率
结果视频采样率
来源:https://huyi-aliang.blog.csdn.net/article/details/121518411


猜你喜欢
- Pycharm Database Navigator连接mysql1.安装Database Navigator由于使用的是Pycharm C
- 一个装饰器已经作用在一个函数上,你想撤销它,直接访问原始的未包装的那个函数。假设装饰器是通过 @wraps 来实现的,那么你可以通过访问 w
- 前言没想到python是如此强大,令人着迷,以前看见图片总是一张一张复制粘贴,现在好了,学会python就可以用程序将一张张图片,保存下来。
- python是一种跨平台的计算机程序设计语言。python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,可以应用于科学计算
- 最近项目中使用了vue-router的addRoutes这个api,遇到了一个小坑,记录总结一下。场景复现:做前端开发的同学,大多都遇到过这
- subprocess.run()运行并等待args参数指定的指令完成,返回CompletedProcess实例。参数:(*popenargs
- 我们通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服
- 按照正常的产品逻辑,我们在进行页面切换时滚动条应该是在页面顶部的,可是。。。在使用vue-router进行页面切换时,发现滚动条所处的位置被
- 背景在我的 《Vue 3 开发企业级音乐 App》课程问答区,有个同学提了个问题,在歌手列表到歌手详情页面到转场动画中,只有进入动画,却没有
- # encoding:utf-8import re # 使用正则 匹配想要的数据import requests # 使用requests得到
- 本文实例为大家分享了Python实现简单飞机大战的具体代码,供大家参考,具体内容如下功能玩家飞机可以移动,可以发射 * ,敌机随机产生,自由坠
- 由于gitlab的免费私有仓库的优势,所以在公司使用gitlab会多一些,对于gitlab来说,注册需要翻墙,而登录不需要。关于git是做什
- 今天在一个QQ群中看到有人在问一个进度条的实现方式,当时因为工作时间,需求相对也比较紧,只是简单的说了一下可以通过CSS的边框属性和背景属性
- 这篇文章主要介绍了Python matplotlib以日期为x轴作图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的
- 一、基于socket实现的TCP客户端import socket # 建立socket对象# 参数一表示IP地址类型(AF_INE
- 古巴比伦王颁布了汉摩拉比法典,刻在黑色的玄武岩,距今已经三千七百多年,你在橱窗前…熟悉吧?没错,这就是周董的爱在西元前歌词。前不久工作不是很
- 前言LogEntry是在后台开发中经常用到的模块,它在admin是默认开启的。可以使用LogEntry模块记录所有用户的操作记录。一方面可以
- 本文实例讲述了Django利用cookie保存用户登录信息的方法。分享给大家供大家参考,具体如下:设置cookieresponse对象.se
- MySQL注入的意图是接管网站数据库并窃取信息。常见的开源数据库,如MySQL,已经被许多网站开发人员用来储存重要信息,如密码,个人信息和管
- 一、了解Variable顾名思义,Variable就是 变量 的意思。实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这