Javacv 音视频小工具 - 下载抖音视频

article/2025/9/21 16:31:07

Javacv 音视频小工具 - 下载抖音视频

一、前言

大家好,俗话说的好,学习新的知识后要学以致用,在学习音视频的过程中,你有没有疑问,不知道音视频可以用来做什么。下面举几个例子,比较耳熟能详,被吹到风口的一些场景有:AI 视觉计算, AI 人脸识别. 细化到一些小的领域,如现在直播技术,摄像头监控拉流;其他还有抖音中的美颜,滤镜,其背后是使用的音视频领域的数字化妆技术。由此可见,音视频技术应用已经应用于我们生活的方方面面。

二、开发背景

想写这篇文章的目的是因为,我有个朋友平时喜欢刷抖音,就经常有一些视频被作者设置成了不可下载保存,朋友下次想再看的话就找不到了。 还有朋友想下载暗恋的妹纸的作品。所以就把苦闷告诉我了,作为朋友当然有义务帮助他走出困境啦,终于,Two thousand years later 的今天,这个小工具终于问世,因为时间原因,来不及写前端页面了,后面有需要的同学可以关注或者私信我,我们一起学习,另外,写本文的目的纯粹是以学习为主,如不小心被不法分子滥用以盈利为目的,与本人无关,请广大道友积极爱护学习环境,记得不要连累我。

三、核心思想

其实核心步骤就两步

1、根据抖音上复制的分享链接获取到抖音的真实地址,需要使用网络编程技术解析到视频的真实地址。

2、然后使用 ffmpeg 解码网络视频流,保存到本地。

四、主要技术点

1、主要使用 Java 与 一些网络调用的知识,例如 Restemplate 的使用,Restemplate 是 spring web 中的一个模板方法类,这里主要用到了他的两个方法(headForHeaders, exchange),当然也可以用其他的工具类或者自己去实现网络远程调用。

2、JSON 解析使用 fastjson,版本号随意,一般都可以兼容。

3、StringUtils 是使用 commons.lang3 包下面中的工具类,不要导错包啦。

4、ffmpeg 拉流使用的第三方依赖是 javacv,版本 1.4.3 版本。如需具体引用依赖,关注或者私信我。

5、如果你对于 ffmpeg 基本概念,音视频基本概念,如视频帧, 音频帧,码率等基本知识不是非常清楚,这里我只说技术的应用,关于原理的讲解,不做过多赘述,网上一搜一大堆,有兴趣可以自己去了解以下。

6、使用 javacv 中的 FFmpegFrameGrabber 帧抓取器来获取音/视频帧,用这个抓取器,可以省略原生的 API 调用的一堆复杂操作,例如打开视频流,查找解码器,判断音频帧和视频帧。

来自网上的一段介绍/概括

FFmpegFrameGrabber 用于采集/抓取视频图像和音频采样。封装了检索流信息,自动猜测视频解码格式,音视频解码等具体 API,并把解码完的像素数据(可配置像素格式)或音频数据保存到 Frame 中返回等功能。

7、还可以使用 ffmpeg 命令行的方式进行下载。命令如下:

ffmpeg -i https://xxx.mp4 -c copy -f flv 艾北.flv

但是这种方式需要部署机安装 ffmpeg,所以暂时不考虑这种方式了。

8、使用 javacv 中的 FrameRecorder 录制器来把已经解码的图像像素编码成对应的编码和格式推流出去,这里保存到本地就是推流到本地文件。

以下是音视频大佬 eguid 对于 FrameRecorder 的介绍概括

FrameRecorder 用于音视频/图片的封装、编码、推流和录制保存等操作。把从 FrameGrabber 或者 FrameFilter 获取的 Frame 中的数据取出并进行编码、封装、推流发送等操作流程。为了方便理解和阅读,下文开始我们统一把 FrameRecorder 简称为:录制器。

五、详细思路

1、链接解析 &接口解析

(1)、Java 正则表达式从字符串中提取出 url。

(2)、使用 RestTemplate.headForHeaders() 方法获取某个资源的 URI 的请求头信息,并且只专注于获取 HTTP 请求头信息。

(3)、第一步中提取出的 url 在浏览器中模拟可以发现, 会重定向到一个新的地址,从请求头中获取重定向后的地址, 即从 header 中获取 location,然后从 location 中获取视频的真实 id。

