使用ffmpeg实现音视频文件格式转换

当前支持,后续继续补充

  •   1、支持音频文件转mp3;
  •    2、支持视频文件转mp4;
  •    3、支持视频提取音频;

1、转换类


import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.TimeUnit;/***** @author xuancg* 要求系统内置ffmpeg工具环境* @date 2024/9/23*/
@Slf4j
public class FfmpegUtil {private static final String CONVERT_MP3 = "ffmpeg -i %s %s";private static final String CONVERT_MP4 = "ffmpeg -i %s -c:v libx264 -c:a copy %s";private static final String EXTRACT_MP3 = "ffmpeg -i %s -q:a 0 -map a %s";private static final Set<String> MP3_TYPE = new HashSet<>(Arrays.asList("mp3", "wav", "aac", "flac"));private static final Set<String> MP4_TYPE = new HashSet<>(Arrays.asList("mp4", "avi", "flv", "mpeg", "wmv"));/**** 音视频文件格式化* 1、支持音频文件转mp3;* 2、支持视频文件转mp4;* 3、支持视频提取音频;*/public static boolean convertMedia(MediaConvertBo convertBo) {File src = convertBo.getSrc();File dest = convertBo.getDest();if (null == src || !src.isFile()) {log.error("原始文件不存在");return false;}if (null != dest && dest.isFile()) {log.info("目标文件已存在");}long start = System.currentTimeMillis();Process process = null;BufferedReader reader = null;try {String cmd = createCmd(convertBo);if(null == cmd){return false;}log.info("ffmpeg执行命令=" + cmd);// 执行命令process = Runtime.getRuntime().exec(cmd);// 获取命令输出结果reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));String line;while ((line = reader.readLine()) != null) {log.debug(line);}// 明确自己的命令需要执行多长时间,否则可以一直等待int timeout = convertBo.getTimeout();if (timeout <= 0) {process.waitFor();} else {process.waitFor(timeout, TimeUnit.SECONDS);}return dest.isFile() && dest.length() > 10;} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {log.error("剪裁视频超时source=" + src.getAbsolutePath());} finally {if (null != process) {process.destroy();}if (null != reader) {try {reader.close();} catch (IOException e) {log.error("关闭流失败" + e.getMessage());}}log.info("耗时ms=" + (System.currentTimeMillis() - start));}return false;}public static boolean isMp4File(File file){String name = file.getName();String suffix = name.substring(name.lastIndexOf(".") + 1);return MP4_TYPE.contains(suffix);}public static boolean isMp3File(File file){String name = file.getName();String suffix = name.substring(name.lastIndexOf(".") + 1);return MP3_TYPE.contains(suffix);}private static final String createCmd(MediaConvertBo bo) {File src = bo.getSrc();if (bo.isConvertMp3()) {if(!isMp3File(src)){log.error("错误的mp3格式");return null;}return String.format(CONVERT_MP3, src.getAbsolutePath().replace("\\", "/"), bo.getDest().getAbsolutePath().replace("\\", "/"));} else if (bo.isConvertMp4()) {if(!isMp4File(src)){log.error("错误的mp4格式");return null;}return String.format(CONVERT_MP4, src.getAbsolutePath().replace("\\", "/"), bo.getDest().getAbsolutePath().replace("\\", "/"));} else if(bo.getType() == MediaConvertBo.Type.EXTRACT_MP3){if(!isMp4File(src)){log.error("错误的mp4格式");return null;}return String.format(EXTRACT_MP3, src.getAbsolutePath().replace("\\", "/"), bo.getDest().getAbsolutePath().replace("\\", "/"));}log.error("错误的type");return null;}}

2、请求对象

import lombok.Data;import java.io.File;/***** @author xuancg* @date 2024/9/23*/
@Data
public class MediaConvertBo {private File src;private File dest;/**0表示持续等待,单位秒*/private int timeout = 0;private Type type;public boolean isConvertMp3(){return null != type && type == Type.CONVERT_MP3;}public boolean isConvertMp4(){return null != type && type == Type.CONVERT_MP4;}public enum Type {/***/CONVERT_MP4,CONVERT_MP3,EXTRACT_MP3;}}

3、ffmpeg配置环境变量

在Windows上安装并配置FFmpeg的环境变量,请按照以下步骤操作:

1)下载FFmpeg:

访问FFmpeg官网(https://ffmpeg.org/download.html)下载对应于你的操作系统的FFmpeg静态构建。

2)解压缩:

将下载的压缩包解压到你选择的目录,例如:C:\ffmpeg\。

3)配置环境变量:

