如何通过AI利用Python批量下载B站视频并将其转换为MP3格式

            作为一个深爱林俊杰的歌迷,我突然在B站上看到这样一个视频

2023年8.19上海站林俊杰的一些歌曲的视频,作者将其保存为一个合集了,于是我就想到利用you-get这个模块去将所有视频给爬下来,但是视频有29条,一个一个输入显然很麻烦,于是我想到了Python,并且观察该合集中的网址只有p的值是变化的,那事情就好办了。首先,发送第一个命令给AI

我是否能够通过Python打开命令行如何自动化输入命令

import subprocess

# 打开命令行
process = subprocess.Popen(['cmd'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 输入命令
command = 'ls\n'  # 这里可以替换为你自己的命令
process.stdin.write(command.encode())
process.stdin.flush()

# 获取命令行输出
output = process.stdout.read().decode()
print(output)

# 关闭命令行
process.stdin.close()
process.stdout.close()
process.stderr.close()

得到该回答

于是我追加询问我希望在命令行中批量输入https://www.bilibili.com/video/BV1uP411Y76Z/?p=1&spm_id_from=pageDriver&vd_source=850c20d025b9b6034ad90b4a6896f479并使p的值一直迭代到30

import subprocess

# 打开cmd
cmd_process = subprocess.Popen(['cmd'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

# 执行命令
for i in range(1, 31):
    url = f'you-get "https://www.bilibili.com/video/BV1uP411Y76Z?p={i}&vd_source=850c20d025b9b6034ad90b4a6896f479" --playlist\n'
    cmd_process.stdin.write(url.encode())  # 将字符串转成 bytes 类型
    cmd_process.stdin.flush()
    pass

# 获取输出结果并打印
output = cmd_process.stdout.read().decode('gbk')  #
print(output)
# 关闭进程
cmd_process.kill()

获得该代码块在运行之后成功下载到所有视频,注意,如果you-get 后面没有--playlist则会出现问题原因是因为这些视频都在同一个合集中,我们不妨尝试一下在cmd中运行you-get命令

可以看到第二行中的This is multipart video。

在获得所有视频后,系统会将所有视频保存到启动命令行的目录中,我这里用的是pycharm他就自动保存到了该项目的下面,我们创建一个videos目录并将所有视频保存在里面

接下来我们就可以将其转换为MP3格式了,询问AI:我如何将下载保存到video的MP4(flv)文件全部转换为MP3。

import os
import subprocess

# 设置视频文件夹路径和音频文件夹路径
if not os.path.exists("audios"):
    os.makedirs('audios')
video_dir = 'D:/appreserve/videos'
audio_dir = 'D:/appreserve/audios'

# 获取视频文件列表
video_list = os.listdir(video_dir)

# 循环遍历视频文件并提取音频
for video_file in video_list:
    if video_file.endswith('.mp4'):
        video_path = os.path.join(video_dir, video_file)
        audio_file = os.path.splitext(video_file)[0] + '.mp3'
        audio_path = os.path.join(audio_dir, audio_file)
        audio_folder = os.path.dirname(audio_path)  # 获取输出文件夹路径
        if not os.path.exists(audio_folder):
            os.makedirs(audio_folder)

        ffmpeg_path = "D:/ffmpeg/bin/ffmpeg.exe"  # FFmpeg的完整路径
        cmd = f'{ffmpeg_path} -i "{video_path}" -vn -c:a libmp3lame "{audio_path}"'
        subprocess.check_call(cmd, shell=True)

注意,要提前创建videos文件夹以及audios文件夹,不然就需要用到os的检测模块,否则会报错

当Run中出现这些红色字符就是ffmpeg在运行中

至此,文章结束,希望对您有一个帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值