使用lux和ffpmeg从逼站获取视频并提取音乐
- 脚本
import argparse
from concurrent.futures import ALL_COMPLETED, ThreadPoolExecutor, wait
import subprocess
def getMp4AndToMp3(url, name):
result = subprocess.run(['lux -O {} {}'.format(name, url)], capture_output=True, text=True, shell=True)
print(result.stdout)
result = subprocess.run(['ffmpeg -i {}.mp4 -f mp3 -vn {}.mp3'.format(name, name)], capture_output=True, text=True, shell=True)
print(result.stdout)
result = subprocess.run(['rm -f ./{}.mp4'.format(name)], capture_output=True, text=True, shell=True)
print(result.stdout)
print('get exit')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='根据URL下载逼站视频并转出MP3')
# 添加一个命令行选项
parser.add_argument('--verbose', '-v', action='store_true', help='打印详细输出')
# 添加一个命令行参数
parser.add_argument('-input_file', type=str, help='输入文件路径')
parser.add_argument('-url', type=str, help='网站地址')
parser.add_argument('-name', type=str, help='最终mp3名称')
args = parser.parse_args()
if args.input_file is None:
getMp4AndToMp3(args.url.strip(), args.name)
else:
t = []
with open(args.input_file, 'r') as f:
for line in f.readlines():
t.append(line.strip().split())
executor = ThreadPoolExecutor(max_workers=10)
all_task = []
for arg in t:
all_task.append(executor.submit(getMp4AndToMp3, arg[0], arg[1]))
wait(all_task, return_when=ALL_COMPLETED)
print('main done')
可以使用文件批量转换和命令行单个下载
- 命令行
python downMp3.py -url https://www.youtube.com/watch\?v\=ueL1on1GuRM -name 发如雪
- 文件批量下载
其中hadDown.txt 为完成的工作项,tmp 为此次要进行的工作项,通过这两个文件可以很清楚的记录自己喜爱的歌曲
python downMp3.py -input_file ./tmp
echo "" >> hadDown.txt
date >> hadDown.txt
cat ./tmp >> hadDown.txt
echo "" > tmp
格式如下
https://www.bilibili.com/video/BV1Ss4y1d7Qo/?spm_id_from=333.337.search-card.all.click&vd_source=6d226570139e302e9f1b358081342825 一念执着