资源简介

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  java\com\epoint\ga\demo\ffmpeg\MediaUtil.java

     文件       1090  2020-05-15 16:42  java\com\epoint\ga\demo\ffmpeg\SrtPart.java

     文件       3835  2020-05-15 18:05  java\com\epoint\ga\demo\ffmpeg\SrtUtil.java

     文件       2832  2020-05-15 17:35  java\com\epoint\ga\demo\ffmpeg\Test.java

     文件       4760  2020-05-14 17:06  java\com\epoint\ga\demo\ryrtc\RyRtcAction.java

     文件        999  2020-04-21 16:47  java\com\epoint\ga\demo\server\PExchangeServerV7.java

     文件       3102  2020-04-21 15:37  java\com\epoint\ga\demo\server\PRestServerInterfaceV7.java

     文件       5139  2020-05-15 09:51  java\it\sauronsoftware\jave\AudioAttributes.java

     文件       3460  2020-05-15 09:51  java\it\sauronsoftware\jave\AudioInfo.java

     文件       4659  2020-05-15 10:24  java\it\sauronsoftware\jave\DefaultFFMPEGLocator.java

     文件      38915  2020-05-15 17:17  java\it\sauronsoftware\jave\Encoder.java

     文件       1262  2020-05-15 09:51  java\it\sauronsoftware\jave\EncoderException.java

     文件       1804  2020-05-15 09:51  java\it\sauronsoftware\jave\EncoderProgressListener.java

     文件       5546  2020-05-15 09:51  java\it\sauronsoftware\jave\EncodingAttributes.java

     文件   40687412  2020-05-15 10:13  java\it\sauronsoftware\jave\ffmpeg

     文件   67973632  2020-05-15 10:30  java\it\sauronsoftware\jave\ffmpeg.exe

     文件       4517  2020-05-15 09:51  java\it\sauronsoftware\jave\FFMPEGExecutor.java

     文件       1614  2020-05-15 09:51  java\it\sauronsoftware\jave\FFMPEGLocator.java

     文件       1182  2020-05-15 09:51  java\it\sauronsoftware\jave\InputFormatException.java

     文件       3405  2020-05-15 09:51  java\it\sauronsoftware\jave\MultimediaInfo.java

     文件       1374  2020-05-15 09:51  java\it\sauronsoftware\jave\ProcessKiller.java

     文件      88379  2020-05-15 10:24  java\it\sauronsoftware\jave\pthreadGC2.dll

     文件       2039  2020-05-15 09:51  java\it\sauronsoftware\jave\RBufferedReader.java

     文件       4721  2020-05-15 09:51  java\it\sauronsoftware\jave\VideoAttributes.java

     文件       3136  2020-05-15 09:51  java\it\sauronsoftware\jave\VideoInfo.java

     文件       1827  2020-05-15 09:51  java\it\sauronsoftware\jave\VideoSize.java

     目录          0  2020-05-15 14:31  java\com\epoint\ga\demo\ffmpeg

     目录          0  2020-04-15 10:37  java\com\epoint\ga\demo\ryrtc

     目录          0  2020-04-21 15:36  java\com\epoint\ga\demo\server

     目录          0  2020-05-14 08:13  java\com\epoint\ga\demo\util

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

评论

共有 条评论