五分钟JAVA代码教会你:FFmpeg实现视频试看(window版本)
五分钟JAVA代码教会你:FFmpeg实现视频试看
- 1. 业务场景
- 2. 实现思路
- 3.FFmpeg开源框架介绍
- 4. windows环境实现
- 4.1 windows安装FFmpeg
- 4.1.1 下载并解压
- 4.1.2 配置环境变量
- 4.1.3 测试配置成功
- 4.2 Java调用ffmpeg实现视频截取
- 4.2.1 命令行视频截取
- 4.2.2 截取成功
- 4.3 Java调用FFmpeg实现
- 4.3.1 代码Demo
- 4.3.2 处理cmd权限
- 4.3.3 效果展示
- 4.3 整合到项目中效果
- 5. 技术点分析
1. 业务场景
随着知识付费时代的到来,现在在线学习平台如雨后春笋般到来,各种大大小小的公司都在开发在线学习平台,因此会产生如下需求:课程视频试看功能。
Linux版本请点击这里:
五分钟代码教会你:JAVA实现视频试看功能(Centos7版本)
PS:(本博客使用到的代码,ffmpeg安装包,cmd命令行工具都会打包放在↓↓↓↓↓下面附件中,供大家下载参考。)
点击下载FFmpegDemo
2. 实现思路
当平台用户上传自己的课程后,服务器对该课程视频进行截取一小段进行存储(例如截取开头30秒视频内容作为试看内容)。因此,用户上传视频后,经过服务器的处理产生了2个视频(1.原视频 2.试看视频)。普通用户访问该视频则播放试看视频,付费用户访问该视频则播放原视频。
3.FFmpeg开源框架介绍
此处使用Java调用FFmpeg处理视频音频,通过在系统中手动安装FFmpeg,然后执行命令进行调用的方式来进行实现。
FFmpeg官网:http://ffmpeg.org/
(FFmpeg自述:转换视频音频变得如此简单!)
4. windows环境实现
4.1 windows安装FFmpeg
4.1.1 下载并解压
下载FFmpeg安装包
https://ffmpeg.zeranoe.com/builds/
下载成功后解压,如下图:
把解压后的文件夹改名为ffmpeg,如下图:
4.1.2 配置环境变量
右键"计算机"——“属性”,如下图:
点击“环境变量”按钮后,弹出“环境变量”窗口,找到并选中“Path”变量,点击编辑,如下图:
在PATH变量追加内容";F:\ffmpegDemo\ffmpeg\bin",点击确定即可。
4.1.3 测试配置成功
打开cmd,输入"ffmpeg"命令,如果有输出,则说明配置成功:
4.2 Java调用ffmpeg实现视频截取
4.2.1 命令行视频截取
windows下目标目录存放视频文件:
针对上图mp4视频,截取一个30秒的试看文件并命名为 test-sk.mp4:
ffmpeg -ss 0:0:0 -t 0:0:30 -i F:\ffmpegDemo\test.mp4 -vcodec copy -acodec copy F:\ffmpegDemo\test-sk.mp4
如下图,执行即可:
4.2.2 截取成功
4.3 Java调用FFmpeg实现
4.3.1 代码Demo
上面我已经测试了,在cmd中直接执行ffmpeg命令,可以对视频进行截取操作。因此,只需要通过java代码调用命令行的方式,在cmd中进行执行。代码如下:
/*** @Author : zhangS* @Date :2020-08-19*/
public class ExecWindowCMD {public static void main(String[] args) {File viedoFile = new File("F://ffmpegDemo//test.mp4");File outFile = new File("F://ffmpegDemo//test3.mp4");//根据目标视频viedoFile,生成截取30秒后的试看视频outFileExecWindowCMD.cutVideo1(viedoFile,outFile,30);}/*** @param videoFile 原视频* @param outputFile 截取后视频* @param timeLength 截取时间长度,单位秒*/public static void cutVideo1(File videoFile, File outputFile, int timeLength) {String cmdStr = "F:\\ffmpegDemo\\ffmpeg\\bin\\ffmpeg.exe -ss 0:0:0 -t" + " 0:0:" + timeLength + " -i " + videoFile + " -vcodec copy -acodec copy " + outputFile;Runtime run = Runtime.getRuntime();try {Process process = run.exec("c:/nircmd.exe elevate " + cmdStr);InputStream in = process.getInputStream();in.close();process.waitFor();} catch (Exception e) {e.printStackTrace();}System.out.println("----截取视频成功----");}
}
4.3.2 处理cmd权限
通过java直接执行cmd的命令行口令,可能会出现权限不足而导致执行失败。因此,下载一个window命令行工具nircmd即可。
window命令行工具官网:http://www.nirsoft.net/utils/nircmd.html
下载后,把nircmd.exe放到c盘下,以上面代码为例,如下图:
4.3.3 效果展示
4.3 整合到项目中效果
在后台上传视频,通过FFmpeg截取成2份,然后在页面判断用户是看试看部分还是看完整视频进行展示。
下图用户看试看内容:
下图用户看完整视频内容:
5. 技术点分析
本博客主要针对视频试看功能进行dem编写,我也会提供Centos7下的视频截取操作,方便其他开发者遇到视频试看的开发场景时,可以用来参考的一种解决方案。
FFmpeg框架还有许多其他的流媒体处理功能,此处重点介绍对视频的截取方式的实现。本博客采用在系统中手动安装FFmpeg,然后Java直接执行命令行的方式进行实现。
五分钟JAVA代码教会你:FFmpeg实现视频试看(window版本)相关推荐
- 五分钟JAVA代码教会你:FFmpeg实现视频试看(Centos7版本)
五分钟JAVA代码教会你:FFmpeg实现视频试看 1. 业务场景 2. 实现思路 3. FFmpeg开源框架介绍 4. Centos7环境实现 4.1 官网下载并上传Linux 4.2 解压安装 4 ...
- phantomjs的使用+Java代码+依赖js(兼容Linux和windows版本)
1. 在使用phantomjs的时候需要下载phantomjs,网上有window版本和Linux版本.将phantomjs放在Linux上的指定位置之后(如下面的/home/tpl/phantom ...
- java调用ffmepg_java调用ffmpeg施行视频转换
java调用ffmpeg执行视频转换 用java小例题说明更直观:(可以直接编译运行) 环境我在windows平台下测试的... 需要在e:\下有ffmpeg.exe;mencoder.exe;drv ...
- Java代码获取网络和本地视频时长等信息
目标 最近项目中需要对上传的本地视频和从其他服务器拷贝的视频进行校验功能,校验主要包括视频的时长,大小,格式等信息,那么如何获取这些信息呢? 思路 本地视频,从过文件流读取,再通过FFMpeg.exe ...
- 五分钟学Java:为什么不应该使用Java的原始类型?
在逛 Stack Overflow 的时候,发现了一些访问量像熊耳山一样高的问题,比如说这个:为什么不应该使用Java的原始类型?访问量足足有 205K+,这不得了啊!说明有很多很多的程序员被这个问题 ...
- 【机器学习】K近邻算法(K-NearestNeighbors , KNN)详解 + Java代码实现
文章目录 一.KNN 基本介绍 二.KNN 核心思想 三.KNN 算法流程 四.KNN 优缺点 五.Java 代码实现 KNN 六.KNN 改进策略 一.KNN 基本介绍 邻近算法,或者说K最邻近(K ...
- javaweb 图书管理系统完整代码_看一名Java开发人员以红队思维五分钟审计一套代码(续)...
前言 上篇文章的发布引起了很多读者的浏览,有很多读者也催更希望读到续集,作者也收获到读者的鼓励,说明这条路线对大家有帮助,是有意义的.所以,今天作者将继续阐述在审计Java代码时的思路. 概述 上篇文 ...
- Java菜鸟起飞日记-每天五分钟(Hello World)
Today,沈叔的Java菜鸟起飞日记-每天五分钟就正式开博了 其实本来是没有打算写这样一个东西的,不过就近来发现自己的学习状态存在很大的问题,很多东西都开始遗忘,于是乎,为了证明自己学过,还是用这样 ...
- 如何用java代码调用ffmpeg进行视频转码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lushizhuo9655/articl ...
最新文章
- 方阵旋转180度JAVA代码_方阵顺时针旋转的实现代码
- 一觉醒来2T硬盘数据化为乌有,背后或是两名黑客在竞争式入侵
- 关于comparable与comparator的用法(即自定义集合框架用法 )
- python PyQt5 QLCDNumber类(用于显示数字或一些符号的容器)
- c语言怎样输出有颜色的迷宫,c语言写的迷宫问题
- python权重初始值设置_pytorch自定义初始化权重的方法
- java肯尼亚_对肯尼亚这个国家,你有什么好奇的?对它的第一印象是什么?
- python爬虫网络库下载_Python3 DHT 网络磁力种子爬虫
- 基于单片机的功放protues_音响放大器proteus仿真
- TwinCAT3 EL6070-1648授权模块使用
- UiPath-定时任务原理
- 不要想当然,相信自己(自己在C中踩过的坑)
- 题目---小Q定义了一种数列称为翻转数列: 给定整数n和m, 满足n能被2m整除。对于一串连续递增整数数列1, 2, 3, 4..., 每隔m个符号翻转一次, 最初符号为'-';。
- 什么oracle,什么是ORACLE?
- 华为手机怎么使用读卡器_手机nfc功能怎么打开(华为手机nfc功能使用步骤)
- 北京科技大学 工科物理实验 大二上
- 一周市场摘抄20210208
- Winrm后门在实战中的巧妙应用
- 「镁客·请讲」太平洋未来科技李建亿:深耕AR技术,布局垂直领域
- 防火墙用户管理和入侵防御简介