FFmpeg的安装及简单使用

简介
FFmpeg 是一个跨平台的音视频处理工具库/命令行工具,其核心作用是:对音视频文件或流进行解码、转换(编码)、封装/解封装等处理。

友情提示
本次安装以Windows64位操作系统为例

一、下载及安装
1、前往FFmpeg官网,点击下载

这里我们以Windows builds from gyan.dev为例

2、进来以后选择release builds

这边我们选择右边的1或者2都可,选择其一就可以然后shared和不带shared主要区别就是戴shared是把依赖包全部放在lib文件下面然后ffmpeg.exe,ffplay.exe,ffprobe.exe作为可执行文件就可以直接去lib里面调用相应功能,而不带shared的他的ffmpeg.exe,ffplay.exe,ffprobe.exe作为独立的执行的单独模块会在bin得目录下,每个文件就会大一些。这里我们以下载ffmpeg-7.0.2-full_build.7z为例

3、下载解压完成后我们就得到了如下的目录

点击bin目录我们就可以看见那三个主要的文件
二、环境变量设置
1、右击此电脑选择属性

2、选择高级系统设置,选择环境变量

3、在系统变量中选择path进行编辑

4、将bin的路径直接复制过去,然后一定要把所有确定按钮点完

5、检验是否生效
cmd输入ffmpeg -version 如果出现版本号就说明配置成功

