查看: 1525|回复: 19

爬虫-哔哩哔哩-视频下载

[复制链接]
发表于 2020-11-15 20:12 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

一个哔哩哔哩视频下载,因为要下载一个4k画质的视频奈何要开会员和下载客户端才能下载。
哔哩哔哩的视频有点特殊,他是由视频+音频两个文件组成的,所以把这两个文件下载下来后需要将视频和音频合并。
合并用的ffmpeg的插件,但是不知道为什么有时候会合并失败,不过不重要,把音频和视频下载出来后网上有很多第三方的合并软件可以合成。
使用方式:首先选择文件保存的地址,然后输入视频网页地址,点击确定,然后选择画质一般选4K吧。
然后就等他下载,不得不说哔哩哔哩的网络带宽挺大的,下载十多秒,下载完成后,按照提示点击合并按钮进行合并。
合并完成后你的文件夹有三个文件(音频、视频、合成视频)。
有时候可能会合并失败,多试几次,或者网上找其他的合成工具进行合并
本来想放成品的,但是51限制文件大小3M,就懒得用其他方式上传了 因为没啥技术含量,我把关键代码贴出来就基本上能做出来(贴出的代码就是获取下载链接的,里面包括视频链接和音频链接,然后下载下来用ffmpeg合并)。
PS:不知道为什么最近感觉身体被掏空了。
代码:
  1. private void button2_Click(object sender, EventArgs e)
  2.         {
  3.             label2.Visible = true;
  4.             HttpHelper http = new HttpHelper();
  5.             HttpItem item = new HttpItem
  6.             {
  7.                 URL = textBox1.Text.Trim(),
  8.                 Host = "www.bilibili.com",
  9.                 UserAgent = userAgent
  10.             };
  11.             var result = http.GetHtml(item);
  12.             string html = result.Html;
  13.             string gl = HttpHelper.GetBetweenHtml(html, "window.__playinfo__=", "</script><script>window.__INITIAL_STATE__");
  14.             title = HttpHelper.GetBetweenHtml(html, "<title data-vue-meta="true">", "</title>");
  15.             root = (Root)HttpHelper.JsonToObject<Root>(gl);
  16.             if (root.code == 0)
  17.             {

  18.                 RadioButton[] radioButton = new RadioButton[root.data.accept_description.Count];
  19.                 //控件上边缘与容器上边缘的距离  
  20.                 int top = 6;
  21.                 //记录循环,控件左上角相对于容器左上角的坐标  
  22.                 int i = 0;
  23.                 int n = 0;
  24.                 GroupBox gb = new GroupBox();
  25.                 panel1.AutoScroll = true;
  26.                 for (n = 0; n < root.data.accept_description.Count; n++)
  27.                 {
  28.                     radioButton[n] = new RadioButton();
  29.                     button3.Visible = true;
  30.                     if (n % 3 == 0 && n != 0)
  31.                     {
  32.                         top += 30;
  33.                         i = 0;
  34.                     }
  35.                     if (n == 0)
  36.                     {
  37.                         radioButton[n].Checked = true;
  38.                     }
  39.                     radioButton[n].AutoSize = true;
  40.                     radioButton[n].Top = top;
  41.                     //控件左上角相对于容器左上角的坐标,以及每个控件之间的距离  
  42.                     radioButton[n].Location = new Point(i * 150 + 2, top);
  43.                     // MessageBox.Show(name[n].ToString());  
  44.                     radioButton[n].Text = root.data.accept_description[n];
  45.                     radioButton[n].Visible = true;
  46.                     radioButton[n].Name = "radioButton" + n;
  47.                     radioButton[n].Tag = n;
  48.                     this.panel1.Controls.Add(radioButton[n]);
  49.                     i++;
  50.                 }
  51.             };
  52.         }
  53.           //点击下载按钮的代码
  54.             foreach (var item in panel1.Controls)
  55.             {
  56.                 if (item is RadioButton)
  57.                 {
  58.                     RadioButton radio = item as RadioButton;
  59.                     if (radio.Checked)
  60.                     {
  61.                         var tag = int.Parse(radio.Tag.ToString());
  62.                         string videourl = root.data.dash.video.ToList()[tag].baseUrl;
  63.                         string audiourl = root.data.dash.audio.ToList()[0].baseUrl;
  64.                         //DownloadAudio(audiourl);
  65.                         //DownloadVideo(videourl);

  66.                         Thread thread = new Thread(new ParameterizedThreadStart(DownloadVideo));
  67.                         thread.Start(videourl);
  68.                         Thread thread2 = new Thread(new ParameterizedThreadStart(DownloadAudio));
  69.                         thread2.Start(audiourl);

  70.                     }

  71.                 }
  72. //合成代码
  73. private void button4_Click(object sender, EventArgs e)
  74.         {
  75.             this.Invoke((EventHandler)delegate
  76.             {
  77.                 textBox2.Text += DateTime.Now.ToString() + "合并中 请稍后...\r\n";
  78.             });
  79.             string path = textBox3.Text + guid ;
  80.             string avi = textBox3.Text +"合并视频";
  81.             string arguments = "-i " + path + ".avi  -i " + path + ".aac  -vcodec copy -acodec copy " + avi + ".avi";
  82.             //arguments = "-i " + path + ".avi  -i " + path + ".aac  -c:v copy -c:a aac -strict experimental " + avi + ".avi";
  83.             Process p = new Process();
  84.             p.StartInfo.FileName = "ffmpeg.exe";
  85.             p.StartInfo.Arguments = arguments;
  86.             p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
  87.             //  p.StartInfo.RedirectStandardError = true;
  88.             p.ErrorDataReceived += new DataReceivedEventHandler(Output);//外部程序
  89.             p.Start();//启动线程
  90.             timer1.Enabled = true;
  91.         }
复制代码


11.png 22.png
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2020-11-15 20:12 | 显示全部楼层

感谢分享,谢谢提供分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-15 20:37 | 显示全部楼层

不错不错~~~~~
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-15 20:38 | 显示全部楼层
6666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-15 21:16 | 显示全部楼层
谢谢大佬分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-15 21:20 来自手机 | 显示全部楼层
感谢大佬分享,大牛因有你而更精彩。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-15 21:51 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-15 22:06 | 显示全部楼层

不错不错,,,
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-15 22:22 | 显示全部楼层
谢谢@Thanks!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-15 22:35 | 显示全部楼层
谢谢楼主分享,先收藏了。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部