您当前的位置:首页 > 计算机 > 编程开发 > Python

Python结合ffmpeg批量合并当前目录下所有 .mp3 文件

时间:04-26来源:作者:点击数:

起因

刚刚在整理文件夹时,我顺手打开了一个文件夹,惊讶地发现里面有竟然有78个.mp3文件,仔细一看才发现它们是我准备俄语考试时的听力音频。

我大脑瞬间高速运转:这些文件为何在这里?要删还是留?上次还有好多没听完的。在我犹豫不决的时候,突然有个想法在我脑海闪现:为什么不把所有文件都合并成一个,同时提取文本内容呢?这样在听音频时,如果有听不懂的地方还能看看文本,对学习会更有帮助。

说干就干,我先明确了需求:把当前目录下的78个.mp3文件合并成一个文件。

实现步骤

我首先考虑将所有文件拖入剪辑软件中进行处理,但一想到有78个文件,导入到剪辑软件中还得一个一个拼接,想想头都大了。幸好之前用过ffmpeg合并视频,这不就派上用场了。

现在我们进一步明确了需求:ffmpeg把当前目录下的78个.mp3文件合并成一个文件

在开始实现之前,先查看这篇文章[FFmpeg] 拼接音频。根据文章的内容,首先我们需要把目录下所有的.mp3文件按照file 'x.mp3'的格式逐行写入到concat.txt文件中,然后执行下面的代码,就能得到一个合并后的output.mp3文件。

  ffmpeg -f concat -i concat.txt -c copy "output.mp3"

进一步拆解需求,现在我们需要遍历当前目录下所有的.mp3文件,并按照file 'x.mp3'的格式逐行写入到concat.txt文件中。

是一个一个手动收入吗?78个,开玩笑?😝

NO!NO!NO!

这时,我们的Python小伙伴请求出战。

好!那你就来吧!

说来就来,先新建main.py,然后双击打开,三下五除二,很快啊,代码写完了,完整代码如下:

import os

def scan_and_write_mp3(directory):
    # 检查目录是否存在
    if not os.path.exists(directory):
        print("目录不存在")
        return

    # 检查目录是否是一个文件夹
    if not os.path.isdir(directory):
        print("输入路径不是一个目录")
        return

    # 打开concat.txt文件以写入模式
    with open(os.path.join(directory, 'concat.txt'), 'w') as concat_file:
        # 遍历目录
        for root, dirs, files in os.walk(directory):
            for file in files:
                # 检查文件是否是.mp3文件
                if file.endswith('.mp3'):
                    # 将文件名写入concat.txt文件
                    concat_file.write("file '"+ file +"'\n")

    print("writing is done")

# 指定要扫描的目录路径
# directory_to_scan = r'C:\path\to\your\directory'  # 使用原始字符串
# 这里输入你的目录
directory_to_scan = "C:/path/to/your/directory" # 这里输入你的目录,使用 \ 会报错

# 调用函数进行扫描和写入
scan_and_write_mp3(directory_to_scan)

是骡子是马,让我们在vscode中‘溜’一下,很快不到1秒钟,终端打印出了以下信息:

[Running] python -u "c:\Users\test\Desktop\est\main.py"
writing is done

[Done] exited with code=0 in 0.098 seconds

同时我们目录里也出现了concat.txt文件,双击打开,这正是我们想要的:

file '01.mp3'
file '02.mp3'
…………
file '78.mp3'

接下来就简单多了,打开CMD窗口,输入以下代码,按下回车,等待程序跑完:

ffmpeg -f concat -i concat.txt -c copy "output.mp3"

窗口输出了以下信息:

size=  188183kB time=01:20:17.57 bitrate= 320.0kbits/s speed=3.07e+03x

最后,让我们双击打开output.mp3文件,时间轴1:20:16,舒服了~

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门