bytedeco/javacv

SeekableByteArrayOutputStream cannot be played

Open

#2.280 aberto em 8 de set. de 2024

Ver no GitHub
 (0 comments) (0 reactions) (0 assignees)Java (1.583 forks)batch import
help wantedquestion

Métricas do repositório

Stars
 (6.985 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

version: 1.5.10

public static void main(String[] args) throws IOException {
        String filePath="C:\\Users\\ferrym\\Desktop\\scrm\\surmount\\video-watermark\\lron-man.mp4";
        File file=new File(filePath);
        // 启用 FFmpeg 日志输出
        FFmpegLogCallback.set();
        //抓取视频资源
        FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(file);



        //
        Frame frame = null;
        FFmpegFrameRecorder recorder = null;
        String fileName = null;
        SeekableByteArrayOutputStream outputStream  = new SeekableByteArrayOutputStream();
        try{
            frameGrabber.start();
            Random random=new Random();
            fileName = file.getAbsolutePath() + random.nextInt(100)+".mp4";
            System.out.println("文件名-->>"+fileName);
            recorder = new FFmpegFrameRecorder(outputStream, frameGrabber.getImageWidth(), frameGrabber.getImageHeight(), frameGrabber.getAudioChannels());
            recorder.setFormat("mp4");
            recorder.setSampleRate(frameGrabber.getSampleRate());
            recorder.setFrameRate(frameGrabber.getFrameRate());
            recorder.setTimestamp(frameGrabber.getTimestamp());
            recorder.setVideoBitrate(frameGrabber.getVideoBitrate());
            recorder.setVideoCodec(frameGrabber.getVideoCodec());
            recorder.start();
            int index=0;
            while (true){
                frame=frameGrabber.grabFrame();
                if(frame==null){
                    System.out.println("视频处理完成");
                    break;
                }
                //判断音频
                System.out.println("音频=="+(frame.samples ==null)+"视频=="+ (frame.image==null));
                //判断图片帧
                if(frame.image !=null){
                    IplImage iplImage = Java2DFrameUtils.toIplImage(frame);
                    BufferedImage buffImg= Java2DFrameUtils.toBufferedImage(iplImage);
                    Graphics2D graphics = buffImg.createGraphics();
                    graphics.setColor(Color.WHITE);
                    graphics.setFont(new Font("微软雅黑", Font.BOLD, 20));
                    graphics.drawString("------------scrm技术团队--------------",(iplImage.width()/2)-100,iplImage.height()/2);
                    graphics.dispose();
                    Frame newFrame = Java2DFrameUtils.toFrame(buffImg);
                    recorder.record(newFrame);
                }
                //设置音频
                if(frame.samples !=null){
                    recorder.recordSamples(frame.sampleRate,frame.audioChannels,frame.samples);
                }
                System.out.println("帧值="+index);
                index ++;
            }


          File test =  new File(fileName);
            FileUtil.writeBytes(outputStream.toByteArray(),test);
//            writeBytesToFile(outputStream.toByteArray(),test);

            recorder.close();
            frameGrabber.close();
//            tempFile.delete();
//            FileUtil.delete(fileName);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

Guia do colaborador