免费下载音乐

发布时间 2023-06-18 00:08:51作者: yiweiw

使用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 一念执着