本文目录导读:

我来帮你创建一个定时合成音频的脚本,根据你的需求,我提供几个不同场景的实现方案:
简单的FFmpeg定时合成脚本(Windows)
@echo off :: audio_composer.bat - 定时合成音频文件 :: 设置工作目录 cd /d "C:\YourAudioFolder" :: 获取当前时间作为文件名 set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% set timestamp=%timestamp: =0% set output_file="output_%timestamp%.mp3" :: 合成音频命令(合并多个音频文件) ffmpeg -f concat -safe 0 -i filelist.txt -c copy %output_file% :: 或者混合多个音频(叠加) :: ffmpeg -i audio1.mp3 -i audio2.mp3 -filter_complex amix=inputs=2:duration=first %output_file% echo Audio合成完成: %output_file% :: 创建计划任务(每天运行一次) :: schtasks /create /tn "AudioComposer" /tr "C:\YourAudioFolder\audio_composer.bat" /sc daily /st 09:00
Python脚本(更灵活)
# audio_composer.py
import os
import subprocess
import schedule
import time
from datetime import datetime
import json
class AudioComposer:
def __init__(self, config_file='config.json'):
with open(config_file, 'r', encoding='utf-8') as f:
self.config = json.load(f)
def compose_audio(self):
"""执行音频合成任务"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
output_file = f"{self.config['output_dir']}/output_{timestamp}.{self.config['format']}"
# 方式1:合并多个音频
if self.config['method'] == 'concat':
self._concat_audio(output_file)
# 方式2:混合多个音频
elif self.config['method'] == 'mix':
self._mix_audio(output_file)
print(f"音频合成完成: {output_file}")
# 可选:上传到云存储或发送通知
# self.upload_to_cloud(output_file)
def _concat_audio(self, output_file):
"""合并音频文件"""
input_files = self.config['input_files']
# 方法1:使用FFmpeg concat协议
cmd = ['ffmpeg']
for file in input_files:
cmd.extend(['-i', file])
cmd.extend([
'-filter_complex',
f'concat=n={len(input_files)}:v=0:a=1',
'-acodec', 'libmp3lame',
output_file
])
subprocess.run(cmd, check=True)
def _mix_audio(self, output_file):
"""混合多个音频"""
input_files = self.config['input_files']
volumes = self.config.get('volumes', ['1.0'] * len(input_files))
# 创建音频混合滤镜
filter_parts = []
for i, (file, vol) in enumerate(zip(input_files, volumes)):
filter_parts.append(f'[{i}:a]volume={vol}[a{i}]')
mix_input = ''.join([f'[a{i}]' for i in range(len(input_files))])
filter_parts.append(f'{mix_input}amix=inputs={len(input_files)}:duration=first[out]')
cmd = ['ffmpeg']
for file in input_files:
cmd.extend(['-i', file])
cmd.extend([
'-filter_complex',
';'.join(filter_parts),
'-map', '[out]',
output_file
])
subprocess.run(cmd, check=True)
def run_scheduled_tasks():
"""运行定时任务"""
composer = AudioComposer()
# 每天9点和18点执行
schedule.every().day.at("09:00").do(composer.compose_audio)
schedule.every().day.at("18:00").do(composer.compose_audio)
# 每30分钟执行一次
# schedule.every(30).minutes.do(composer.compose_audio)
print("定时任务已启动...")
while True:
schedule.run_pending()
time.sleep(60)
if __name__ == "__main__":
# 立即执行一次
# composer = AudioComposer()
# composer.compose_audio()
# 启动定时任务
run_scheduled_tasks()
配置文件(config.json)
{
"input_files": [
"C:/Audio/intro.mp3",
"C:/Audio/music.mp3",
"C:/Audio/outro.mp3"
],
"output_dir": "C:/Audio/Output",
"format": "mp3",
"method": "concat",
"volumes": ["0.8", "1.0", "0.6"],
"schedule": {
"daily_times": ["09:00", "18:00"],
"interval_minutes": null
}
}
Linux定时任务(Crontab)
#!/bin/bash
# audio_composer.sh
# 设置变量
INPUT_DIR="/path/to/input"
OUTPUT_DIR="/path/to/output"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
OUTPUT_FILE="${OUTPUT_DIR}/output_${TIMESTAMP}.mp3"
# 获取要合成的文件列表
FILES=(
"${INPUT_DIR}/intro.mp3"
"${INPUT_DIR}/background.mp3"
"${INPUT_DIR}/outro.mp3"
)
# 使用sox合成音频(如果安装了sox)
sox "${FILES[@]}" "${OUTPUT_FILE}" splice
# 或者使用FFmpeg
# ffmpeg -i "${FILES[0]}" -i "${FILES[1]}" -i "${FILES[2]}" \
# -filter_complex "concat=n=3:v=0:a=1" \
# "${OUTPUT_FILE}"
echo "音频合成完成: ${OUTPUT_FILE}"
Crontab配置:
# 每天9点和18点执行 0 9,18 * * * /path/to/audio_composer.sh # 每2小时执行一次 0 */2 * * * /path/to/audio_composer.sh
安装依赖
Windows:
- 下载FFmpeg并添加到PATH
- Python用户:
pip install schedule
Linux:
sudo apt-get install ffmpeg sox pip install schedule
使用方法
-
直接运行Python脚本:
python audio_composer.py
-
设置Windows计划任务:
控制面板 -> 管理工具 -> 任务计划程序 创建基本任务 -> 设置触发器和操作 -
Linux crontab:
crontab -e # 添加定时任务行
需要根据你的具体需求(音频合成方式、定时规则)调整脚本,如果需要更详细的说明,请告诉我具体的使用场景。