a-schild / jave2

The JAVE (Java Audio Video Encoder) library is Java wrapper on the ffmpeg project
GNU General Public License v3.0
1.2k stars 245 forks source link

hls support question~ #203

Closed StivenYang closed 2 years ago

StivenYang commented 2 years ago

hi. author i have code:

 @Test
    void mp4Transform() throws Exception {
        //Encode
        Encoder encoder = new Encoder();

        File source = new File(
                "D:\\transform\\origin\\mp4-test.mp4");
        File target = new File("D:\\transform\\down\\aaa.m3u8");

        MultimediaObject multimediaObject = new MultimediaObject(source);
        MultimediaInfo info = multimediaObject.getInfo();

        VideoInfo videoInfo = new VideoInfo();
        videoInfo.setFormat(info.getFormat());
        videoInfo.setBitRate(info.getVideo().getBitRate());
        videoInfo.setHeight(info.getVideo().getSize().getHeight());
        videoInfo.setWidth(info.getVideo().getSize().getWidth());
        videoInfo.setSize(info.getMetadata().size());

        VideoConvertInfo videoConvertInfo = ProductionConvertVideoPluginChain.instance.videoConvertInfo(videoInfo);

        //音频编码器
        AudioAttributes audio = new AudioAttributes();

        //视频编码器
        VideoAttributes video = new VideoAttributes();
        video.setCodec("libx264");
        //        video.setBitRate();
        //        video.setFrameRate(30);
        video.setFaststart(true);

        video.setSize(new VideoSize(videoConvertInfo.getWidth(), videoConvertInfo.getHeight()));

        video.setX264Profile(X264_PROFILE.BASELINE);
        String absolutePath = FileUtil.getAbsolutePath(FileEngConstants.PDF_FONT);
        String s = absolutePath.replaceFirst(":", "\\\\\\\\:");
        video.addFilter(new DrawtextFilter("abc", "300", "500").addNamedArgument("fontfile", s)
                .addNamedArgument("fontsize", "100").addNamedArgument("fontcolor", "0xff0000@0.5")
                .addNamedArgument("enable", "lt(mod(t\\,3)\\,1)"));

        HashMap<String, String> extraParam = MapUtil.newHashMap();
        extraParam.put("-hls_list_size", "0");
        extraParam.put("-hls_time", "5");

        //encoding
        EncodingAttributes attrs = new EncodingAttributes();
        attrs.setExtraContext(extraParam);
        attrs.setInputFormat("mp4");
        attrs.setOutputFormat("hls");

        attrs.setAudioAttributes(audio);
        attrs.setVideoAttributes(video);
        SimpleArgument simpleArgument = new SimpleArgument(ArgType.OUTFILE,
                encodingAttributes -> encodingAttributes.getExtraContext().entrySet().stream().map(o -> o.getKey() + " " + o.getValue()));
        Encoder.addOptionAtIndex(simpleArgument, 6);

        log.info("attr: {}", attrs);
        encoder.encode(multimediaObject, target, attrs);
    }

a error happened as follow:

