java程序将asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv,mpeg,mpe,wmv9,rm,rmvb转MP4

本文介绍了一个Java程序,使用FFmpeg进行视频格式检查、文件存在性验证,以及针对ffmpeg不支持格式的转换方法。重点讲解了检查视频后缀和处理wmv9、rm、rmvb等格式的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引入包

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

检查视频后缀

	public static int checkContentType(String resourcePath) {
		String type = resourcePath.substring(resourcePath.lastIndexOf(".") + 1,
				resourcePath.length()).toLowerCase();
		// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
		if (type.equals("avi")) {
			return 0;
		} else if (type.equals("mpg")) {
			return 0;
		} else if (type.equals("wmv")) {
			return 0;
		} else if (type.equals("3gp")) {
			return 0;
		} else if (type.equals("mov")) {
			return 0;
		} else if (type.equals("mp4")) {
			return 0;
		} else if (type.equals("asf")) {
			return 0;
		} else if (type.equals("asx")) {
			return 0;
		} else if (type.equals("flv")) {
			return 0;
		} else if (type.equals("mpeg")) {
			return 0;
		} else if (type.equals("mpe")) {
			return 0;
		}
		// 对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),
		// 可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
		else if (type.equals("wmv9")) {
			return 1;
		} else if (type.equals("rm")) {
			return 1;
		} else if (type.equals("rmvb")) {
			return 1;
		}
		return 9;
	}

检查文件是否存在

	private static boolean checkfile(String path) {
		File file = new File(path);
		if (!file.isFile()) {
			return false;
		}
		return true;
	}

转换

	// ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
	@SuppressWarnings("unchecked")
	private static String processFLV(String resourcePath) {
		if (!checkfile(resourcePath)) {
			logger.info(resourcePath + "isnotfile");
			return null;
		}
		List commend = new ArrayList();
		String saveName = "";
		String transformPath = "";
		if (resourcePath.contains("//")) {
			resourcePath = resourcePath.replaceAll("//", "/");
		}
		if (resourcePath.contains("/")) {
			saveName = resourcePath.substring(resourcePath.lastIndexOf("/") + 1)
					.substring(
							0,
							resourcePath.substring(
									resourcePath.lastIndexOf("/") + 1).indexOf(
									"."));
			transformPath = resourcePath.substring(0,
					resourcePath.lastIndexOf("/") + 1);
		} else {
			saveName = resourcePath
					.substring(resourcePath.lastIndexOf("\\") + 1).substring(
							0,
							resourcePath.substring(
									resourcePath.lastIndexOf("\\") + 1)
									.indexOf("."));
			transformPath = resourcePath.substring(0,
					resourcePath.lastIndexOf("\\") + 1);
		}
		logger.info("读取转换工具路径");
		String path = "";
		try {
			path = new PropertiesUtil("system.properties").readProperty("ffmpegPath");
		} catch (Exception e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
			logger.info("读取转换工具路径失败");
		}
		try {
			// 路径解码,主要解决空格%20
			path = URLDecoder.decode(path, "UTF-8");
			transformPath = URLDecoder.decode(transformPath, "UTF-8");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		logger.info("当前路径为:----------" + path);
		commend.add(path);
		commend.add("-i");
		commend.add(resourcePath);
		commend.add("-f");
		commend.add("mp4");
		commend.add("-acodec");
		commend.add("aac");
		/*
		 * commend.add("-b"); commend.add("512k"); commend.add("-ab");
		 * commend.add("512k");
		 */
		commend.add("-vcodec");
		commend.add("libx264");
		commend.add("-profile:v");
		commend.add("baseline");
		commend.add(transformPath + saveName + ".mp4");

		try {
			ProcessBuilder builder = new ProcessBuilder();
			builder.command(commend);
			builder.redirectErrorStream(true);
			//long start = System.currentTimeMillis(); // 记录起始时间

			logger.info("视频转码开始...");
			// builder.start();
			Process process = builder.start();

			BufferedReader br = new BufferedReader(new InputStreamReader(
					process.getInputStream()));
			String line = null;
			while ((line = br.readLine()) != null) {
				//logger.info("视频转换中:" + line);
			}
			/*
			 * InputStream in = process.getInputStream(); byte[] re = new
			 * byte[1024]; logger.info("正在进行转码,请稍候");  while (in.read(re) != -1)
			 * { System.out.print("."); } System.out.println(""); in.close();
			 */
			logger.info("视频转码完成...");
//			long end = System.currentTimeMillis();// 取结束时间
//			logger.info("转码一共运行" + (end - start) + "毫秒");
			logger.info("转换后视频存放路径transformPath:" + transformPath + saveName
					+ ".mp4");
			return saveName + ".mp4";
		} catch (Exception e) {
			e.printStackTrace();
			logger.info("视频转码失败!");
			return null;
		}
	}

删除源文件

	 /**
     * 删除单个文件
     *
     * @param fileName
     *            要删除的文件的文件名
     * @return 单个文件删除成功返回true,否则返回false
     */
    public static boolean deleteFile(String fileName) {
        File file = new File(fileName);
        // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
            	logger.info("删除单个文件" + fileName + "成功!");
                return true;
            } else {
            	logger.info("删除单个文件" + fileName + "失败!");
                return false;
            }
        } else {
        	logger.info("删除单个文件失败:" + fileName + "不存在!");
            return false;
        }
    }

附带ffmpeg 和测试需要使用的各种后缀的视频

ffmpeg程序+测试视频

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司徒剑南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值