如何利用python下载视频,python下载excel文件
说起Excel,绝对是数据处理之王。Python作为网络名人的语言,也广泛应用于数据领域。本文将使用Python和Excel制作一个视频下载器,大家可以参考一下。
说起Excel,绝对是数据处理之王。
Python作为网络名人的语言,也广泛应用于数据领域。
-xlwings,Python的第三方库,是Python和Excel的交互工具,可以通过VBA轻松调用Python脚本,实现复杂的数据分析。
今天小F就给大家介绍一个Python Excel项目【视频下载器】。
主要使用以下Python库。
导入操作系统
导入系统
导入ssl
导入ffmpeg
将xlwings导入为xw
从pathlib导入路径
从aip导入AipSpeech
从pydub导入音频段
从wordcloud导入WordCloud
从pydub.utils导入make_chunks
从moviepy.editor导入音频文件剪辑
Ffmpeg、pydub和moviepy用于处理音频和视频,如剪切和格式转换。
Aip库是百度的官方库,用来把语音转换成文字。
#安装
pip安装百度-aip
这里就不多说xlwings了。想了解的朋友,可以去官方文档。
地址:https://docs.xlwings.org/en/stable/
下面给大家介绍一下吧!
首先,用下面的命令调用xlwings模块来生成一个项目。
#创建项目
xlwings快速启动转录器-独立
这时候我们可以看到有一个文件夹的名字叫转录者,作为我们的项目,可以改成任何名字。
请注意:
1 . transcriptor . py,这是一个带有Python代码的文件,内容如下。
将xlwings导入为xw
定义主():
wb=xw。Book.caller()
sheet=wb.sheets[0]
如果工作表[A1]。value==你好xlwings!:
工作表[A1]。value=再见xlwings!
else:
工作表[A1]。value=你好xlwings!
@xw.func
你好(姓名):
返回fHello {name}!
if __name__==__main__:
xw。书( transcriber.xlsm )。set_mock_caller()
主()
2 . transcriptor . xlsm,这是一个带有vba代码的Excel文件。内容如下。
打开Excel文件,提示宏未启用,所以设置。
文件-更多-选项-信任中心-信任中心设置-宏设置-启用所有宏。
然后安装xlwings的Excel集成插件。安装之前,您需要关闭所有Excel应用程序,否则将会报告错误。
#为xlwings安装Excel集成插件
xlwings加载项安装
xlwings和插件安装完成后,打开Excel时,你会在工具栏中发现一个xlwings的菜单框,表示xlwings插件安装成功。
它充当了VBA调用Python脚本的桥梁。
此外,我们需要在功能区中添加“开发工具”,因为我们将使用宏。
配置环境,Python执行器,Conda安装路径,Conda虚拟环境路径。
最后点ld。
quo;开发工具选项卡,点击Visual Basic - 工具 - 引用 - 添加xlwings。
到此,环境就配置成功了。
我们先用之前创建的transcriber.xlsm文件来实验一下,插入一个按钮,指定宏。
点击绿色的按钮,可以看见A1单元格会有信息出现,说明启用宏成功。
这里我们可以把A1单元格名称修改为OUTPUTCELL。
再去修改transcriber.py文件中的代码。
import xlwings as xwdef main():
wb = xw.Book.caller()
sheet = wb.sheets[0]
if sheet["OUTPUTCELL"].value == "Hello":
sheet["OUTPUTCELL"].value = "Bye"
else:
sheet["OUTPUTCELL"].value = "Hello"
@xw.func
def hello(name):
return f"Hello {name}!"
if __name__ == "__main__":
xw.Book("transcriber.xlsm").set_mock_caller()
main()
点击按钮,发现信息有所变,说明可以给单元格指定名称和输出。
了解了xlwings的基本使用,我们就可以对表格进行排版布局一波啦!
给音频转文本,生成字幕词云添加数据验证,其实就是一个列表选项,可选择是或否。
给音频转文本,生成字幕词云添加条件格式,选择是或否后,展示不同的颜色,默认否(淡红色)。
好了,最后修改一下各个单元格的名称。
编写主程序,代码如下。
def main():wb = xw.Book.caller()
sheet = wb.sheets[0]
bilibili_url = sheet["BILIBILI_URL"].value
transcribe = sheet["TRANSCRIBE"].value
wordcloud = sheet["WORDCLOUD"].value
status_cell = sheet["STATUS_CELL"]
# 重置状态栏
status_cell.value = ""
# 获取程序运行路径
output_path = Path(__file__).parent
output_path = str(output_path)
# 下载
if bilibili_url:
status_cell.value = "开始下载音视频文件 ..."
audio_file = download_bilibili(bilibili_url, status_cell, output_path)
else:
status_cell.value = "未输入B站视频地址"
sys.exit()
# 语音转文字
if transcribe == 是:
transcription_text = transcribe_audio_file(status_cell, audio_file, output_path)
# 生成词云
if transcribe == 是 and wordcloud == 是:
generate_wordcloud(transcription_text, output_path, status_cell)
使用第一个sheet表,不断的更新状态栏信息,判断是否要运行下载、语音转文字、生成词云这三个函数。
下载音视频使用到了you-get库,一键下载几乎所有网站上的音视频。
支持的网站还不少呢,本次就只用B站的视频来测试。
def download_bilibili(bilibili_url, status_cell, output_path):"""下载音视频"""
filename = bilibili_url.split(/)[-1].split(?)[0]
cmd = you-get {} -o {} -O {}.format(bilibili_url, output_path, filename)
os.system(cmd)
# 导入视频
my_audio_clip = AudioFileClip(output_path + "\\{}.flv".format(filename))
# 提取音频并保存
audio_file = output_path + "\\{}.wav".format(filename)
my_audio_clip.write_audiofile(audio_file)
status_cell.value = f"成功下载B站视频, 并且提取音频: {audio_file}"
return audio_file
使用moviepy库提取视频中的音频,用于语音识别。
当音频转文本选项的内容是【是】的时候,下面代码就派上用场了。
使用百度的短语音识别技术,需要申请使用,不想用的小伙伴直接两个可选项选择【否】,当做一个下载器即可。
可惜识别最长时间只能是60秒,所以需要将之前获取的音频进行切割。
此外还需要对音频的采样率进行匹配。
def transcribe_audio_file(status_cell, audio_file, output_path):"""语音转文字"""
status_cell.value = "开始处理音频文件..."
old_name = audio_file
new_name = audio_file.split(.)[0] + _16000.wav
split_name = audio_file.split(.)[0]
# 对音频进行降频处理
ffmpeg.input(old_name).output(new_name, ar=16000).run(cmd=FFMPEG_PATH)
# 切割音频
audio = AudioSegment.from_file(new_name, "wav")
# 切割的毫秒数
size = 30000
# 将文件切割为30s一块
chunks = make_chunks(audio, size)
for i, chunk in enumerate(chunks):
# 枚举,i是索引,chunk是切割好的文件
chunk_name = split_name + "_{0}.wav".format(i)
# 保存文件
chunk.export(chunk_name, format="wav")
status_cell.value = "使用百度语音接口识别音频..."
# 使用百度语音接口
""" 你的 APPID AK SK """
APP_ID =
API_KEY =
SECRET_KEY =
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件
def get_file_content(file_path):
with open(file_path, rb) as fp:
return fp.read()
transcription_txt = output_path + "\\transcription.txt"
# 识别本地文件
for i, chunk in enumerate(chunks):
result = client.asr(get_file_content(split_name + "_{0}.wav".format(i)), wav, 16000, {
dev_pid: 1537 # 默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格
})
print(result[result])
with open(transcription_txt, "a") as file:
file.write(result[result][0])
file.close()
status_cell.value = f"音频转文本成功, 文件保存到 {transcription_txt}"
return transcription_txt
可识别普通话、英语、粤语、四川话识别。通过在请求时配置不同的dev_pid参数,选择对应模型。
最终将音频转为文本,保存在一个文本文件中。
生成词云,这里需要注意添加中文字体路径,要不然词云图显示不了中文。
def generate_wordcloud(textfile, output_path, status_cell):"""生成词云"""
textfile = Path(textfile)
content = textfile.read_text()
wordcloud = WordCloud(font_path=output_path + \\simhei.ttf).generate(content)
wordcloud.to_file(Path(output_path) / f"{textfile.stem}.png")
status_cell.value = "生成词云图"
项目整体就如上面描述的一样。
此时我们只需打开Excel文件,选择是或否选项,修改B站视频地址,点击开始下载,即可下载视频,以及生成词云图。
无需再去运行Python文件。
成功下载到视频,并且对音视频进行处理,得到文本信息。
查看一下词云图吧。
发现百度的语音识别有点差啊,不知道是哪里出现了问题...
以上就是利用Python+Excel制作一个视频下载器的详细内容,更多关于Python Excel视频下载器的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。