ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ffmpeg音视频转码

2020-05-02 17:01:16  阅读:248  来源: 互联网

标签:String 转码 sourcePath targetPath 音视频 add ffmpeg ffmpegPath convertDetailList


使用ffmpeg对音视频格式转换

FFmpeg是领先的多媒体框架,能够解码,编码, 转码,mux,demux,流,过滤和播放人类和机器创建的几乎所有内容。

下载ffmpeg,官网地址:ffmpeg

下载地址

下载完成后(Windows),需配置环境变量,将ffmpegPath的路径指定到你安装ffmpeg的具体路径,sourcePath的路径是需要转换的源文件路径,targetPath的路径是转换完成后存放的目标路径 。具体代码如下:

/**
 * 音频转码
 * @param ffmpegPath ffmpeg路径
 * @param sourcePath 源文件路径
 * @param targetPath 目标文件
 */
public static void audio(String ffmpegPath, String sourcePath, String targetPath){

    List<String> convertDetailList = new ArrayList<String>();

    convertDetailList.add(ffmpegPath);
    convertDetailList.add("-i");
    convertDetailList.add(sourcePath);
    convertDetailList.add("-acodec");
    convertDetailList.add("libmp3lame");
    convertDetailList.add(targetPath);

    executeConvert(convertDetailList);

}


/**
 * 视频转码
 * @param ffmpegPath ffmpeg路径
 * @param sourcePath 源文件路径
 * @param targetPath 目标文件
 */
public static void video(String ffmpegPath, String sourcePath, String targetPath){

    List<String> convertDetailList = new ArrayList<String>();

    convertDetailList.add(ffmpegPath);
    convertDetailList.add("-i");
    convertDetailList.add(sourcePath);
    convertDetailList.add("-vcodec");
    convertDetailList.add("libx264");
    convertDetailList.add("-vb");
    convertDetailList.add("384k");
    convertDetailList.add("-r");
    convertDetailList.add("18");
    convertDetailList.add("-strict");
    convertDetailList.add("-2");
    convertDetailList.add("-ar");
    convertDetailList.add("22050");
    convertDetailList.add("-ab");
    convertDetailList.add("64k");
    convertDetailList.add("-coder");
    convertDetailList.add("0");
    convertDetailList.add(targetPath);

    executeConvert(convertDetailList);

}

/**
 *  视频截图(截取"00:05:55"时间的图片)
 * @param ffmpegPath ffmpeg路径
 * @param sourcePath 源文件路径
 * @param targetPath 目标文件
 */
public static void videoScreenshot(String ffmpegPath, String sourcePath, String targetPath){

    List<String> convertDetailList = new ArrayList<String>();

    convertDetailList.add(ffmpegPath);
    convertDetailList.add("-i");
    convertDetailList.add(sourcePath);
    convertDetailList.add("-y");
    convertDetailList.add("-f");
    convertDetailList.add("image2");
    convertDetailList.add("-ss");
    convertDetailList.add("00:05:55");
    convertDetailList.add("-vframes");
    convertDetailList.add("2");
    convertDetailList.add(targetPath);

    executeConvert(convertDetailList);

}


@SneakyThrows
private static void executeConvert(List<String> convertDetailList){
    String line = null;

    Process process = Runtime.getRuntime().exec(convertDetailList.toArray(new String[convertDetailList.size()]));
    @Cleanup InputStream stream = process.getErrorStream();
    @Cleanup InputStreamReader reader = new InputStreamReader(stream);
    @Cleanup BufferedReader bufferedReader = new BufferedReader(reader);
    StringBuffer stringBuffer = new StringBuffer();
    while((line = bufferedReader.readLine())!=null){
        stringBuffer.append(line).append("\n");
    }
    log.info("打印日志 {}", stringBuffer);
}

不足之处请赐教

标签:String,转码,sourcePath,targetPath,音视频,add,ffmpeg,ffmpegPath,convertDetailList
来源: https://blog.csdn.net/m0_46397664/article/details/105868910

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有