python将多个音频文件与一张图片合成视频

代码中m4a可以换成mp3,图片和音频放同一目录,图片名image.jpg,多线程max_workers可以根据CPU核心数量修改。

import os

import subprocess

import sys

import concurrent.futures

import ffmpeg

def get_media_duration(media_path):

probe = ffmpeg.probe(media_path)

format = probe'format'

duration = format'duration'

print('duration: {}'.format(duration))

return duration

def convert_m4a_to_mp4(input_file_path,imput_image_path, output_file_path):

#ffmpeg -r 10 -f image2 -loop 1 -i image.jpg -i 01.mp3 -s 1920x1080 -pix_fmt yuvj420p -t 281 -vcodec libx264 output.mp4

print(input_file_path)

duration = get_media_duration(input_file_path)

cmd = f"ffmpeg -r 10 -f image2 -loop 1 -i \"{imput_image_path}\" -i \"{input_file_path}\" -s 640*480 -pix_fmt yuvj420p -t {duration} -vcodec libx264 \"{output_file_path}\""

os.system(cmd)

def convert_files(input_folder, output_folder):

检查输出文件夹是否存在,如果不存在则创建

if not os.path.exists(output_folder):

os.makedirs(output_folder)

创建 ThreadPoolExecutor,并限制最大线程数为 16

with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:

遍历输入文件夹中的所有 WAV 文件

for root, dirs, files in os.walk(input_folder):

for filename in files:

if filename.endswith(".m4a"):

input_image_path = os.path.join(root, "image.jpg")

input_file_path = os.path.join(root, filename)

output_file_path = os.path.join(output_folder, os.path.splitext(filename)0 + ".mp4")

提交任务给线程池

executor.submit(convert_m4a_to_mp4, input_file_path,input_image_path, output_file_path)

等待所有任务完成后退出

executor.shutdown()

if name == "main":

从命令行获取输入和输出文件夹的路径

if len(sys.argv) != 2:

print("Usage: python script.py input_folder")

sys.exit(1)

input_folder = sys.argv1

output_folder = sys.argv1

convert_files(input_folder, output_folder)

相关推荐
死磕音视频1 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林1 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li3 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook3 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
顽疲3 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
康小旺3 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
Wang's Blog3 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
启观川4 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦4 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python
小羊没烦恼!4 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net