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调用shell的方法
Nov 20 Python
python 矩阵增加一行或一列的实例
Apr 04 Python
用python处理MS Word的实例讲解
May 08 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
Python实现多进程的四种方式
Feb 22 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
python3 enum模块的应用实例详解
Aug 12 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
Python json读写方式和字典相互转化
Apr 18 Python
windows系统Tensorflow2.x简单安装记录(图文)
Jan 18 Python
python 解决微分方程的操作(数值解法)
May 26 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 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+mysql一个名片库程序
2006/10/09 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
泛谈JS逻辑判断选择器 || &&
2019/05/24 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
python使用tornado实现登录和登出
2018/07/28 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
简单的JAVA编程面试题
2013/03/19 面试题
财务部总监岗位职责
2014/03/12 职场文书
让生命充满爱观后感
2015/06/08 职场文书
在校证明模板
2015/06/17 职场文书
2016党员入党决心书
2015/09/22 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书
2019商业计划书格式、范文
2019/04/24 职场文书
JavaScript数组 几个常用方法总结
2021/11/11 Javascript