FFMpeg的下载地址
https://download.csdn.net/download/qq_41840735/15647707

import java.io.*;
import java.util.ArrayList;
import java.util.List;public class FFMpegUtil {public static void main(String[] args) {FFMpegUtil ffmpeg = new FFMpegUtil();try {ffmpeg.convertor("F:\\示例\\视频\\11.mp4", "F:\\示例\\视频\\videoOutputPath1\\test2.m3u8");} catch (Exception e) {e.printStackTrace();}}//ffmpeg.exe的安装路径呀private String ffmpegEXE = "C:\\Program Files\\ffmpeg\\bin\\ffmpeg.exe";public FFMpegUtil() {super();}/*** mp4视频转m3u8* @param videoInputPath* @param videoOutputPath* @return* @throws Exception*/public Boolean convertor(String videoInputPath, String videoOutputPath) throws Exception {List<String> command = new ArrayList<>();command.add(ffmpegEXE);command.add("-i");command.add(videoInputPath);//强制ts切割command.add("-force_key_frames");command.add("\"expr:gte(t,n_forced*1)\"");command.add("-profile:v");command.add("baseline");command.add("-level");//command.add("3.0");command.add("-s");//分辨率command.add("640x360");command.add("-start_number");command.add("0");//ts的每段片长command.add("-hls_time");command.add("2");command.add("-hls_list_size");command.add("0");command.add("-f");command.add("hls");command.add(videoOutputPath);System.out.println("这是command:"+command);for (String c : command) {}InputStream errorStream = null;InputStreamReader inputStreamReader = null;BufferedReader br = null;Boolean result = false;try {ProcessBuilder builder = new ProcessBuilder(command);Process process = builder.start();errorStream = process.getErrorStream();inputStreamReader = new InputStreamReader(errorStream);br = new BufferedReader(inputStreamReader);String line = "";while ( (line = br.readLine()) != null ) {}if (br != null) {br.close();}if (inputStreamReader != null) {inputStreamReader.close();}if (errorStream != null) {errorStream.close();}result = true;}catch (Exception e){e.printStackTrace();result = false;}finally {if (br != null) {br.close();}if (inputStreamReader != null) {inputStreamReader.close();}if (errorStream != null) {errorStream.close();}return result;}}/*** 视频截图功能* @param sourceVideoPath 需要被截图的视频路径(包含文件名和后缀名)* @param targetParth 图片存储路径* @return*/public boolean processImg(String sourceVideoPath, String targetParth) {//先确保保存截图的文件夹存在File TempFile = new File(targetParth);if (TempFile.exists()) {if (TempFile.isDirectory()) {System.out.println("该文件夹存在。");}else {System.out.println("同名的文件存在,不能创建文件夹。");}}else {System.out.println("文件夹不存在,创建该文件夹。");TempFile.mkdir();}File fi = new File(sourceVideoPath);String filename = fi.getName();          //获取视频文件的名称。String filerealname = filename.substring(0, filename.lastIndexOf("."));  //获取视频名+不加后缀名 后面加.toLowerCase()转为小写List<String> commend = new ArrayList<String>();//第一帧: 00:00:01//截图命令:time ffmpeg -ss 00:00:01 -i test1.flv -f image2 -y test1.jpgcommend.add(ffmpegEXE);         //指定ffmpeg工具的路径commend.add("-ss");commend.add("00:00:01");          //1是代表第1秒的时候截图commend.add("-i");commend.add(sourceVideoPath);     //截图的视频路径commend.add("-f");commend.add("image2");commend.add("-y");commend.add(targetParth + filerealname + ".jpg");      //生成截图xxx.jpg//打印截图命令--zoutaoStringBuffer test = new StringBuffer();for (int i = 0; i < commend.size(); i++) {test.append(commend.get(i) + " ");}System.out.println("截图命令:"+test);try {/*ProcessBuilder builder = new ProcessBuilder();builder.command(commend);Process p =builder.start();*///调用线程处理命令ProcessBuilder builder = new ProcessBuilder();builder.command(commend);Process p = builder.start();//获取进程的标准输入流final InputStream is1 = p.getInputStream();//获取进程的错误流final InputStream is2 = p.getErrorStream();//启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流new Thread() {public void run() {BufferedReader br = new BufferedReader(new InputStreamReader(is1));try {String lineB = null;while ((lineB = br.readLine()) != null) {if (lineB != null){//System.out.println(lineB);    //必须取走线程信息避免堵塞}}} catch (IOException e) {e.printStackTrace();}//关闭流finally{try {is1.close();} catch (IOException e) {e.printStackTrace();}}}}.start();new Thread() {public void run() {BufferedReader br2 = new BufferedReader(new InputStreamReader(is2));try {String lineC = null;while ((lineC = br2.readLine()) != null) {if (lineC != null)   {//System.out.println(lineC);   //必须取走线程信息避免堵塞}}} catch (IOException e) {e.printStackTrace();}//关闭流finally{try {is2.close();} catch (IOException e) {e.printStackTrace();}}}}.start();// 等Mencoder进程转换结束,再调用ffmepg进程非常重要!!!p.waitFor();System.out.println("截图进程结束");return true;} catch (Exception e) {e.printStackTrace();return false;}}}

FFmpeg切割视频,自定义视频ts片段时长相关推荐

  1. php 获取视频首帧,PHP获取视频的第一帧与时长

    //获得视频文件的缩略图 function getVideoCover($file,$time,$name) { if(empty($time))$time = '1';//默认截取第一秒第一帧 $s ...

  2. 自媒体短视频中视频相关的问题总结,涉及视频类型、质量、时长和原创等方面

    自媒体短视频中视频相关的问题总结,涉及视频类型.质量.时长和原创等方面 大家好,我是我赢助手,专注于自媒体短视频去水印.去重和文案提取运营! 前几天跟大家分享了我最近在做的一个短视频账号,也就是刚刚开 ...

  3. 关于FFmpeg将m3u8合并成mp4之后时长不对的解决方法

    关于FFmpeg将m3u8合并成mp4之后时长不对的解决方法 解决方法 导致时长不对的合并方法 concat方法会导致合并的视频时长有问题 ffmpeg -y -f concat -i ./downl ...

  4. JavaScript获取B站分集视频标题及各集时长、累计时长

    之前在学习B站分集视频时,为做笔记曾需要频繁复制标题文字,同时也需要知道视频时长,于是用js把标题及时长在控制台输出然后复制存为文本文件. var box=document.getElementsBy ...

  5. M3U8文件格式说明及解决大量拼接ts文件时长不对问题

    M3U8 文件简介 m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist).但无论是哪种播放 ...

  6. C#中使用FFMPEG切割、合并视频。

    参考网址:https://blog.csdn.net/samwang_/article/details/70332924 使用前先确保电脑已经安装了FFMPEG,并且配置好环境变量.检测是否安装配置好 ...

  7. FFMPEG将视频切片成ts文件并对ts文件进行ASE加密,并合并成M3U8操作方法

    环境:centos7 开发语言:php 框架:视频转码服务系统 生成ASE加密文件需要用到的命令: #!/bin/sh BASE_URL=${1:-'.'} openssl rand 16 > ...

  8. 视频剪辑:如何减少片头片尾的时长。

    我们在制作视频时我,会遇到视频的片头片尾时长过长的问题,那么就需要我们去调整时长,我们应该如何操作呢?今天就由小编来教大家如何操作. 第一步,首先进入媒体梦工厂主页面,在主页面的8大板块中选择&quo ...

  9. Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等

    Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等 目录 Unity 基础 之 在 UGUI 上简单实现VideoPl ...

  10. js 获取上传图片和视频的宽高,还有视频的时长

    场景: 当产品经理告诉你说:我们需要限制上传的图片或视频的尺寸,不符合要求不允许上传,这个时候你该怎么做? 不用多想,很明显我们需要想办法拿到图片或视频的宽度,然后和预期的尺寸进行对比过滤,就能轻易实 ...

