【玩具】获取B站视频的音频片段
事情是这样的,我有个和社畜的社会地位不太相符的小爱好——听音乐剧。
基本上是在B站上点开视频听,不是不想在网易云或者QQ音乐听,只是在这些音乐软件上面,我想听的片段要不就收费,要不版本不是我喜欢的,要不干脆就找不到。
而且,一部音乐剧里面,总是有些片段我很喜欢,但是有些片段则没多大兴趣,如果在B站上面听,则总要听一遍这些不感兴趣的地方,这效率就很低了。
那么干脆就搞一个小工具吧!就放服务器上面,直接用接口去调用,然后把处理好的音频文件返回回来,这样也不用在本地下载整个视频然后自己手动切了,快捷又优雅~
作为面向百度/github开发的资深开发者,这点需求是难不倒我的,很快找到了一个简单好用的B站视频下载工具,地址在这儿:https://github.com/nilaoda/BBDown(感谢BBDown这个库的开发者大佬,造福百姓功德无量)
然后写个小脚本,来调用这个BBDown的工具进行视频下载:
#! /bin/sh
#使用方法
#./bilicut.sh bv号 开始时间 结束时间 输出文件名 分P选项(可选)
#例如:
#./bilicut.sh BV1uz4y1S7oG 00:00:20 00:00:30 悲惨世界0301 3
# 参数说明
# 1: bv号
# 2: 开始时间
# 3: 结束时间
# 4: 输出文件名
# 5:分P索引
#环境要求说明:
#此脚本使用BBDown下载工具,需要将脚本与BBDown执行文件放在同一目录下
#BBDown传送门:https://github.com/nilaoda/BBDown
#需要提前安装好FFmpeg环境,详见 https://blog.csdn.net/weixin_36155936/article/details/116988522
#仅音频选项 --audio-only
if [ ! -d "/root/download" ]; then
mkdir /root/download
fi
if [ ! -d "/root/output" ]; then
mkdir /root/output
fi
biliUrl="https://www.bilibili.com/video/"
downloadFlag=0
echo "正在下载..."
if [ $5 > 0 ] ; then
path=/root/download/${1}/P${5}
echo "分P选择:P${5}"
#判断是否已经有缓存文件
if [ ! -d "/root/download/${1}" ]; then
mkdir /root/download/$1
fi
if [ ! -d "/root/download/${1}/P${5}" ]; then
mkdir /root/download/$1/P$5
results=`./BBDown ${biliUrl}${1} -p ${5} --work-dir /root/download/${1}/P${5} --audio-only`
downloadFlag=1
fi
else
path=/root/download/${4}
#echo "不存在分P选项"
#判断是否已经有缓存文件
if [ ! -d "/root/download/${1}" ]; then
mkdir /root/download/$1
results=`./BBDown ${1} --work-dir /root/download/${4} --audio-only`
downloadFlag=1
fi
fi
if [ $downloadFlag -eq 0 ] ; then
echo "使用缓存文件"
else
echo "下载完成"
fi
files=$(ls $path)
echo "文件标题为 ${files}"
echo "切片时间区间 ${2} - ${3}"
echo "开始处理......"
ffmpeg -ss $2 -i "${path}/${files}" -c copy -t $3 "/root/output/${4}.mp4" -loglevel quiet
ffmpeg -i "/root/output/${4}.mp4" -vn -codec copy "/root/output/${4}".m4a -loglevel quiet
echo "处理完成 输出文件 /root/output/${4}.m4a"
(已上传至GitHub,有Windows版可以使用:https://github.com/heng4719/BBCut)
同时在脚本的最后,也可以看到用ffmpeg去对这个视频进行了一个剪辑和格式转换的处理,最终把音频文件输出到 /root/output/目录下。
到这里,实际上主要功能就已经完成了,调用这个脚本传入指定的视频bv号和其他参数,就可以完美实现需求了。
但是不够优雅!
难道我每次想切视频,都还得连到服务器上面去手动写命令?
Not elegant!
所以就写了个前端页面来调用:

至此,就可以随时随地的下载想要的视频音乐片段啦,优雅~
【玩具】获取B站视频的音频片段的更多相关文章
- python 爬取B站视频弹幕信息
获取B站视频弹幕,相对来说很简单,需要用到的知识点有requests.re两个库.requests用来获得网页信息,re正则匹配获取你需要的信息,当然还有其他的方法,例如Xpath.进入你所观看的视频 ...
- ffmpeg+Python实现B站MP4格式音频与视频的合并
目录 安装 官网下载 环境变量 验证 ffmpeg的使用 Python实现自动处理 文件结构 番剧缓存结构 常规缓存结构 文件信息 代码 具体代码 代码说明 安装 官网下载 http://ffmpeg ...
- 在C#中用MediaInfo获取视频或音频的属性
MediaInfo是一个开源的获取视频或音频的信息的非常便利的工具,它本身就带有一个GUI界面,可以非常方便我们查看视频信息.但是,当我们写一些转码程序时,往往需要在程序中获取视频信息的时候. 以前我 ...
- Python批量合并处理B站视频
最近想学习后端,又不想花钱,怎么办呢?于是在手机端B站(哔哩哔哩)上面找到了满意的免费视频教程,但是手机端看起来很不方便啊.于是,我通过在手机端缓存下来后,导入到了电脑端,但是我后面了发现两个问题: ...
- Python玩转各种多媒体,视频、音频到图片
我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑.字幕编辑.分离音频.视频音频混流等.又比如对音频文件的操作:音频剪辑,音频格式转换.再比如我们最常用的图片文件,格式转换.各 ...
- 与众不同 windows phone (41) - 8.0 相机和照片: 通过 AudioVideoCaptureDevice 捕获视频和音频
[源码下载] 与众不同 windows phone (41) - 8.0 相机和照片: 通过 AudioVideoCaptureDevice 捕获视频和音频 作者:webabcd 介绍与众不同 win ...
- Android开发之获取本地视频和获取自拍视频
1.获取本地所有视频 public void getLoadMedia() { Cursor cursor = UILApplication.instance.getApplicationContex ...
- 视频和音频播放的演示最简单的例子6:OpenGL广播YUV420P(T经exture,采用Shader)
===================================================== 最简单的视频和音频播放的演示样品系列列表: 最简单的视音频播放演示样例1:总述 最简单的视音 ...
- 使用咪咕云做C站视频直链源
首先我们先百度搜索一下“咪咕云” 点击进入-->用户注册或登录 注册时选择个人用户-->前往邮箱激活-->进入邮箱激活成功后重新登录 登录后在控制台选择“云点播” 即可进行上传视频了 ...
随机推荐
- Python课程笔记(十一)
一.线程与多线程 1.线程与进程 线程指的是 进程(运行中的程序)中单一顺序的执行流. 多个独立执行的线程相加 = 一个进程 多线程程序是指一个程序中包含有多个执行流,多线程是实现并发机制的一种有效手 ...
- 15个问题自查你真的了解java编译优化吗?
摘要:为什么C++的编译速度会比java慢很多?二者运行程序的速度差异在哪? 了解了java的早期和晚期过程,就能理解这个问题了. 本文分享自华为云社区<你真的了解java编译优化吗?15个问题 ...
- 微软认真聆听了开源 .NET 开发社区的炮轰: 通过CLI 支持 Hot Reload 功能
微软近日激怒了开源.NET社区,起因是它删除了开源.NET的一项旗舰功能,以提升Visual Studio 的吸引力,尤其是针对与Visual Studio颇有渊源的跨平台源代码编辑器Visual S ...
- 无缓存交换 牛客网 程序员面试金典 C++ Python
无缓存交换 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个函数,函数内不使用任何临时变量,直接交换两个数的值. 给定一个int数组AB,其第零个元素和第一个元素为待交换的值,请返回 ...
- 最近公共祖先(lca)与树上叉分
lca的定义不在过多解释, 代码如下: inline void bfs() { queue<int>q; deep[s]=1;q.push(s); while(!q.empty()) { ...
- Redis安装、配置和卸载
1.安装 mkdir /usr/local/redis 添加目录 wget [http://download.redis.io/releases/redis-4.0.1](http://downloa ...
- 开源项目|Go 开发的一款分布式唯一 ID 生成系统
原文连接: 开源项目|Go 开发的一款分布式唯一 ID 生成系统 今天跟大家介绍一个开源项目:id-maker,主要功能是用来在分布式环境下生成唯一 ID.上周停更了一周,也是用来开发和测试这个项目的 ...
- Vue的第一课
终于学习到Vue了,美滋滋,给自己点个赞 前后端作用: 1.1vs1(一个Vue对象控制一个) <body> <div id="app"> <p> ...
- APM监控--(三)zipkin部署手册
一,基础知识储备分布式跟踪的目标一个分布式系统由若干分布式服务构成,每一个请求会经过多个业务系统并留下足迹,但是这些分散的数据对于问题排查,或是流程优化都很有限,要能做到追踪每个请求的完整链路调用,收 ...
- .net工程师学习vue的心路历程(二)
本章主要搞懂在通过vue init webpack projectname 命令创建 vue 项目过程中有个选择.即关于如何选择:runtime+compiler和runtime+only. 现在我通 ...