21:33:39.473 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - Os name is <windows 10> isWindows: true isMac: false
21:33:39.476 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - Jave temp folder exists in <C:\Users\yang\AppData\Local\Temp\jave>
21:33:39.476 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - Executable path: C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe
21:33:39.477 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - Executable exists in <C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe>
21:33:39.477 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - ffmpeg executable found: C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe
21:33:39.479 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - Os name is <windows 10> isWindows: true isMac: false
21:33:39.479 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - Jave temp folder exists in <C:\Users\yang\AppData\Local\Temp\jave>
21:33:39.479 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - Executable path: C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe
21:33:39.480 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - Executable exists in <C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe>
21:33:39.480 [main] DEBUG ws.schild.jave.process.ffmpeg.DefaultFFMPEGLocator - ffmpeg executable found: C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe
21:33:39.481 [main] DEBUG ws.schild.jave.process.ProcessWrapper - About to execute C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe -i D:\transform\origin\mp4-test.mp4 -hide_banner
21:33:39.548 [main] DEBUG ws.schild.jave.MultimediaObject - Output line: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\transform\origin\mp4-test.mp4':
21:33:39.549 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:   Metadata:
21:33:39.550 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:     major_brand     : isom
21:33:39.550 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:     minor_version   : 1
21:33:39.550 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:     compatible_brands: isomavc1
21:33:39.550 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:     creation_time   : 2013-12-27T00:29:37.000000Z
21:33:39.550 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:   Duration: 00:04:02.32, start: 0.000000, bitrate: 1047 kb/s
21:33:39.550 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:   Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640x480, 998 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
21:33:39.554 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       creation_time   : 2013-12-27T00:29:37.000000Z
21:33:39.554 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       handler_name    : Imported with GPAC 0.4.6-DEV (internal rev. 5)
21:33:39.554 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       vendor_id       : [0][0][0][0]
21:33:39.554 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:   Stream #0:1(und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 47 kb/s (default)
21:33:39.555 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       creation_time   : 2013-12-27T00:29:38.000000Z
21:33:39.556 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       handler_name    : GPAC ISO Audio Handler
21:33:39.556 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       vendor_id       : [0][0][0][0]
21:33:39.556 [main] DEBUG ws.schild.jave.MultimediaObject - Output line: At least one output file must be specified
21:33:39.556 [main] DEBUG ws.schild.jave.MultimediaObject - Output line: null
21:33:39.595 [main] INFO com.yxt.file.eng.service.va.strategy.VideoTransformServiceTest - attr: ws.schild.jave.encode.EncodingAttributes(format=hls, offset=null, duration=null,loop=false, audioAttributes=ws.schild.jave.encode.AudioAttributes(codec=null, bitRate=null, samplingRate=null, channels=null, volume=null, quality=null), videoAttributes=ws.schild.jave.encode.VideoAttributes(codec=libx264, bitRate=null, frameRate=null, size=ws.schild.jave.info.VideoSize (width=640, height=480), faststart=true, quality=null))
21:33:39.605 [main] DEBUG ws.schild.jave.process.ProcessWrapper - About to execute C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe -f mp4 -i D:\transform\origin\mp4-test.mp4 -hls_list_size 0 -vcodec libx264 -s 640x480 -movflags faststart -profile:v baseline -vf drawtext='enable=lt(mod(t\,3)\,1):x=300:fontfile=D\\:/code/base/fileeng/target/classes/font/font.otf:y=500:fontsize=100:fontcolor=0xff0000@0.5:text=abc' -f hls -y D:\transform\down\aaa.m3u8 -hide_banner
21:33:39.608 [main] DEBUG ws.schild.jave.process.ProcessWrapper - About to execute C:\Users\yang\AppData\Local\Temp\jave\ffmpeg-amd64-3.3.1.exe -i D:\transform\origin\mp4-test.mp4 -hide_banner
21:33:39.671 [main] DEBUG ws.schild.jave.MultimediaObject - Output line: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\transform\origin\mp4-test.mp4':
21:33:39.671 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:   Metadata:
21:33:39.671 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:     major_brand     : isom
21:33:39.671 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:     minor_version   : 1
21:33:39.671 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:     compatible_brands: isomavc1
21:33:39.671 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:     creation_time   : 2013-12-27T00:29:37.000000Z
21:33:39.671 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:   Duration: 00:04:02.32, start: 0.000000, bitrate: 1047 kb/s
21:33:39.671 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:   Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 640x480, 998 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
21:33:39.672 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       creation_time   : 2013-12-27T00:29:37.000000Z
21:33:39.672 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       handler_name    : Imported with GPAC 0.4.6-DEV (internal rev. 5)
21:33:39.672 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       vendor_id       : [0][0][0][0]
21:33:39.672 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:   Stream #0:1(und): Audio: aac (HE-AAC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 47 kb/s (default)
21:33:39.672 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       creation_time   : 2013-12-27T00:29:38.000000Z
21:33:39.672 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       handler_name    : GPAC ISO Audio Handler
21:33:39.672 [main] DEBUG ws.schild.jave.MultimediaObject - Output line:       vendor_id       : [0][0][0][0]
21:33:39.672 [main] DEBUG ws.schild.jave.MultimediaObject - Output line: At least one output file must be specified
21:33:39.673 [main] DEBUG ws.schild.jave.MultimediaObject - Output line: null
21:33:39.675 [main] DEBUG ws.schild.jave.ConversionOutputAnalyzer - Input Line (1): <Unrecognized option 'hls_list_size 0'.>
21:33:39.675 [main] DEBUG ws.schild.jave.ConversionOutputAnalyzer - Input Line (2): <Error splitting the argument list: Option not found>
21:33:39.675 [main] ERROR ws.schild.jave.Encoder - Process exit code: 1  to aaa.m3u8

can you help me please~^^

StivenYang commented 2 years ago

it's solved by this code. it's my fault.

 SimpleArgument simpleArgument = new SimpleArgument(ArgType.OUTFILE,
                encodingAttributes -> encodingAttributes.getExtraContext().entrySet().stream()
                        .map(o -> CollUtil.newArrayList(o.getKey(), o.getValue())).flatMap(Collection::stream));
        Encoder.addOptionAtIndex(simpleArgument, 6);