最新文章

  1. CentOS 5.6下创建KVM虚拟机
  2. linux常用命令及常用快捷键
  3. IIS -2147467259 (0x80004005)
  4. Ajax请求Session超时解决
  5. 欢迎光临CAX软件二次开发开源社区!
  6. 计算机结构原理初步教案板书设计,(计算机工作原理)教学设计(教案)
  7. 特权级概述(哥子就想知道CPU是如何验证特权级的)GATE+TSS
  8. 判断一个数字是否存在于某一个数据之中
  9. 我的第一个wp8小程序
  10. 现代偏微分方程第1章预备知识复习题
  11. Code First Migrations更新数据库结构的具体步骤
  12. 2018.11.07-1015-幸运字符串查询 (lucky)
  13. 微信模板消息跳转小程序
  14. magisk 启动 安全 app
  15. css学习06:id选择器
  16. 论文笔记 -- Fast-LIO -- ESIKF溯源
  17. putty小键盘输入_putty或xshell上用vi/vim小键盘无法使用的解决方法-阿里云开发者社区...
  18. yum安装iostat命令时,提示No package iostat available. 错误:无须任何处理
  19. java计算机毕业设计疫情物质管理系统源码+数据库+lw文档+系统+部署
  20. Java文件/文件夹 加密解密工具(Swing版)

热门文章

  1. 华为社招嵌入式软件面试_华为社招面试流程分享
  2. Python——循环遍历多个列表实现字符的组合拼接
  3. Google(谷歌)博客搜索中文测试版发布
  4. python报IndentationError: unexpected indent的解决方法.
  5. BI报表工具有哪些?
  6. java ico图片转png_Java图片处理:ico格式转 PNG/JPG等格式
  7. java 百亿计算器,百万换算成亿(百万换算成亿计算器)
  8. 中国的粮食储备,多的远超你想象,抢粮的人纯粹是傻冒
  9. html颜色(背景,字体等)
  10. 手动揪出电脑中毒导致的空间自动发广告的元凶