使用Python3+FFmpeg分割MP3并添加多字段元数据失败,求助
解决FFmpeg批量分割MP3并添加元数据的问题
你的命令失效原因很明确:FFmpeg的-metadata参数不能用逗号分隔多个字段,每个元数据都需要单独使用一个-metadata选项。你之前把多个元数据挤在一个选项里,FFmpeg只会识别第一个,后面的都会被忽略。
正确的单文件命令格式
把每个元数据字段拆成独立的-metadata:
ffmpeg -loglevel panic -i 1.mp3 -ss 02:29:11 -to 02:34:43 -c copy -metadata title='My Title' -metadata artist='ME' -metadata date='2023' temp/myfile1.mp3
结合Python+CSV的批量处理方案
既然你用Python和CSV管理分割信息,直接循环读取CSV每行数据,构造正确的FFmpeg命令即可,这样还能避免手动输入的错误。示例代码如下:
import csv import subprocess # 假设CSV列名是:start_time,end_time,output_file,title,artist,date with open('你的文件列表.csv', 'r', encoding='utf-8') as csv_file: reader = csv.DictReader(csv_file) for item in reader: # 构造FFmpeg命令(用列表形式避免特殊字符转义问题) cmd = [ 'ffmpeg', '-loglevel', 'panic', '-i', '1.mp3', '-ss', item['start_time'], '-to', item['end_time'], '-c', 'copy', '-metadata', f"title={item['title']}", '-metadata', f"artist={item['artist']}", '-metadata', f"date={item['date']}", # 如果需要专辑信息,再加一行: # '-metadata', f"album={item['album']}", item['output_file'] ] # 执行命令 subprocess.run(cmd, check=True)
注意事项
- 如果元数据里包含空格、引号等特殊字符,用Python的列表形式传递命令参数(而非拼接字符串),能自动处理转义,避免出错。
-c copy是直接复制音频流,速度极快,但如果原文件的编码格式有问题,或者需要转码,可以去掉这个参数,FFmpeg会自动重新编码(但耗时会增加)。
内容的提问来源于stack exchange,提问作者Ghile
相关产品推荐
相关产品推荐

