ffmpeg从某站提取视频、音频、详解

news2024/11/15 13:44:00

ffmpeg从某站提取视频、音频、详解

事件背景

准备链接

第一步安装下载

ffmpeg是开源软件,安装网址http://ffmpeg.org/download.html#build-windows
本人用的windows10系统
在这里插入图片描述
打开网址后随便你怎么下载都行,Git、或者直接下等等
在这里插入图片描述
按图片输入上述网址也一样

第二步解压安装

下载完成后,解压即可无需安装,但是需要配置path(像Java的JDK一样)
在这里插入图片描述
右键我的电脑,高级设置中找到环境变量,中修改path,添加程序文件的bin目录的环境变量
我将程序放在

D:\Program Files\ffmpeg\ffmpeg-2021-01-27

文件夹下那么,配置的path就是

D:\Program Files\ffmpeg\ffmpeg-2021-01-27\bin

在这里插入图片描述
配置好后打开cmd
输入ffmpeg -version
显示如下即安装完成
在这里插入图片描述

第三步从小破站下载音频视频

我用Chrome浏览器打开,F12进入某个模式如下图
在这里插入图片描述
我们“简单分析”一下NetWork很容易发现本视频的媒体文件是
134142927-1-30080与134142927-1-30280两个
一个是视频的图像文件,一个是视频的音源文件,全部都是m4s为后缀的文件
在这里插入图片描述
在这里插入图片描述
那我们点击我们要下载的图像和音源文件,复制它链接的前部分内容,复制到.m4s就行,然后输入到地址栏进行文件下载
by the way:
可以看到30280与30080结尾的文件很多,我们随便下哪个都行,都一样
在这里插入图片描述
在这里插入图片描述
可以看到,下载完成的文件应该是相对来讲一大一小两个文件,本视频时长3分钟多,一个在60+MB大小,一个在4.5MB大小
根据常理我们判断,较大的文件是图像文件,较小的文件是音源文件

第四步ffmpeg命令

下载好的视频尽量放在一个特定的文件夹,方便操作,不然还得输入绝对路径
我放在了D:/Temp下
在这里插入图片描述
在地址栏输入cmd打开命令

ffmpeg -i 30080.m4s -i 30280.m4s -codec copy video.mp4

将文件合并为视频文件,(将视频文件放在前,音源文件放在后)
在这里插入图片描述
在这里插入图片描述
完成后视频已经可以打开了
在这里插入图片描述
可以看到能够正常播放

继续输入命令

ffmpeg -i video.mp4 -vn  -acodec libmp3lame -ac 2 -qscale:a 4 -ar 48000  audio.mp3

将video.mp4的音源提取成audio.mp3
在这里插入图片描述
可以看到能够正常播放

20221231日补充

补充第三步,发现直接访问m4s的链接会被返回404,不能直接下载了;经过一系列的搜索终于找到了解决方案 就是通过写代码java的io流来实现

package com.testdownbili.demo1.bil;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;

public class DownloadM4sApplet {


    public static void main(String[] args){
        // 第三步的m4s地址
        String videoUrl="https://xy49x86x255x16xy.mcdn.bilivideo.cn:4483/upgcxcode/64/99/517569964/517569964_x2-1-30077.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90Wxxxxxx";
        // 文件名称 建议和链接保持一致
        String name="517569964_x2-1-30077.m4s";

        downloadMovie(videoUrl,name);
    }

