如何写一个脚本定时合成音频

wen 实用脚本 1

本文目录导读:

如何写一个脚本定时合成音频

  1. 方案一:简单的FFmpeg定时合成脚本(Windows)
  2. 方案二:Python脚本(更灵活)
  3. 方案三:配置文件(config.json)
  4. 方案四:Linux定时任务(Crontab)
  5. 安装依赖
  6. 使用方法

我来帮你创建一个定时合成音频的脚本,根据你的需求,我提供几个不同场景的实现方案:

简单的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:

  1. 下载FFmpeg并添加到PATH
  2. Python用户:pip install schedule

Linux:

sudo apt-get install ffmpeg sox
pip install schedule

使用方法

  1. 直接运行Python脚本:

    python audio_composer.py
  2. 设置Windows计划任务:

    控制面板 -> 管理工具 -> 任务计划程序
    创建基本任务 -> 设置触发器和操作
  3. Linux crontab:

    crontab -e
    # 添加定时任务行

需要根据你的具体需求(音频合成方式、定时规则)调整脚本,如果需要更详细的说明,请告诉我具体的使用场景。

抱歉,评论功能暂时关闭!