Java 跨平台多媒体处理样例

代码

java 复制代码
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil;
import lombok.extern.slf4j.Slf4j;
import ws.schild.jave.Encoder;
import ws.schild.jave.MultimediaObject;
import ws.schild.jave.encode.AudioAttributes;
import ws.schild.jave.encode.EncodingAttributes;
import ws.schild.jave.process.ProcessWrapper;
import ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator;

import java.io.File;
import java.io.InputStream;

/**
 * 多媒体文件处理工具包
 */
@Slf4j
public class FfmpegUtil {

    /**
     * mp4转mp3
     *
     * @param src  源文件
     * @param dest 目标文件
     */
    public static void mp4ToMp3(String src, String dest) {
        FileUtil.writeUtf8String("", dest);
        File fileMp4 = new File(src);
        File fileMp3 = new File(dest);
        AudioAttributes audio = new AudioAttributes();
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setOutputFormat("mp3");
        attrs.setAudioAttributes(audio);
        Encoder encoder = new Encoder();
        MultimediaObject mediaObject = new MultimediaObject(fileMp4);
        try {
            encoder.encode(mediaObject, fileMp3, attrs);
        } catch (Exception e) {
            log.error(ExceptionUtil.stacktraceToString(e));
        }
    }

    /**
     * 获取第一帧
     */
    public static void firstFrame(String src, String dest) {
        FileUtil.writeUtf8String("", dest);
        ProcessWrapper ffmpeg = new DefaultFFMPEGLocator().createExecutor();
        try {
            ffmpeg.addArgument("-i");
            ffmpeg.addArgument(src);
            ffmpeg.addArgument("-y");
            ffmpeg.addArgument("-ss");
            // 此处可自定义视频的秒数
            ffmpeg.addArgument("1");
            ffmpeg.addArgument("-vframes");
            ffmpeg.addArgument("1");
            ffmpeg.addArgument(dest);
            ffmpeg.execute();
            InputStream errorStream = ffmpeg.getErrorStream();
            String read = IoUtil.read(errorStream, CharsetUtil.UTF_8);
            System.out.println(read);
        } catch (Exception e) {
            log.error(ExceptionUtil.stacktraceToString(e));
        } finally {
            ffmpeg.close();
        }

    }
}

依赖

xml 复制代码
<!--hutool工具包-->
 <dependency>
     <groupId>cn.hutool</groupId>
     <artifactId>hutool-all</artifactId>
     <version>5.7.15</version>
 </dependency>

<!--java多媒体处理工具包-->
 <dependency>
     <groupId>ws.schild</groupId>
     <artifactId>jave-all-deps</artifactId>
     <version>3.2.0</version>
 </dependency>
相关推荐
小猪咪piggy3 分钟前
【JavaEE】(23) 综合练习--博客系统
java·数据库·java-ee
周航宇JoeZhou5 分钟前
JP4-7-MyLesson后台前端(五)
java·前端·vue·elementplus·前端项目·mylesson·管理平台
David爱编程7 分钟前
从 JVM 到内核:synchronized 与操作系统互斥量的深度联系
java·后端
渣哥14 分钟前
Java Set 不会重复?原来它有“记仇”的本事!
java
一叶飘零_sweeeet14 分钟前
从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
java·数据库·mysql·数据库架构·分库分表
苹果醋318 分钟前
数据库索引设计:在 MongoDB 中创建高效索引的策略
java·运维·spring boot·mysql·nginx
Dontla29 分钟前
Dockerfile解析器指令(Parser Directive)指定语法版本,如:# syntax=docker/dockerfile:1
java·docker·eureka
彭于晏Yan31 分钟前
SpringBoot优化树形结构数据查询
java·spring boot·后端
AAA修煤气灶刘哥1 小时前
缓存这「加速神器」从入门到填坑,看完再也不被产品怼慢
java·redis·spring cloud
上位机付工1 小时前
C#与倍福TwinCAT3进行ADS通信
开发语言·c#