    public static void downloadMovie(String BLUrl, String fileName) {
        InputStream inputStream = null;
        try {
            URL url = new URL(BLUrl);
            URLConnection urlConnection = url.openConnection();
            urlConnection.setRequestProperty("Referer", "https://www.bilibili.com/video/BV"); // 填需要爬取的bv号
            urlConnection.setRequestProperty("Sec-Fetch-Mode", "no-cors");
            urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36");
            urlConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            urlConnection.setConnectTimeout(10 * 1000);
            inputStream = urlConnection.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //定义路径
        String path = "D:\\Temp\\biliDown\\" + fileName;
        File file = new File(path);
        int i = 1;
        try {
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
            byte[] bys = new byte[1024];
            int len = 0;
            while ((len = bis.read(bys)) != -1) {
                bos.write(bys, 0, len);
            }
            bis.close();
            bos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

就下载成功了

下载成功后再执行上述步骤即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【攻防世界】Web very_easy_sql

做了web才发现,原来自己是真的什么都不懂啊,不过也好,说明我有很大的进步空间呢 不闲聊了,来看题目 打开是一个登录界面,我们抓包看看返回些什么 返回包有三个需要注意的地方,我都用框框圈起来了 有一个S…

【C++】map 与 set 的介绍与使用、力扣:692. 前K个高频单词

目录 一、关联式容器 二、键值对 三、set 3.1 set 的介绍 3.2 set 的使用 3.3. set 的使用举例 四、map 4.1 map的介绍 3.2 map 的使用 4.3 map的使用举例 五、经典练习题 1.set的使用 2.map的使用 思路一(稳定排序): 思路二(priority_queue)&#x…

jvm参数说明

-Xmx3550m:设置JVM最大堆内存为3550M。 -Xms3550m:设置JVM初始堆内存为3550M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xss128k:设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M,之…

新式 AIMD 拥塞控制

周三晚上发了一则朋友圈,今天整理一下: ​ AIMD 过程可推导出 TCP 吞吐公式: TaRTTbpT\dfrac{a}{RTT}\dfrac{b}{\sqrt{p}}TRTTa​p​b​ a,b 分别为与 AIMD 参数和过程有关,该公式结论内置公平性。设 MSS 1460&…

【MySQL】九,MySQL逻辑架构剖析

服务器处理客户端请求 Connectors 外部的各种类型的连接客户端。 第一层:连接层 客户端访问 MySQL 服务器前,首先要建立 TCP 连接。 经过三次握手成功建立连接后,MySQL对传输过来的账号密码做身份认证、权限获取。 如果用户名密码错误&am…

【Iava】抽象类和接口

祝早日驱散阴霾 文章目录1. 抽象类1.1 抽象类的概念1.2 抽象类的使用注意事项1.3 抽象类的作用2. 接口2.1 接口的定义2.2 接口的使用规则2.3 创建对象拷贝,实现Cloneable3. 抽象类和接口的区别1. 抽象类 1.1 抽象类的概念 抽象类,顾名思义,这是不是一个具体的类,没有实际的功…

四旋翼无人机学习第17节--封装上传github与gitee

0 前言 经过一段时间的绘制,终于绘制完项目所需的封装。为了更好的管理封装,我准备把封装与焊盘上传到github与gitee,方便之后的管理工作。 1 文件上传gitee 注册这里就不作介绍咯。 1、首先点击新建仓库。 2、设置仓库的名称与项目介绍&…

GO语言初始化数据结构的方法你知道吗?

xdm 我是阿兵云原生 使用 golang 进行编码过程中,你们都是如何初始化数据结构的呢 GO 里面提供了 2 个关键字来进行初始化数据结构 newmake 不过有时候我也会直接使用花括号的方式直接就初始化,例如这样: name : []string{"xiaomot…

电源PCB布局要点

本次已常用的集成电源IC芯片TPS 5430.讲解一下布局要求。 在手册中可以看到官方已给出的详细布局。 这是我们原理图设计的TPS 5430。 通过以上了解到了连接关系以及布局要求。那么我们再看看官方要求是如何硬性要求布局的。 总结: 1.输入电容要靠近Vin 管脚 2.电…

图像简单运算

图像运算是以图像为单位对图像进行数学操作,运算对象以像素点为基本单位,运算结果为一幅灰度分布与原图像不同的新图像。 算术运算与逻辑运算 算术运算与逻辑运算中每次只涉及一个空间像素的位置,所以可以”原地操作“(在&#xf…

【微服务笔记02】微服务组件之Eureka常见的几个配置属性及其常见的几个概念

这篇文章,主要介绍微服务组件中Eureka常见的几个配置属性及其常见的几个概念【源代码地址】。 目录 一、Eureka常见配置属性 1.1、instance配置项 1.2、client配置项 1.3、server配置项 二、eureka常见概念 2.1、服务注册 2.2、服务发现 2.3、服务续约 2.4…

CSS常见标签知识回顾

学前端的一点css笔记,参考的是黑马程序员pink老师的教程。 一.行内元素 1.一行可以显示多个 2.宽度核高度默认由内容撑开 3.不可以设置宽高 代表标签: a、span、b、ui、s、strong、ins、em、del 二、行内块元素 1.一行可以显示多个 2.可以设置宽高…

回顾2022年总结

文章目录前言这一年感悟感想成绩新的一年期许前言 2022过的好快,接着我对自己这一年的所做的事情来进行一个汇总和感悟感想总结! 所有博客文件目录索引:博客目录索引(持续更新) 这一年 月份做了什么事1转本备考、Java技术(netty一套课程、…

VisionMaster应用实例——识别锁付孔位

项目背景:相机对法兰盘表面进行拍照,获取法兰盘上16个孔位的位置,通过VisionMaster进行TCP通信,将位置信息发送给机械臂,对这16孔位的螺丝进行拧紧,同时需要根据十字锁付的特点。 思路分析: 1.方…

[oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)

牛说(cowsay) 回忆上次内容 上次我们研究了shell脚本的编程 并且在shell中实现了 循环语句延迟命令清屏命令python命令figlet命令还能整点什么呢?🤔还想要让小动物报时 cowsay 首先要安装 cowsay sudo apt install cowsay 装完之后 cow 就可以 say 了…

人工智能-逻辑回归

1,逻辑回归介绍 逻辑回归:分类模型 应用场景:广告点击率、是否垃圾邮件 逻辑回归主要用于解决二分类问题 输入: 逻辑回归的输入:线性回归的结果 激活函数:sigmoid函数 回归的结果输入到sigmoid函数中 输…

UE5笔记【十四】漂流者游戏制作【一】地形材质准备

针对游戏的剧情设计:角色流落荒岛,寻找食物和水,等待救援。只有按时找到才能存活。否则游戏失败了。 新建一个第三人称游戏。可以将项目名称命名为《CastAway》 启动Landmass插件 然后启用Water插件。 然后删除场景中不需要的东西。保留荒岛…

DoIP协议从入门到精通——诊断通信

DoIP(Diagnostic on IP)是基于IP(车载通信总线介质)为实现诊断诊断通信搭建通信桥梁的过程。从车辆连接-车辆声明-激活通信,都在前面几篇文章有过分享: 在专栏中可以找到文章! 如下述将DoIP协议内容映射到计算机OSI七层通信模型中,其作用就是将物理层接收到的收据,准…

(十) Docker微服务实战

Docker微服务实战一、IDEA新建一个普通微服务模块二、通过dockerfile发布微服务部署到docker容器2.1、打包模块2.2、编写 Dockerfile以及上传jar包2.3、构建镜像2.4、运行容器一、IDEA新建一个普通微服务模块 建Module docker_boot Pom文件 <?xml version"1.0" e…

2022年技术自媒体经验分享 —— 开始尝试认真做 B站 的一年后的复盘

文章目录前言一、回顾过去1、进驻B站2、进驻知识星球3、做全网最强的算法星球4、付费是道砍二、星球简介1、星主介绍2、星球简介三、星球内容1、九日集训2、付费专栏 - 免费阅读3、每月算法集训4、每日作业5、个人规划6、更优质的朋友圈7、向我提问 - 深思熟虑你的问题8、持续创…