(4)、根据视频真实 id 和抖音的接口去获取视频信息,如播放信息,作者信息,背景音乐信息等等,使用 json 一层一层解析出来播放地址的 url。

2、ffmpeg 拉流并保存

(1)、使用 ffmpeg 获取 url 视频帧的第一帧,检测视频是否是空视频。

(2)、创建视频流录制器,设置视频参数,分辨率,格式,输出位置。

(3)、循环获取视频帧,使用录制器 recorder 逐帧录制视频帧。

六、核心代码

1、使用正则提取 url
    /*** 正则表达式提取 url* @param text* @return*/public static String pickURI(String text) {// eg: text = "5.1 GV:/ 一出场就给人一种江南的感觉%刘亦菲 %精彩片段 %歌曲红马  https://v.douyin.com/e614JkV/ 腹制佌lian接,打开Dou音搜索,直接观kan视頻!";Pattern pattern = Pattern.compile("https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]");Matcher matcher = pattern.matcher(text);if (matcher.find()) {return matcher.group();}return "";}
2、发起网络调用,解析 json 获取真实地址
    public final static String DOU_YIN_WEB_API = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=";/*** 根据赋值的分享码下载抖音视频* @param text* @throws FrameGrabber.Exception* @throws FrameRecorder.Exception*/public static String douYin(String text) throws FrameGrabber.Exception, FrameRecorder.Exception {//String url = pickURI(text);RestTemplate client = new RestTemplate();//HttpHeaders headers = client.headForHeaders(url);String location = headers.getLocation().toString();String vid = StringUtils.substringBetween(location, "/video/", "/?");RestTemplate restTemplate = new RestTemplate();HttpHeaders queryHeaders = new HttpHeaders();queryHeaders.set(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36");HttpEntity<String> entity = new HttpEntity<>(queryHeaders);ResponseEntity<JSONObject> response = restTemplate.exchange(DOU_YIN_WEB_API + vid, HttpMethod.GET, entity, JSONObject.class);if(response.getStatusCodeValue() != 200) {return "";}JSONObject body = response.getBody();assert body != null;List<JSONObject> list = JSONArray.parseObject(body.getJSONArray("item_list").toJSONString(), new TypeReference<List<JSONObject>>(){});if(list.size() == 0) {return "";}JSONObject item = list.get(0);JSONObject video = item.getJSONObject("video");JSONObject playAddr = video.getJSONObject("play_addr");JSONArray urlList = playAddr.getJSONArray("url_list");List<String> urlListArr = JSONArray.parseObject(urlList.toJSONString(), new TypeReference<List<String>>(){});if(urlListArr.size() == 0) {return "";}return urlListArr.get(0);// VideoConvert.record(finalAddr, "/home/yinyue/upload/红马.flv");}
