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>
相关推荐
20岁30年经验的码农26 分钟前
Spring Cloud Gateway 网关技术文档
java
likuolei1 小时前
XML DOM 节点类型
xml·java·服务器
ZHE|张恒3 小时前
Spring Bean 生命周期
java·spring
夏天的味道٥4 小时前
@JsonIgnore对Date类型不生效
开发语言·python
q***38515 小时前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
小白学大数据5 小时前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
SEO_juper6 小时前
别再纠结LLMs.txt了!它背后的真相与最佳使用场景,一文讲透。
开发语言·ai·php·数字营销
程序员西西6 小时前
SpringBoot接口安全:APIKey保护指南
java·spring boot·计算机·程序员·编程·编程开发
g***B7386 小时前
JavaScript在Node.js中的模块系统
开发语言·javascript·node.js
summer_west_fish6 小时前
单体VS微服务:架构选择实战指南
java·微服务·架构