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 相关文章推荐
Python3 socket同步通信简单示例
Jun 07 Python
详解Python开发中如何使用Hook技巧
Nov 01 Python
python3如何将docx转换成pdf文件
Mar 23 Python
python实现QQ邮箱/163邮箱的邮件发送
Jan 22 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Python 共享变量加锁、释放详解
Aug 28 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
如何创建一个Flask项目并进行简单配置
Nov 18 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版本的几种方法小结
2008/03/25 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
php实现保存submit内容之后禁止刷新
2014/03/19 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
可插入图片的TEXT文本框
2013/12/27 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python将string转换到float的实例方法
2019/07/29 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
python 消费 kafka 数据教程
2019/12/21 Python
parser.add_argument中的action使用
2020/04/20 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
革命先烈的英雄事迹材料
2014/02/15 职场文书
英文推荐信格式范文
2014/05/09 职场文书
社区服务活动小结
2014/07/08 职场文书
小学元宵节活动总结
2015/02/06 职场文书
慰问信格式规范
2015/03/23 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书