3、ffmpeg 拉流并保存
    /*** 转存视频流* @param input* @param outFile* @throws FrameGrabber.Exception* @throws FrameRecorder.Exception*/public static void record(String input, String outFile) throws FrameGrabber.Exception, FrameRecorder.Exception {FrameGrabber grabber = new FFmpegFrameGrabber(input);grabber.start();OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage();Frame frame = grabber.grab();opencv_core.IplImage image = null;if(frame == null) {System.out.println("第一帧为空,请检查视频源");return;}image = converter.convert(frame);FrameRecorder recorder = FrameRecorder.createDefault(outFile, frame.imageWidth, frame.imageHeight);recorder.setVideoCodec(AV_CODEC_ID_H264);recorder.setFormat("flv");recorder.setFrameRate(25);recorder.setGopSize(25);recorder.start();Frame saveFrame;while((frame = grabber.grab()) != null) {saveFrame = converter.convert(image);// 获取类型, 视频或者音频// EnumSet<Frame.Type> videoOrAudio = saveFrame.getTypes();// 录制视频recorder.record(saveFrame);}recorder.close();}

七、运行截图

img

img

运行完成后本地成功生成了下载的视频文件

img

八、作者心得

我们生在一个技术百花齐放,日新月异的年代,生于这个时代即是幸运也是悲哀,在如此浩瀚无穷无尽的知识更迭浪潮中,很难保证全能,尽善尽美;有的人专注于算法,有的人专注与数据处理,还有的人动手能力不行,但是理论能力极强,比如著名物理学家杨振宁,有的人专注于如何应用落地,致力于将技术应用于社会生活,所以,如果本文对你有用,请不吝赞赏,如果你感觉内容过于浅薄或者是令你感到不适,也请缄默不言,互相留一份体面。


http://chatgpt.dhexx.cn/article/Z3dej8V5.shtml

相关文章

java抖音字符视频_代码生成抖音文字视频

天天刷抖音,发现一些 好玩的 快闪文字视频, 自己尝试着做了几个,用了很多 的 工具做了一下,发下需要收费, 于是,用Python整了个 工具来合成 文字视频,效果如下:PFinal社区,快闪文字视频https://www.zhihu.com/video/1127196631308853248 目录结构如下: 工作流程如下: data.txt …

抖音上传视频显示转成mp4怎么设置_如何剪辑抖音短视频?视频剪辑软件推荐及操作流程(一)...

随着抖音的爆火,大家都想在这个风口分一杯羹,但是呢,很多人都跟小编一样,既不喜欢露脸也没有能秀的才艺,所以才一直迟迟没有行动。 不过我在刷抖音的时候,也发现同样没有露脸没有才艺的人能上热门爆红,因为他们在视频拍摄和剪辑上很出色。 私下也有很多同学发来一段视频…

【Python 字符视频】Python 实现将抖音视频转换成字符视频

以前就在抖音上看到过字符视频&#xff0c;直到昨天才突然想自己动手做一个&#xff0c;然后就利用各种博客&#xff0c;自己总结 兼 借鉴&#xff0c;终于完成了字符视频的制作 一、思路&#xff1a; 众所周知&#xff0c;视频是一帧一帧的图片组成的&#xff0c;所以我想的就…

抖音个人主页背景放视频?详解来了

大家都知道抖音个人主页可以设置图片的&#xff0c;那么如何设置成视频形式的呢&#xff1f;一起来看下吧 抖音背景视频设置门槛 抖音品牌号才能设置&#xff0c;普通抖音账户无法设置。 品牌号 品牌号必须是抖音年框客户或是一年品牌消耗100万以上&#xff0c;抖音才会赠送…

html怎么做成锁屏壁纸,抖音怎么把视频做成壁纸 抖音短视频怎么弄成锁屏壁纸-站长资讯中心...

抖音怎么把视频做成壁纸&#xff1f;最近&#xff0c;很多小伙伴都喜欢将抖音的短视频设置成动态壁纸&#xff0c;不过还有些小伙伴们不知道要怎么设置&#xff0c;那么快随小编一起来看看下面的教程吧1 抖音怎么把视频做成壁纸&#xff1f; 1、打开软件后随便刷视频&#xff0…

怎么把抖音的视频转成gif格式?视频转gif的具体方法

当我们遇到有趣的视频想做成表情包时&#xff0c;都会在想这些图片是怎么制作的呢?相信有很多小伙伴都有同样的疑问&#xff0c;有哪些视频转gif工具可以把视频改成gif图片呢?GIF中文网的在线视频转gif功能用起来既简单又方便&#xff0c;支持手机、电脑两种操作模式&#xf…

怎么让抖音视频当做铃声android,把抖音短视频做成手机铃声,原来这么简单!...

原标题&#xff1a;把抖音短视频做成手机铃声&#xff0c;原来这么简单&#xff01; “一日不抖&#xff0c;如隔三秋” 相信十个人里面 有九个都中了抖音的毒 刷起来完全控制不住自己 最近大火的抖音短视频炒火了不少民谣音乐人及一些翻唱歌曲的素人&#xff0c;不知道大家有没…

如何把照片做成视频?抖音爆款的图片视频切换教程,快速上手!

现在都流行用照片随手记录生活。而把照片做成视频&#xff0c;又是现在刷爆抖音、朋友圈的形式。不仅有酷炫的图片切换效果&#xff0c;还带有动听的背景音乐&#xff0c;这样精美又吸睛的照片视频&#xff0c;肯定能让你获得超多赞。今天就教大家用数码大师快速把照片做成视频…

抖音怎么把照片做成视频?超火的照片切换教程,3分钟就能搞定

抖音怎么把照片做成视频?怎么上传照片视频到抖音?抖音上很吸赞的照片切换效果怎么做? 今天教大家3分钟做出一个抖音上比较热门的照片视频,用到的工具是数码大师。 第一步:把照片一次性添加进来 打开数码大师后,选择“视频相册”,点击“添加相片”导入照片。点击“修改…

Adobe Flash cs4 下载安装

Adobe Flash cs4 下载安装 Adobe Flash cs4 下载Adobe Flash cs4 安装Flash Cs4安装之后打不开&#xff08;启动界面一闪而过&#xff09; Adobe Flash cs4 下载 Adobe Flash cs4 下载地址(百度网盘): https://pan.baidu.com/s/1KXTvIlQoa4cDGG16FdP-Vg Adobe Flash cs4 下载…

pdf数据查找网站

PDF Drive - Search and download PDF files for free.https://www.pdfdrive.com/ Library Genesis Proxy Mirror Links: Libgen Io, Libgen rs, Libgen nl, Libgen ishttps://libgen.onl/library-genesis/ Zlibrary、sci-hub、文献、书籍 | 药研导航 (drugx.cn)https://drug…

网站收录查询,常用的2种网站收录查询方法

在网站优化过程中&#xff0c;SEO人员通常都会非常关心网站的收录、索引情况&#xff0c;因为网站建立索引之后&#xff0c;才具有排名的条件。如何查询网站收录情况&#xff1f;今天我们聊聊常用的2种网站收录查询方法。第一种方法&#xff1a;通过site指令在搜索框查询 众多S…

r语言 网站数据查找

工作需要爬一个网站的数据&#xff0c;可是找的真的好累&#xff0c;不想重复劳作了&#xff0c;想起来原来学过的r语言有网站数据查找&#xff0c;就试一试。 library(XML) url<-"https://www.izaiwen.cn/" tbls<-readHTMLTable(url) sapply(tbls,nrow) libr…

如何通过数据进行网站分析

网站的监测指标有很多&#xff0c;一般的统计产品都包括大约20—30个指标。这些指标可以分成五个类别:用户规模、用户粘性、用户来源、网站受众属性、网站内容属性&#xff1b; 用户规模主要是通过PV、UV和独立IP三个指标衡量&#xff1b; 用户粘性主要通过回访率、访问频率和…

我常用的15个数据源网站!

现在有很多免费的数据可以供使用分析&#xff0c;不过很少有人能找的到&#xff0c;或者没能力找&#xff0c;这就是所谓的信息差吧。其实数据获取分为两方面&#xff0c;一是“拿来的”数据&#xff0c;也就是现成的&#xff1b;二是“爬来的”数据&#xff0c;这种一般通过爬…

如何分析网站数据

随着互联网的不断壮大&#xff0c;网站推广早已经成为很多企业首选的推广手段&#xff0c;想要做好网站推广&#xff0c;必须要经常对网站进行数据分析&#xff0c;只有了解了网站的各项数据之后&#xff0c;才能清楚的了解到网站推广优秀与否。那么&#xff0c;如何分析网站数…

找数据?这几个数据源网站就够用了?

来源&#xff1a;经管学苑 转自&#xff1a;经管学苑 大家好&#xff0c;我是小z 在这个用数据说话的时代&#xff0c;能够打动人的往往是用数据说话的理性分析&#xff0c;无论是对于混迹职场的小年轻&#xff0c;还是需要数据进行分析和研究的同学&#xff0c;能够找到合适的…

4个查询网站收录的方式,你中意哪个查询方式呢?

查询网站是否被收录的方式有几个&#xff1f; 4个&#xff1a;site命令、第三方工具、百度站长平台查询、利用接口批量查询。 接下来我们就来介绍这4个查询网站收录的方式&#xff1a; 第一个&#xff1a;site命令 在搜索引擎的搜索框输入:site网址就可以看到改…

要分析数据,可以先去这些数据网站找数据

作者&#xff1a;帆软 来源&#xff1a;知乎 金融财经数据 同花顺数据中心&#xff1a;提供股票债券等金融数据和讯数据&#xff1a;提供各种股票、基金、外汇、债券等实时数据&#xff0c;有付费&#xff0c;有免费零壹财经&#xff1a;大大小小的网贷数据、排行榜等金融数据网…

数据资源丨原始数据哪里找?这些网站要用好!(建议收藏)

资料搜集是个相当繁琐与累的工作&#xff0c;也是投资入门的基本&#xff0c;良好的信息资料搜集能力有利于我们快速了解投资主体的基本情况&#xff0c;为后续的调研及一手资料的获得打下较好的基础。 目录 一、搜索引擎&#xff08;重点掌握&#xff09; 1、搜索关键字的选…