给视频配背景音乐

介绍

给一段视频,想配个背景音乐,常规办法就是打开抖音或者剪映,咔咔咔一顿操作,完事儿,简单方便。但是如果你作为一个开发者呢,你又不能直接调用抖音剪映的接口吧(特别有钱定制除外)。本着自己动手丰衣足食的白嫖理念,又不想花钱又想把事儿办了,加深自己的技术理解,那就开始吧!!!

开搞

1:准备

	系统:ubuntu 20.04语言工具:python 

2:安装必要插件

	使用python:pip install ffmpy直接使用ffpmeg:apt-get install ffmpeg

3:编写代码:Python

import os
import sys
from ffmpy import FFmpeg# 添加背景音
def add_bgm_to_video(video_path: str, audio_path: str, output_dir: str, out_file: str, duration: int):ext = os.path.basename(video_path).strip().split('.')[-1]result = os.path.join(output_dir, '{}.{}'.format(out_file, ext))ff = FFmpeg(inputs={video_path: None, audio_path: None},outputs={result: r'-ac 1 -acodec aac -ar 48000 -filter_complex [1]volume=0.5[vo1];[''vo1]aloop=loop=-1:size=2e+09[ao1];[ao1]atrim=0:{}[ap1];[ap1]adelay=0|0[a1];[a1][''0:a]amix=2:dropout_transition={} -g 30 -keyint_min 30 -level 3.1 -preset:v medium ''-profile:v baseline -sc_threshold 0 -vcodec libx264'.format(int(duration) // 100, int(duration))})ff.run()return resultvideo_path = sys.argv[1] #你的视频地址
audio_path = sys.argv[2] #你的背景音乐地址
output_dir = sys.argv[3] #输出文件夹
file_name = sys.argv[4]	#输出文件名称
duration = sys.argv[5]	#视频时长,这个要以视频时长为准,音频如果小于这个时长,会自动循环背景音乐,直至视频结束
new_path = add_bgm_to_video(video_path,audio_path,output_dir,file_name,duration)
print(new_path)

4:直接使用 FFmpeg 【也可以写成shell文件,通过 bash 加传参的方式进行调用】

ffmpeg -i 目标视频.mp4 -i 背景音乐.mp3 -ac 1 -acodec aac -ar 48000 -filter_complex [1]volume=0.5[vo1] [vo1]aloop=loop=-1 size=2e+09[ao1];[ao1]atrim=0:视频时长[ap1] [ap1]adelay=0|0[a1] [a1][0:a]amix=2:dropout_transition=视频时长x100 -g 30 -keyint_min 30 -level 3.1 -preset:v medium -profile:v baseline -sc_threshold 0 -vcodec libx264 合成后的视频.mp4

注意

我这里是让背景音乐变为了原声一半的音高,[1]volume=0.5[vo1]
下面的duration 我是除以100然后向下取整了,我是从另外一种语言里直接调用python执行文件,传值的时候这个 dropout_transition 总是识别成一串很长的数字,然后系统报错,我就在传过来的时候先让时长乘以100,然后这边再除以100,这种方式就没问题,就很神奇,也没有找到具体的确切原因。直接用 ffmpeg 命令调用也是没问题,后续慢慢研究研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow web入门 中期测评 web503--web516(无web511--web514)

web503 看了之前的文件的发现都没办法利用了 这个页面的源码发现了 layui.use([layer, form], function(){var layer layui.layer,form layui.form;form.on(submit(admin_settings), function(data){$.ajax({url:api/admin_settings.php,dataType:"json",type:po…

新手必看:Elasticsearch 入门全指南

Elasticsearch 入门介绍 Elasticsearch 是一个开源的分布式搜索和分析引擎,广泛应用于处理大规模数据和实时搜索需求。它基于 Apache Lucene 构建,具备高可扩展性和分布式特性,能够快速、可靠地存储、搜索和分析大量数据。本文将介绍 Elasti…

STM32项目分享:智能台灯(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.com/video/BV1My411q7fE…

CheckBox实现原理分析

CheckBox 是 Android 中的一个常用控件,用于实现复选框的功能。它继承自 CompoundButton,后者又继承自 Button。CheckBox 可以用来表示一个布尔值的选择状态,通常用于收集用户的选择,例如在表单中选择多个选项。 接下来&#xff…

小白学大模型:LLaMA-Factory 介绍与使用

最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友…

基于CentOS Stream 9平台安装MySQL Community Server 9.0.1 Innovation

1. 安装之前 1.1 查看系统版本 cat /etc/redhat-releaseCentOS Stream release 9 1.2 查看cpu架构 lscpu架构: x86_64 CPU 运行模式: 32-bit, 64-bit 2. 官网下载 https://dev.mysql.com/downloads/mysql/ 要多看看 官方9.0文档:https://d…

C语言——输入你的身高和体重,测试你的健康状况。

输入你的身高和体重,测试你的健康状况。 计算bmi的值, bmi (体重/身高的平方) 如果bmi 小于18.5,则显示“偏瘦,注意加强营养” 如果bmi 在18.5和23.9之间,则显示“体重指数良好,注意保持” 如果…

NSL-KDD入侵检测系统的设计与实现系列预告

每日进阶-基于机器学习的入侵检测系统——打怪升级之道 在当今的数字时代,网络安全不仅是防御,更是主动出击。你是否想知道如何用机器学习技术设计一套入侵检测系统(IDS),让黑客无所遁形?本系列文章将为您揭…

unity2D游戏开发12单例

单例 我们先了解一种被称为单例的软件设计模式。当应用程序需要在生命周期内创建特定类的单个实例时,可以使用单例。当一个类提供了游戏中其他几个类使用的功能时,单例会很有用,例如,在Game Manager 类中协调游戏逻辑,单例可以提供对该类及其功能的公共统一访问入口。单例…

入门 PyQt6 看过来(案例)14~ 分组

本文分享一个分组框功能,采用pyqt6里的QGroupBox​控件,效果如下:性别和专业分开为两个分组框内: ​ 1 功能实现思路 ui页面布局设计 性别和专业要设计成两个分组框: ​ 逻辑实现 引入信号和槽函数来实现点击单选…

搞懂数据结构与Java实现

文章链接:搞懂数据结构与Java实现 (qq.com) 代码链接: Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)

代码随想录算法训练营第33天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

打卡Day33 1.动态规划基础2.509. 斐波那契数3.70. 爬楼梯4.746. 使用最小花费爬楼梯 1.动态规划基础 文档讲解: 代码随想录 对于动态规划,拆解为五步: (1)dp数组以及下标的含义 (2)递推公式 &…

从区块链到股票市场的全方位布局,广辉团队创新引领共创财富未来!

广辉团队作为一家涉足互联网投资领域的团队,在短短几年内迅速崛起,成为行业中的佼佼者。这支团队汇聚了来自各行各业的商业精英,并在互联网金融领域创造了巨大的财富。业务范畴涵盖了资产管理、资本市场、消费金融、保险市场、零售银行及财富…

【C++入门】类的继承

文章目录 前言继承是什么?为什么需要继承? 在 C 中如何继承另一个类?访问修饰符 类的多继承菱形继承 继承中的构造函数和析构函数无参数的构造函数有参数的构造函数代码解释输出结果 继承的好处与问题继承的好处继承的潜在问题示例代码 总结 …

UDP通信 单播,广播,组播

UDP通信实现 #include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); - 参数&#xff1a; struct sockaddr *src_addr, socklen_t *addrlen…

最长连号(不会dp解法)

这题咋dp啊 #include<bits/stdc.h> using namespace std; int main() {int a;cin>>a;vector<int>s(a,0);vector<int>dp(a);dp[0]1; // s.push_back(1);for(int i0;i<a;i){ // cout<<s[i];cin>>s[i];}for(int i1;i<a;i){if(s[i-1]1…

数据库期末复习

数据库期末复习 分析题 1 &#xff08;1&#xff09;使用数据库系统可以大大提高应用开发的效率&#xff0c;方便用户的使用减轻数据库系统管理人员维护的负担&#xff0c;请回答数据库系统有哪些部分组成&#xff1f;什么是数据库管理系统&#xff0c;其主要功能包括哪些方而&…

vue3项目报错集合

目录 一、does not provide an export named default 一、does not provide an export named default 报错截图&#xff1a; 原因&#xff1a; vite对commonjs兼容性太差&#xff0c;导致无法引入jsoneditor&#xff0c;可以使用originjs/vite-plugin-commonjs插件解决。&am…

ThinkPHP事件的使用

技术说明 1.ThinkPHP版本&#xff1a;支持6.0、8.0 2.使用场景&#xff1a;用户登陆后日志记录、通知消息发送等主流程、次流程分离等场景 3.说明&#xff1a;网上很多帖子说的不明不白的&#xff0c;建议大家自己手动尝试总结一下 4.事件手动绑定的时候&#xff0c;一定要…

Cocos Creator2D游戏开发(7)-飞机大战(5)-让子弹飞

飞机大战(5)-碰撞及积分 参考敌机的生成 子弹由飞机生成,放在player_node节点子弹重复使用,要使用预制体;子弹新增了动画 ①创建一个预制体 命名为playerBullet_prefab ② 双击预制体将bullet1图片拖入预制体 保存,关闭(场景编辑器里面的) ③ 发射子弹 player加入代码 prop…