  • 右键点击“我的电脑”或者“此电脑”,选择“属性”。
  • 点击“高级系统设置”。
  • 在“系统属性”窗口中选择“环境变量”。
  • 在“系统变量”区域找到并选择“Path”变量,点击“编辑”。
  • 点击“新建”,添加FFmpeg的bin目录到路径中,例如:C:\ffmpeg\bin。
  • 点击“确定”保存所有设置。

5)验证安装:

打开命令提示符(CMD)或者PowerShell,输入以下命令来检查FFmpeg是否正确安装和配置:

ffmpeg -version

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

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

相关文章

辛普森积分公式

辛普森公式是用于数值积分的一种方法&#xff0c;其基本思想是将积分区间等分成若干小段&#xff0c;并在每一小段内用一个二次函数来近似代替被积函数&#xff0c;从而计算积分值。它是一种比较精确的数值积分方法&#xff0c;比其他常见的数值积分方法&#xff08;如梯形法和…

Nature Genetics|三代测序微量建库技术:媲美WGBS的直接甲基化检测

DNA修饰和甲基化是理解基因调控机制的关键。以往&#xff0c;我们的经验表明&#xff0c;使用三代测序从未经扩增的长DNA模板中同时读取序列信息和碱基修饰&#xff0c;需要投入大量的DNA样本来构建文库。 今天&#xff0c;小编带大家看一篇2024年发表于《Nature Genetics》的…

Web端云剪辑解决方案,素材商城提供近万种各类的特效素材

在数字内容爆炸式增长的今天&#xff0c;高质量、高效率的视频制作已成为企业传播品牌、吸引用户不可或缺的关键。美摄科技&#xff0c;作为业界领先的视频云处理与创意解决方案提供商&#xff0c;正式推出其革命性的Web端云剪辑解决方案&#xff0c;以云端之力&#xff0c;赋能…

PS教程,从零开始学PS

A01 进入PS的世界 广告设计\平面设计产品包装设计摄影后期图像美化\照片美化网页网店UI界面设计游戏美术动漫图形创意恶意创意\动态表情效果图后期调整 了解基本规律掌握操作规律开发扩展思维 A02 PS软件安装 获得PS安装程序安装PS启动PS A03 认识界面 1. PS主界面构成 …

使用 MobaXterm 远程连接 Linux 虚拟机并实现文件传输

文章目录 前言一、什么是 MobaXterm二 、MobaXterm 安装三、使用 MobaXterm 远程连接 Linux 虚拟机1. 准备工作2. 创建 SSH 连接3. 登录虚拟机 四、使用 MobaXterm 进行文件传输总结 前言 在日常开发和运维中&#xff0c;Windows 用户经常需要通过远程连接到 Linux 服务器进行…

uniapp小程序中通过uni.setClipboardData实现复制功能无效的原因和解决方案

// 复制下载链接const shareFile (filePath) > {const pdfUrl 复制内容uni.showModal({title: 下载提示,content: 请复制链接到浏览器中下载,confirmColor: #eb2444,confirmText: 复制链接,success(res) {if (res.confirm) {uni.setClipboardData({data: pdfUrl, // url地…

Python 如何处理大文件的读取

Python 如何处理大文件的读取 在日常的开发工作中&#xff0c;我们经常会遇到处理大文件的需求。无论是读取日志文件、处理数据集&#xff0c;还是分析超大文本文件&#xff0c;大文件操作都是一个非常常见的挑战。尤其是在内存有限的环境中&#xff0c;直接将整个文件加载到内…

AV1 Bitstream Decoding Process Specification--[8]: 语法结构语义-4

原文地址&#xff1a;https://aomediacodec.github.io/av1-spec/av1-spec.pdf 没有梯子的下载地址&#xff1a;AV1 Bitstream & Decoding Process Specification摘要&#xff1a;这份文档定义了开放媒体联盟&#xff08;Alliance for Open Media&#xff09;AV1视频编解码…

Python基础练习题‌100道电子版及源码文件

