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>
相关推荐
FL162386312929 分钟前
[C#][winform]基于yolov8的水表读数检测与识别系统C#源码+onnx模型+评估指标曲线+精美GUI界面
开发语言·yolo·c#
cnxy1883 小时前
围棋对弈Python程序开发完整指南:步骤1 - 棋盘基础框架搭建
开发语言·python
Nonoas4 小时前
动态代理:发布订阅的高级玩法
java·ide·intellij-idea
程序员-周李斌4 小时前
Java 死锁
java·开发语言·后端
皮皮林5515 小时前
Prometheus+Grafana,打造强大的监控与可视化平台
java
JasmineWr5 小时前
CompletableFuture相关问题
java·开发语言
零雲5 小时前
java面试:知道java的反射机制吗
java·开发语言·面试
Jeremy爱编码5 小时前
实现 Trie (前缀树)
开发语言·c#
laocooon5238578865 小时前
插入法排序 python
开发语言·python·算法
你的冰西瓜6 小时前
C++中的list容器详解
开发语言·c++·stl·list