三、Java代码中ffmpeg的调用
ffmpeg过于强大,这里咱们就举几个简单例子展示一下ffmpeg的基本功能!
1、获取视频信息

    public static void main(String[] args) {try {// 获取视频信息getVideoInfo("D:/video/lin.mp4");} catch (IOException | InterruptedException e) {e.printStackTrace();}}public static void getVideoInfo(String videoPath) throws IOException, InterruptedException {ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg", "-i", videoPath);Process process = processBuilder.start();process.waitFor();printCommandOutput(process.getErrorStream());}private static void printCommandOutput(InputStream inputStream) throws IOException {InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}}

首先这里包含了视频的基本信息,路径:'D:/video/lin.mp4' 格式为MP4
Stream #0:00x1表示视频流:
Video: h264 (High) 表示视频流使用的是H.264编码,且为高配置文件。
yuv420p(tv, bt709, progressive) 是视频的像素格式,色域和扫描方式。
544x960 是视频的分辨率。
655 kb/s 是视频流的比特率。
23 fps 是视频的帧率。
23 tbr 是时间基准。
90k tbn 是时间基准。
Stream #0:10x2 表示音频流的信息:
Audio: aac (LC) 表示音频流使用的是AAC编码,低复杂度配置文件。
44100 Hz 是音频的采样率。
mono 表示音频是单声道的。
fltp 是音频样本格式。
48 kb/s 是音频流的比特率。

2、给视频加字幕

    public static void main(String[] args) {try {// 视频添加字幕addSubtitle("D:/video/lin.mp4", "D:/video/lin.srt", "D:/video/lin_with_subtitle.mp4");} catch (IOException | InterruptedException e) {e.printStackTrace();}}public static void addSubtitle(String videoPath, String subtitlePath, String outputPath)throws IOException, InterruptedException {String escapedSubPath = subtitlePath.replace("\\", "\\\\").replace(":", "\\:");// 使用完整FFmpeg命令参数ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg","-i", videoPath,"-vf", "subtitles='" + escapedSubPath + "'", // 用单引号包裹路径"-c:v", "libx264",     // 指定视频编码器"-c:a", "copy",        // 直接复制音频流"-y",                   // 覆盖输出文件outputPath);// 打印实际执行的命令System.out.println("执行命令: " + String.join(" ", processBuilder.command()));Process process = processBuilder.start();printCommandOutput(process.getErrorStream());int exitCode = process.waitFor();if (exitCode == 0) {System.out.println("字幕添加成功!");} else {System.out.println("处理失败,退出码: " + exitCode);}}private static void printCommandOutput(InputStream inputStream) throws IOException {InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}}

这是一个srt的字幕文件,简单用Windows自带的txt写了一个简单的的srt文件,内容就如上所示

这个就是生成的结果,lin是原视频,lin.srt是字幕文件,lin_with_subtitle是生成后带字幕的文件

上面两个就为原视频带字幕前后的对比了

3、添加水印的操作

    public static void main(String[] args) {try {// 给视频添加水印addWatermark("D:/video/lin.mp4","D:/video/lin.png","D:/video/lin_watermark.mp4");} catch (IOException | InterruptedException e) {e.printStackTrace();}}public static void addWatermark(String videoPath, String watermarkPath, String outputPath)throws IOException, InterruptedException {// 构造FFmpeg命令(支持透明PNG/动态调整位置)ProcessBuilder processBuilder = new ProcessBuilder("ffmpeg","-i", videoPath,          // 输入视频"-i", watermarkPath,      // 输入水印图片"-filter_complex","[1]format=rgba," +                   // 确保水印有透明通道"scale=iw/3:ih/3," +                 // 缩小3倍(iw/3=原宽度÷3)"colorchannelmixer=aa=0.25[wm];" +    // 透明度25%"[0][wm]overlay=25:H-h-25",           // 左下角位置(左边25px,底部25px)"-c:v", "libx264",        // 视频编码"-preset", "fast",        // 编码速度"-crf", "23",             // 画质控制"-c:a", "copy",           // 复制音频流"-y",                     // 覆盖输出outputPath);// 打印实际执行的命令System.out.println("执行命令: " + String.join(" ", processBuilder.command()));Process process = processBuilder.start();printCommandOutput(process.getErrorStream()); // FFmpeg输出到stderrint exitCode = process.waitFor();if (exitCode == 0) {System.out.println("水印添加成功!");} else {System.out.println("处理失败,退出码: " + exitCode);}}private static void printCommandOutput(InputStream inputStream) throws IOException {InputStreamReader inputStreamReader = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String line;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);}}

这里主要除了固定水印位置还可以设置移动水印的效果

好了以上就是全部内容,当然FFmpeg的功能绝对不仅仅于此,还可以对视频音频进行降噪处理、关键帧的提取、Ai集成、滤镜等等。在目前企业中也被广泛应用。只是作者在这里偷个懒~就不全部展示了。

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

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

相关文章

Science Advances--3D打印生物启发扭曲双曲超材料,用于无人机冲击缓冲和自供电实时传感

湍流引起的振动会对飞机的结构完整性及飞行稳定性造成巨大威胁,尤其是在无人驾驶飞行器(UAV)中,实时的冲击监测和轻质防护尤为重要。该研究基于生物启发,通过3D 打印尼龙PA12 制备了一种扭转-双曲面超材料(…

AI大模型的研发流程

开发一个大模型是一个庞大、复杂且资源密集的系统工程,涉及算法研究、工程实现、数据管理和算力基础设施等多个层面。下面我将为您提供一个从零开始开发大模型的全景式路线图,涵盖了从概念到部署的全过程。请注意,完全从零开始训练一个类似GP…

Docker desktop安装Redis Cluster集群

本文章将介绍如何在 Windows 系统的 Docker Desktop 环境中搭建 Redis 集群。将创建一个包含 6 个节点(3 主 3 从)的 Redis 集群。 环境准备 Windows 10/11 操作系统Docker Desktop 已安装并运行 步骤 清理环境(如之前有尝试) 如果…

Zynq开发实践(SDK之第一个纯PS工程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】学编程的时候,大家一般都比较重视第一个项目的创建和执行。第一个fpga程序一般是led闪烁,第一个c程序一般就是hello world程…

EJS(Embedded JavaScript)(一个基于JavaScript的模板引擎,用于在HTML中嵌入动态内容)

文章目录**1. 什么是 EJS?****2. 核心特点**- **接近原生 HTML**- **动态渲染**- **轻量高效**- **与 Express 深度集成****3. EJS 的基本语法****4. 示例代码****HTML 模板(views/user.ejs)****Express 中渲染模板****5. 使用场景**1. **服务…

Linux:基于阻塞队列的生产者消费模型

文章目录一、生产者消费者模型的基本原则💕💕生产者-消费者模型的 321 原则💕💕二、为何要使用生产者消费者模型1. 解耦2. 支持并发 (提高效率)3. 忙闲不均的支持三、基于 BlockingQueue 的生产者消费者模型…

ensp启动路由器报错40

1. 先关闭 eNSP 模拟器、关闭 Virtualbox2. 在everything里面搜索 .VirtualBox文件夹,然后删掉3. 再打开 eNSP,不添加任何模拟设备,单击“菜单-工具-注册设备”,将 AR_Base 重新注册。4. 关闭 eNSP 模拟器

代码随想录二刷之“图论”~GO

A.深搜与广搜(重点掌握!!!!) 深搜类似于回溯法 搜索方向,是认准一个方向搜,直到碰壁之后再换方向换方向是撤销原路径,改为节点链接的下一个路径,回溯的过程…

基于Echarts+HTML5可视化数据大屏展示-白茶大数据溯源平台V2

效果展示&#xff1a;代码结构&#xff1a;主要代码实现 index.html布局 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta n…

Linux 系统网络配置及 IP 地址相关知识汇总

Linux 系统网络配置及 IP 地址相关知识汇总 一、IP地址基础 IP地址&#xff1a;在计算机网络中用来唯一标识一台设备的一组数字。 二、IPv4相关知识 1. IPv4的表示方法 采用点分十进制表示&#xff0c;即由4个0-255的十进制数通过点分隔组成&#xff08;如192.168.1.1&#xff…

百度股价突破120美元创年内新高,AI云成为增长新引擎

美东时间9月16日&#xff0c;百度&#xff08;NASDAQ: BIDU&#xff09;美股大涨近8%&#xff0c;收盘价突破120美元&#xff0c;站上124美元高位&#xff0c;创2023年10月以来新高。北京时间9月17日港股开盘&#xff0c;百度&#xff08;09888.HK&#xff09;港股再次暴涨&…

《彩虹六号:围攻》“Siege X”发布会3月14日举行!

使用jQuery的常用方法与返回值分析 jQuery是一个轻量级的JavaScript库&#xff0c;旨在简化HTML文档遍历和操作、事件处理以及动画效果的创建。本文将介绍一些常用的jQuery方法及其返回值&#xff0c;帮助开发者更好地理解和运用这一强大的库。 1. 选择器方法 jQuery提供了多种…

[从青铜到王者] Spring Boot+Redis+Kafka电商场景面试全解析

互联网大厂Java开发岗技术面试实录&#xff1a;严肃面试官VS搞笑程序员谢飞机 文章内容 第一轮&#xff1a;基础框架与并发控制&#xff08;电商系统基础能力&#xff09; 面试官&#xff08;严肃&#xff09;&#xff1a;欢迎进入面试环节&#xff0c;首先请用3句话总结Spring…

【DMA】DMA架构解析

目录 1 DMA架构 1. 芯片架构图一览 2. AHB总线矩阵挂载 3. AHB1/APB1的桥和AHB1/APB2的桥 4. DMA1 和 DMA2 的区别 2 AHB总线矩阵 1 DMA架构 1. 芯片架构图一览 2. AHB总线矩阵挂载 stm32F411 芯片的 AHB 总线矩阵上共挂载了 6 主 5 从 六主&#xff1a; Icode-bus、D…

GPS 定位器:精准追踪的“隐形守护者”

GPS 定位器&#xff1a;精准追踪的“隐形守护者” 一、什么是 GPS 定位器&#xff1f; GPS 定位器是一种基于 全球定位系统&#xff08;Global Positioning System, GPS&#xff09; 的智能追踪设备。 通过接收卫星信号并结合通信模块&#xff08;如 4G、NB-IoT&#xff09;&am…

前端拖拽排序实现

1. 使用 HTML5 事件 触发时机 核心任务 dragstart 开始拖拽时 准备数据&#xff0c;贴上标签 dragover 经过目标上方时 必须 preventDefault()&#xff0c;发出“允许放置”的信号 dragleave 离开目标上方时 清理高亮等临时视觉效果 drop 在目标上松手时 接收数据…

arm coresight

这是一个arm设计的调试基础架构&#xff0c;我们常用的debug基本都包含在内。比如ETM、PTM、ITM、HTM、ETB等。 注意ETM、PTM、ITM、HTM、ETB是coresight的子集。这些工具相比普通debug的断点调试&#xff0c;需要更高的专业水平&#xff0c;因此也用于复杂软件故障定位、性能…

《华为基本法》 —— 企业发展的导航仪

当一家企业从 “小作坊” 向 “规模化组织” 跨越时&#xff0c;最需要的是什么&#xff1f;华为的答案&#xff0c;藏在 1998 年出台的《华为基本法》里。1998 年&#xff0c;《华为基本法》正式颁布&#xff0c;这部凝结华为早期经营智慧的纲领性文件&#xff0c;不仅为华为从…

【完整源码+数据集+部署教程】传统韩文化元素分割系统: yolov8-seg-GFPN

背景意义 研究背景与意义 随着全球化的加速&#xff0c;传统文化的保护与传承面临着前所未有的挑战。尤其是韩国的传统文化&#xff0c;作为东亚文化的重要组成部分&#xff0c;蕴含着丰富的历史、艺术和哲学内涵。然而&#xff0c;随着现代化进程的推进&#xff0c;许多传统文…

构建AI智能体:三十五、决策树的核心机制(一):刨根问底鸢尾花分类中的参数推理计算

一、初识决策树想象一个生活中的场景&#xff0c;我们去水果店买一个西瓜&#xff0c;该怎么判断一个西瓜是不是又甜又好的呢&#xff1f;我们可能会问自己一系列问题&#xff1a;首先看看它的纹路清晰吗&#xff1f;如果“是”&#xff0c;那么它可能是个好瓜。如果“否“&…