将MP4 通过ffmpeg 音量增大4倍,java并行执行多个任务

首先建议先把 ffmpeg加入 到环境变量path。

另外执行此段 代码后,我的cpu 2600x 6核12线程 直接拉满到100%,16g的内存也占到了70-80%,大概运行快一个多小时,才把20G左右的视频转换完成

因为单个用cmd 的for循环时 是串行的,发现cpu还有多余的,然后用java 改成并行执行,这样应该能提高速度,虽然我没有对比,也不会C

在这里插入图片描述

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class FFmpegTest {

    public static void main(String[] args) {
        //MP4所在目录
        String oldPath = "F:\\cloud\\";
        //MP4输出目录
        String newPath = "F:\\cloud\\ok\\";
        File file = new File(oldPath);
        File[] files = file.listFiles();
        List<String> mp4Name = new ArrayList<>();
        for (File fileName : files) {
            mp4Name.add(fileName.getName());
        }
        mp4Name.stream().parallel().filter(name -> name.endsWith("mp4")).forEach(item -> {
            String videoOldName = oldPath + item;
            String videoNewName = newPath + item;
            System.out.println(videoOldName);
            System.out.println(videoNewName);

            ffmpegUtil(videoOldName,videoNewName);
        });


    }

    private static void ffmpegUtil(String videoFile, String outFile) {
        if (videoFile == null || outFile == null) {
            return;
        } else {
            ProcessBuilder processBuilder = new ProcessBuilder();
            List<String> command = new ArrayList<>();
            command.add("ffmpeg");
            command.add("-i");
            command.add(videoFile);
            command.add("-af");
            command.add("volume=4");
            command.add("-y");
            command.add(outFile);
            processBuilder.command(command);
            processBuilder.redirectErrorStream(true);

//            InputStream inputStream = null;
            Process process = null;
            try {
                //启动进程
                process = processBuilder.start();
//                inputStream = process.getInputStream();
                //转成字符流
//                List list = IOUtils.readLines(inputStream, "utf-8");
//                list.stream().forEach(System.out::println);
            } catch (IOException e) {
                e.printStackTrace();
//            } finally {
//                IOUtils.closeQuietly(inputStream);
            }
        }
    }
}

这个是试用版,如果您下载后本授权已经过期可联系我们。 关于几个参数的标准: 1. 同步周期:软件每隔多少秒就会查询指定的文件夹有没有需要转码的视频文件,如果上传量大可以设置短一些。 2. 最大任务数:软件同时执行转码任务的数量,只要你服务器够强大,完全可以马力全开,设置几十个也不是问题。 3. 是否删除文件:源视频文件是否在转码完成后删除?0为不删除,1为删除。 4. 视频来源目录:举例“d:\WWW\web”,末尾无需\或者/,如果视频文件在其他目录,确保该路径没有符号和空格。 5. 转码格式:指的是要把哪些格式的视频转码为mp4多个视频格式|分隔,比如flv|mpg|mpeg|avi|vod 如果还有其他格式要转 继续在后面添加,原视频格式可以和输出格式相同,比如原来是mp4文件转码出来也是可以是mp4文件,这样原来的mp4文件会根据设置的参数进行重新处理,让视频更符合网络视频播放规范。 6. 码率:设为500效果比较好,是压缩率和清晰度都能均衡到的最好设置,数字越小 画质越差,视频文件越小,反之亦然,设置为0则保持原来视频的码率,可转高清视频。如果原视频码率低于设置码率,则保持原视频码率输出(低画质视频,强制升高码率只会让文件变得更大,但对画质并无改善,故作此设置),如果原视频码率大于设置码率则降低码率按设置码率输出。 7. 是否切片:如果需要把视频分段存放,则勾选。 a. 分片前缀:因为播放器要读取xml里面分段视频的绝对路径,这里需要设置一个相对于网站根目录的绝对地址。 b. 是否保留原文件:这里的源文件是指转码为整个mp4后的视频文件,如果你的视频需要在移动设备播放,xml列表的播放效果可能不太完美,你就需要保留这个整体的mp4文件在移动端播放,当然不需要你也可以删除,只保留分段的视频文件。 8. 分辨率:保持原视频分辨率设置为0 如果要固定分辨率设置为如:720x480 9. 水印:无需水印设置为0,水印设置标准 10:10 从右上角起距左、距右各10像素,具体要求,自己多调试。 :为英文符号,水印图片的名称必须为watermark.png,否则会错。 10. 图片参数:135*71,新版是随机截取视频图片,135*71是图片大小,如需多图截取则用|分隔多个像素,比如135*71|320*240|480*720,不同图片的截取方便缩略图在网站不同位置调用或选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值