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 相关文章推荐
动态创建类实例代码
Oct 07 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
Python批量更改文件名的实现方法
Oct 29 Python
对python 操作solr索引数据的实例详解
Dec 07 Python
Python中常用的8种字符串操作方法
May 06 Python
简单了解python元组tuple相关原理
Dec 02 Python
Python命令行click参数用法解析
Dec 19 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
Python同时处理多个异常的方法
Jul 28 Python
python爬取天气数据的实例详解
Nov 20 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
Python机器学习之PCA降维算法详解
May 19 Python
Python实现GIF动图以及视频卡通化详解
Python实现照片卡通化
用Python爬取英雄联盟的皮肤详细示例
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 #Python
python 管理系统实现mysql交互的示例代码
Python中super().__init__()测试以及理解
Dec 06 #Python
浅析Python中的随机采样和概率分布
Dec 06 #Python
You might like
优化使用mysql存储session的php代码
2008/01/10 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
mysql desc(DESCRIBE)命令实例讲解
2016/09/24 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
很酷的javascript loading效果代码
2008/06/18 Javascript
javascript Excel操作知识点
2009/04/24 Javascript
javascript 拖放效果实现代码
2010/01/22 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
JS画线(实例代码)
2013/11/20 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
Kendo Grid editing 自定义验证报错提示的解决方法
2016/11/18 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
Vite和Vue CLI的优劣
2021/01/30 Vue.js
Python的Django框架中的数据过滤功能
2015/07/17 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
建筑公司文秘岗位职责
2013/11/29 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