有时自己录制的视频课件想添加一个背景音乐,操作方法如下:
新建一个bat文件1.bat如下:
@echo off
title 正在转换,mp4视频添加循环背景音乐
ffmpeg -i %1 -i E:\softs\ffmpeg-4.2.2-win64-static\bin\2.mp3 -filter_complex [1:a]aloop=loop=-1:size=2e+09[out];[out][0:a]amix -ss 0 -t 60 -y out.mp4
ping -n 5 127.0.0.1 >nul
参数说明:
ffmpeg
//输入视频,最好选一个大于一分钟的尝试
-i %1
//输入背景音,最好短一点,方便测试是否循环
-i E:\softs\ffmpeg-4.2.2-win64-static\bin\2.mp3
-filter_complex
//将背景音无限循环
[1:a]aloop=loop=-1:size=2e+09[out];
//将背景音和视频中的音频混合
[out][0:a]amix
//裁剪总时长,裁剪到60秒
-ss 0 -t 60
//输出
-y result.mp4
代码示例:
#coding=utf-8
import os
import subprocess
import re
# 视频转换进度>>>
def compute_progress_and_send_progress(process):
while process.poll() is None:
line = process.stderr.readline().strip()
if line:
print(line)
# 获取ffmpeg目录绝对路径
global FFmpeg
FFmpeg = os.path.abspath('./ffmpeg/ffmpeg')
video_path = "E:\pyvideo\TestVideo\\1"
# 添加背景音乐
cmd = FFmpeg + ' -i %s\\out.mp4 -i %s\\2.mp3 -filter_complex "[0:a]volume=1[a0];[1:a]volume=0.2[a1];[a0][a1]amix=inputs=2[a]" -map 0:v -map "[a]" -c:v copy -c:a aac -shortest %s\\output2.mp4' % (video_path, video_path, video_path)
process = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdin=subprocess.PIPE, stdout=subprocess.PIPE,universal_newlines=True, shell=True)
videoInfo = compute_progress_and_send_progress(process)
print(videoInfo)
com = FFmpeg + ' -i %s\\1.mp3 -i %s\\out.ts -filter_complex "[0:a]aloop=loop=-1:size=2e+09[out];[out][1:a]amix" -ss 0 -t 52 %s\\output.ts' % (video_path, video_path, video_path)
#os.system(com)
com1 = FFmpeg + ' -i %s\\out.mp4 -i %s\\1.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=0 %s\\output.mp4' % (video_path, video_path, video_path)
#os.system(com1)
com2 = FFmpeg + ' -i %s\\out.mp4 -c copy -vbsf h264_mp4toannexb %s\\out.ts' % (video_path, video_path)
#os.system(com2)
com3 = FFmpeg + ' -i %s\\output.ts -c copy -absf aac_adtstoasc %s\\output.mp4' % (video_path, video_path)
#os.system(com3)