作为一个深爱林俊杰的歌迷,我突然在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在运行中
至此,文章结束,希望对您有一个帮助