Python基础练习题‌&#xff0c;旨在帮助学习者巩固和提升Python编程技能。以下是一些精选的练习题目&#xff0c;包括但不限于&#xff1a; 基础语法练习‌&#xff1a;涉及变量定义、数据类型、运算符、条件语句、循环等基础语法结构的应用。例如&#xff0c;编写程序来处理数…

必备的Python操作系统的6个自动化脚本

引言 在日常工作中&#xff0c;我们经常需要处理大量的文件操作&#xff0c;如重命名、搜索、同步等。通过编写自动化脚本&#xff0c;不仅可以提高效率&#xff0c;还能减少错误。本文将介绍几个常用的文件操作脚本&#xff0c;包括文件重命名、搜索、同步、压缩、解压以及日…

ads执行推特RPA机器人脚本

这个流程是这样的 1、进入到关注区&#xff0c;在一大堆fedds里面找到主账号发布的动态&#xff08;主号在本地TXT文本中统计着&#xff09; 2、判断当前账号有没对主号进行评论过 3、随机发布评论内容再随机上传一张图片&#xff08;评论内容也是在本地TXT文本中统计着&…

索迪迈车载录像机设计方案

一、项目背景与概述 随着汽车产业的快速发展&#xff0c;车载监控及录像系统成为了现代车辆不可或缺的一部分。本项目针对车载录像机设计&#xff0c;致力于提升产品的稳定性、易用性及数据安全性。以下是详细的索迪迈车载录像机设计方案。 二、超级电容设计 车载录像机内置超…

Python 函数用法与底层分析

在编写函数时&#xff0c;函数体中的代码写法和我们前面讲述的基本一致&#xff0c;只是对代码实现了封装&#xff0c;并增加了函数调用、传递参数、返回计算结果等内容。 函数简介函数(function)的基本概念 1&#xff1a;一个程序由一个一个的任务组成&#xff1b;函数就是代…

VBA技术资料MF201:添加简单的右键菜单

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

守望稻田|碧桂园服务助力绿色大米推广,丰富万千家庭餐桌

在有着“中国优质稻米之乡”美誉的五常市&#xff0c;蓝天如洗&#xff0c;微风轻拂&#xff0c;金黄的稻浪在无垠的田野上起伏&#xff0c;丰收的气息随着稻香在这片肥沃的黑土地上弥漫开来。作为中国好粮油行动示范市&#xff0c;国家有机绿色稻香米核心产区&#xff0c;五常…

数据结构与算法 #时间复杂度 #空间复杂度

文章目录 前言 一、算法的复杂度 二、时间复杂度 三、空间复杂度 四、例题 1、例1&#xff1a;冒泡排序 2、例2&#xff1a; 3、例3&#xff1a; 4、例4: 二分查找 5、例5: 阶乘 6、例6: 斐波那契 五、常见算法复杂度 总结 前言 路漫漫其修远兮&#xff0c;吾将上下而求索&…

5个适合教师的AI工具,智能辅助,提升效率,让老师们工作更轻松!

随着人工智能技术的蓬勃发展&#xff0c;我们正步入一个由AI引领的变革时代&#xff0c;它不仅重塑了多个行业的面貌&#xff0c;更激发了我们对未来无限可能的想象。面对这一趋势&#xff0c;我们不应仅仅聚焦于其带来的挑战与冲击&#xff0c;而应积极拥抱变化&#xff0c;探…

猫咪掉毛背后的隐秘原因?除毛除臭宠物空气净化器双管齐下!

作为一个二胎家庭&#xff0c;两只猫咪&#xff0c;除了卖萌加倍之外&#xff0c;拉屎需要排队之外&#xff0c;家里最不缺就是毛了。作为一个名鼻炎患者真的很难顶。感受一下40度高温的养猫人&#xff0c;给掉毛怪疏毛浮毛飘飘&#xff0c;逃不过的饮水机&#xff0c;各个角落…

Deep Guided Learning for Fast Multi-ExposureImage Fusion

Abstract 我们提出了一种快速多重曝光图像融合&#xff08;MEF&#xff09;方法&#xff0c;即 MEF-Net&#xff0c;用于任意空间分辨率和曝光次数的静态图像序列。 我们首先将输入序列的低分辨率版本提供给全卷积网络以进行权重图预测。 然后&#xff0c;我们使用引导滤波器联…

HTML5 Video标签的属性、方法和事件汇总,以及常用视频插件推荐

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…