Python实现视频中添加音频工具详解


Posted in Python onDecember 06, 2021

前言

本文提供在在无音频的视频中添加音频的python工具,附上代码。

环境依赖

ffmpy安装:

pip install ffmpy -i https://pypi.douban.com/simple

主要代码

不废话,上代码。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/12/5 1:49
# @Author  : 剑客阿良_ALiang
# @Site    : 
# @File    : video_add_audio_tool.py
 
import os
import uuid
from ffmpy import FFmpeg
 
 
# 视频添加音频
def video_add_audio(video_path: str, audio_path: str, output_dir: str):
    _ext_video = os.path.basename(video_path).strip().split('.')[-1]
    _ext_audio = os.path.basename(audio_path).strip().split('.')[-1]
    if _ext_audio not in ['mp3', 'wav']:
        raise Exception('audio format not support')
    _codec = 'copy'
    if _ext_audio == 'wav':
        _codec = 'aac'
    result = os.path.join(
        output_dir, '{}.{}'.format(
            uuid.uuid4(), _ext_video))
    ff = FFmpeg(
        inputs={video_path: None, audio_path: None},
        outputs={result: '-map 0:v -map 1:a -c:v copy -c:a {} -shortest'.format(_codec)})
    print(ff.cmd)
    ff.run()
    return result

代码说明

1、video_add_audio方法参数有视频地址、音频地址、输出目录。

2、音频支持mp3以及wav格式,其中wav格式ffmpeg命令会有所差别。

验证一下

if __name__ == '__main__':
    print(video_add_audio('data/999.mp4', 'data/2dc9fa4f-802d-4076-b2c3-b1da886a7cc0.wav', 'data/'))
E:\ProgramData\Anaconda3\envs\pytorch\python.exe C:/Users/yi/PycharmProjects/test/video_add_audio_tool.py
ffmpeg -i data/999.mp4 -i data/2dc9fa4f-802d-4076-b2c3-b1da886a7cc0.wav -map 0:v -map 1:a -c:v copy -c:a aac -shortest data/6854281e-19ac-4edc-9638-4124a2a22e52.mp4
ffmpeg version n4.3.1-20-g8a2acdc6da Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.3-win32 (GCC) 20200320
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvmaf --disable-vulkan --enable-libvorbis --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-ffnvcodec --enable-cuda-llvm --disable-libglslang --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libtwolame --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'data/999.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf58.76.100
  Duration: 00:00:04.88, start: 0.000000, bitrate: 8420 kb/s
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1280x688 [SAR 1:1 DAR 80:43], 8417 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, wav, from 'data/2dc9fa4f-802d-4076-b2c3-b1da886a7cc0.wav':
  Metadata:
    copyright       : bbs.cnxp.com(C)2009
    title           : ���ɱ�ֲ�̫��(���ݼ�����).Leon.1994.Directors.Cut.720p.Bluray
    encoder         : Lavf58.45.100
  Duration: 00:00:05.02, bitrate: 1411 kb/s
    Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (pcm_s16le (native) -> aac (native))
Press [q] to stop, [?] for help
Output #0, mp4, to 'data/6854281e-19ac-4edc-9638-4124a2a22e52.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf58.45.100
    Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1280x688 [SAR 1:1 DAR 80:43], q=2-31, 8417 kb/s, 25 fps, 25 tbr, 12800 tbn, 12800 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc58.91.100 aac
frame=  122 fps=0.0 q=-1.0 Lsize=    5096kB time=00:00:04.87 bitrate=8561.0kbits/s speed=72.6x    
video:5015kB audio:77kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.087828%
[aac @ 00000192e5913d40] Qavg: 181.360
data/6854281e-19ac-4edc-9638-4124a2a22e52.mp4
 
Process finished with exit code 0

OK,最终输出合成后的视频地址。 

到此这篇关于Python实现视频中添加音频工具详解的文章就介绍到这了,更多相关Python 视频添加音频内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python中使用HTML模版的教程
Apr 29 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
python黑魔法之编码转换
Jan 25 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
python导入模块交叉引用的方法
Jan 19 Python
Python中的引用知识点总结
May 20 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
Tensorflow之梯度裁剪的实现示例
Mar 08 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
python百行代码实现汉服圈图片爬取
Nov 23 Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
python 管理系统实现mysql交互的示例代码
Python中super().__init__()测试以及理解
Dec 06 #Python
浅析Python中的随机采样和概率分布
Dec 06 #Python
You might like
PHP 文件类型判断代码
2009/03/13 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
JavaScript使用表单元素验证表单的示例代码
2019/08/20 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
JS实现多功能计算器
2020/10/28 Javascript
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
医药营销个人求职信
2014/04/12 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
学籍证明模板
2014/11/21 职场文书
工人先锋号申报材料
2014/12/29 职场文书
2016大一新生军训感言
2015/12/08 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL
实现GO语言对数组切片去重
2022/04/20 Golang