java ffmpeg实现视屏剪辑、srt字幕嵌入、视频合成、图片转视频


java ffmpeg实现视屏剪辑、srt字幕嵌入、视频合成、图片转视频 通过test类运行。demo基于jave的源码。对ffmpeg的两种系统下的执行文件进行了替换。所以ffmpeg版本是最新的。可以执行ffmpeg官网上大多数的命令
资源截图
代码片段和文件信息
package com.epoint.ga.demo.ffmpeg;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.linkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.log4j.Logger;

import com.epoint.core.utils.string.StringUtil;

import it.sauronsoftware.jave.DefaultFFMPEGLocator;

/**
 * 主要封装了对音视频处理的命令执行
 * @author guosc
 *
 */
public class MediaUtil
{
    private static String FFMPEG_PATH;

    private static boolean isWin = false;

    private final static Logger log = Logger.getLogger(MediaUtil.class);

    /**
     * 初始化时利用反射获取jave-1.0.1.jar中FFmpeg.exe的路径
     * 利用jave-1.0.1.jar来避免本地安装FFmpeg.exe
     */
    static {
        DefaultFFMPEGLocator locator = new DefaultFFMPEGLocator();
        try {
            Method method = locator.getClass().getDeclaredMethod(“getFFMPEGExecutablePath“);
            method.setAccessible(true);
            FFMPEG_PATH = (String) method.invoke(locator);
            method.setAccessible(false);
            isWin = System.getProperty(“os.name“).toLowerCase().indexOf(“windows“) != -1;

            log.info(“--- 获取FFmpeg可执行路径成功 --- 路径信息为:“ + FFMPEG_PATH);
            log.info(“--- 系统是否为windows --- “ + isWin);

        }
        catch (Exception e) {
            log.error(“--- 获取FFmpeg可执行路径失败! --- 错误信息: “ + e.getMessage());
        }

    }

    /**
     * 获取FFmpeg程序的路径(windows和linux环境下路径不一样)
     *
     * @return
     */
    public static String getFFmpegPath() {
        return FFMPEG_PATH;
    }

    public static String getWidthAndHeight(String mp4Path) {
        List commonds = new ArrayList<>();
        commonds.add(“-i“);
        commonds.add(“““ + mp4Path + “““);

        String result = executeCommand(commonds);

        Pattern p3 = Pattern.compile(“(\d{23})x(\d{23})“);
        Matcher m = p3.matcher(result);
        String wh = ““;
        if (m.find()) {
            wh = m.group(1) + ““ + m.group(2);
        }
        return wh;
    }

    /**
     * MP4嵌入字幕
     * @param mp4Path
     * @param tempFloderPath
     * @param targetMp4Path
     * @param srtParts
     * @return
     */
    public static String addSrt2Mp4(String mp4Path String tempFloderPath String targetMp4Path List srtParts) {
        //ffmpeg -y -i file1.mp4 -vf subtitles=file1.srt file1zimu.mp4

        //需要生成缓存文件srt
        if (mp4Path == null || StringUtil.isBlank(tempFloderPath)) {
            throw new RuntimeException(“参数不对“);
        }

        if (!tempFloderPath.endsWith(File.separator)) {
            tempFloderPath += File.separator;
        }

        //计算视频宽高
        String wh = getWidthAndHeight(mp4Path);
        in

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      15866  2020-05-15 18:15  javacomepointgademoffmpegMediaUtil.java

     文件       1090  2020-05-15 16:42  javacomepointgademoffmpegSrtPart.java

     文件       3835  2020-05-15 18:05  javacomepointgademoffmpegSrtUtil.java

     文件       2832  2020-05-15 17:35  javacomepointgademoffmpegTest.java

     文件       4760  2020-05-14 17:06  javacomepointgademo
yrtcRyRtcAction.java

     文件        999  2020-04-21 16:47  javacomepointgademoserverPExchangeServerV7.java

     文件       3102  2020-04-21 15:37  javacomepointgademoserverPRestServerInterfaceV7.java

     文件       5139  2020-05-15 09:51  javaitsauronsoftwarejaveAudioAttributes.java

     文件       3460  2020-05-15 09:51  javaitsauronsoftwarejaveAudioInfo.java

     文件       4659  2020-05-15 10:24  javaitsauronsoftwarejaveDefaultFFMPEGLocator.java

     文件      38915  2020-05-15 17:17  javaitsauronsoftwarejaveEncoder.java

     文件       1262  2020-05-15 09:51  javaitsauronsoftwarejaveEncoderException.java

     文件       1804  2020-05-15 09:51  javaitsauronsoftwarejaveEncoderProgressListener.java

     文件       5546  2020-05-15 09:51  javaitsauronsoftwarejaveEncodingAttributes.java

     文件   40687412  2020-05-15 10:13  javaitsauronsoftwarejaveffmpeg

     文件   67973632  2020-05-15 10:30  javaitsauronsoftwarejaveffmpeg.exe

     文件       4517  2020-05-15 09:51  javaitsauronsoftwarejaveFFMPEGExecutor.java

     文件       1614  2020-05-15 09:51  javaitsauronsoftwarejaveFFMPEGLocator.java

     文件       1182  2020-05-15 09:51  javaitsauronsoftwarejaveInputFormatException.java

     文件       3405  2020-05-15 09:51  javaitsauronsoftwarejaveMultimediaInfo.java

     文件       1374  2020-05-15 09:51  javaitsauronsoftwarejaveProcessKiller.java

     文件      88379  2020-05-15 10:24  javaitsauronsoftwarejavepthreadGC2.dll

     文件       2039  2020-05-15 09:51  javaitsauronsoftwarejaveRBufferedReader.java

     文件       4721  2020-05-15 09:51  javaitsauronsoftwarejaveVideoAttributes.java

     文件       3136  2020-05-15 09:51  javaitsauronsoftwarejaveVideoInfo.java

     文件       1827  2020-05-15 09:51  javaitsauronsoftwarejaveVideoSize.java

     目录          0  2020-05-15 14:31  javacomepointgademoffmpeg

     目录          0  2020-04-15 10:37  javacomepointgademo
yrtc

     目录          0  2020-04-21 15:36  javacomepointgademoserver

     目录          0  2020-05-14 08:13  javacomepointgademoutil

............此处省略11个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)