研究PySide与youtube_dl结合实现视频下载,抽丝剥蚕,步步维艰,却也颇有意思。

记录初始心得。界面以PySide之Qt编写,调用youtube_dl下载,回调出下载进度,代码如下:

# encoding: utf-8

from __future__ import unicode_literals
from PySide.QtGui import *
from PySide.QtCore import *
from main_ui import *
import youtube_dl
import threading class MainWindow(QMainWindow, Ui_Main):
update_info = Signal(dict) def __init__(self, parent=None):
super(MainWindow, self).__init__(parent) self.setupUi(self)
self.btnGet.setEnabled(False)
self.txtUrl.setText('https://www.youtube.com/watch?v=dvSLaHj9VVM')
self.update_info.connect(self.safe_hook_progress) def hook_progress(self, d):
self.update_info.emit(d) def safe_hook_progress(self, d):
info = ''
if d['status'] == 'downloading':
info = 'downloaded_bytes: ' + str(d['downloaded_bytes']) + ', elapsed: ' + str(
d['elapsed']) + ', speed: ' + str(d['speed']) + ', filename: ' + d['filename'];
elif d['status'] == 'finished':
info = '\r\ncomplete!'
self.txtUrl.setEnabled(True)
self.btnGet.setEnabled(True)
if info != '':
self.txtInfo.append(info)
# self.txtInfo.setText(info) def get_opts(self):
ydl_opts = {
'format': 'bestvideo',
# 'outtmpl': os.path.join(app.config['VIDEOS_FOLDER'], '%(id)s.%(ext)s'),
# 'logger': MyLogger(),
'progress_hooks': [self.hook_progress],
}
return ydl_opts def download(self, url):
print 'download......', url
if url.strip() == '':
return ydl = youtube_dl.YoutubeDL(self.get_opts())
ydl.download([url]) @Slot()
def on_txtUrl_returnPressed(self):
if self.btnGet.isEnabled():
self.btnGet.click() @Slot(str)
def on_txtUrl_textChanged(self, s):
self.btnGet.setEnabled(s != '') @Slot()
def on_btnGet_clicked(self):
self.txtUrl.setEnabled(False)
self.btnGet.setEnabled(False)
self.txtInfo.setText('')
t = threading.Thread(target=MainWindow.download, args=(self, self.txtUrl.text()), name='thread')
t.start()

效果如图所示:

参考:

youtube_dl

python脚本调用youtube-dl实现视频下载

Python: 调用youtube_dl实现视频下载的更多相关文章

  1. 【转】python调用youtube-dl实现视频下载

    youtube-dl是一个命令行程序,用于从YouTube.com和更多网站下载视频.它需要Python解释器,版本2.6,2.7或3.2+,并且支持Unix,Windows或Mac OS X中运行. ...

  2. python学习路线以及视频下载

    作者:林其链接:https://www.zhihu.com/question/19660572/answer/194904019来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. [uiautomator篇][python调用java][1]应用下载的插件需要很长时间问题解决

    1第一次打开应用,可能会要求下载插件,我们先在/sdcard/Android/data/<packageName>  或者/data/data/<pakeageName>找到插 ...

  4. python实现视频下载

    最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容.如果有这样一个程序,可以把各大视频网站的热门用户最新发布的视频都下载下来,不仅方便自己观看,还可以将没有版权的视频发布在个人社交网站 ...

  5. Python调用ffpmeg和ffprobe处理视频文件

    需求: 运营有若干批次的视频.有上千个,视频文件,有mp4格式的,有ts格式的 现在有需要去掉视频文件片头和片尾的批量操作需求. 比如 文件夹A下面的视频去掉片尾10秒 文件夹B下面的视频去掉片头6秒 ...

  6. 手把手教你用python打造网易公开课视频下载软件2-编码相关说明

    函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...

  7. 手把手教你用python打造网易公开课视频下载软件1-总述

    写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...

  8. python调用mediainfo工具批量提取视频信息

    写了2个脚本,分别是v1版本和v2版本 都是python调用mediainfo工具提取视频元数据信息 v1版本是使用pycharm中测试运行的,指定了视频路径 v2版本是最终交付给运营运行的,会把v2 ...

  9. Python 爬虫 Vimeo视频下载链接

    python vimeo_d.py https://vimeo.com/228013581 在https://vimeo.com/上看到稀罕的视频 按照上面加上视频的观看地址运行即可获得视频下载链接 ...

随机推荐

  1. hive,分桶,内外部表,分区

    简单的word-count操作: [root@master test-map]# head -10 The_Man_of_Property.txt    #先看看数据Preface“The Forsy ...

  2. alias 设置别名

    我们在使用Linux中使用较长的命令而且要经常要使用时,总是会使用别名,这里就简单的介绍一下别名alias 指令:alias设置指令的别名 语法:#  alias name='command line ...

  3. ABAP-定时-异步

    *&---------------------------------------------------------------------* *& Report ZRICO_TES ...

  4. eclipse,import,导入项目显示红色叹号

    [场景]eclipse导入项目后,该项目出现红色叹号.打开类文件,会有无数的“The type ... cannot be resolved.”等稀奇古怪的编译错误. [分析]当前eclipse环境中 ...

  5. Redis学习笔记一(Redis的详细安装及Linux环境变量配置和启动)

     Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 我使用的是下面这个版本: 若没有资源的话,我在 ...

  6. 虚拟机centos NAT模式 配置静态ip

    主要的设置有1.配置ip地址段,2.配置NAT(网关.ip地址端.子网掩码),3.修改网卡配置文件(/etc/sysconfig/network-scripts/ifcfg-eth0 ),4.重启网卡 ...

  7. indexOf实现引申出来的各种字符串匹配算法

    我们在表单验证时,经常遇到字符串的包含问题,比如说邮件必须包含indexOf.我们现在说一下indexOf.这是es3.1引进的API ,与lastIndexOf是一套的.可以用于字符串与数组中.一些 ...

  8. [Nginx]Nginx的基本配置与优化1(完整配置示例与虚拟主机配置)

    ---------------------------------------------------------------------------------------- 完整配置示例: [ n ...

  9. [PHP]防止表单重复提交的几种方法

    --------------------------------------------------------------------------------------------------- ...

  10. 生产者消费者 wait()。 notify()

    public class ThreadDemo3 { public static void main(String[] args){ MyList list = new MyList(); Produ ...