说明: 用c++,将name.mp3这段录音文件,添加背景音乐,bg.mp3,然后生成新的文件
1.使用ffmpeg框架 2.背景音乐的音量不要超过主音频 step1:C:\Users\wangrusheng\CLionProjects\untitled9\CMakeLists.txt
cmake_minimum_required(VERSION 3.30)
project(untitled9)
set(CMAKE_CXX_STANDARD 20)
add_executable(untitled9 main.cpp)
step2:C:\Users\wangrusheng\CLionProjects\untitled9\main.cpp
#include <iostream>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <sstream>
using namespace std;
string escapePath(const string& path) {
return \ + path + \;
}
double getDuration(const string& filePath) {
string cmd = ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 + escapePath(filePath);
FILE* pipe = popen(cmd.c_str(), r);
if (!pipe) {
cerr << Failed to execute ffprobe command << endl;
return -1;
}
char buffer[128];
string result;
while (!feof(pipe)) {
if (fgets(buffer, 128, pipe) != nullptr)
result += buffer;
}
pclose(pipe);
try {
return stod(result);
} catch (...) {
cerr << Failed to parse duration << endl;
return -1;
}
}
int main() {
// File path configuration
const string name_path = C:\\Users\\wangrusheng\\Documents\\name.mp3;
const string bg_path = C:\\Users\\wangrusheng\\Documents\\bgs.mp3;
const string output_path = C:\\Users\\wangrusheng\\Documents\\combineds.mp3;
// Get main audio duration
double duration = getDuration(name_path);
if (duration <= 0) {
cerr << Failed to get main audio duration << endl;
return 1;
}
// Construct FFmpeg command
ostringstream cmd;
cmd << ffmpeg -y
<< -i << escapePath(name_path) <<
<< -stream_loop -1 -i << escapePath(bg_path) <<
<< -filter_complex \
<< [1:a]volume=-7dB[bg];
<< [bg]atrim=0: << duration << [bg_trim];
<< [0:a][bg_trim]amix=inputs=2:duration=first:normalize=0\
<< -c:a libmp3lame -b:a 256k // Added audio codec and bitrate settings
<< escapePath(output_path);
cout << Executing command:\n << cmd.str() << endl;
// Execute command
int ret = system(cmd.str().c_str());
if (ret != 0) {
cerr << FFmpeg execution failed, error code: << ret << endl;
return 1;
}
cout << Merge completed. Output file: << output_path << endl;
return 0;
}
step3:去这个路径,C:\Users\wangrusheng\Documents\combineds.mp3,用播放器打开此音频,发现成功 end