bytedeco/javacv

FrameRecorder$Exception: av_guess_format() error: Could not guess output format for "" and null format.

Open

#1,603 opened on Mar 2, 2021

View on GitHub
 (8 comments) (0 reactions) (0 assignees)Java (1,583 forks)batch import
help wantedquestion

Repository metrics

Stars
 (6,985 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

I am trying to split a video file without using the ffmpeg command line. Trying to use FFmpegFrameRecorder and FFmpegFrameGrabber. The idea is to split the file in chunks which are fully functional video snippets around 2MB in size. We also want to get a preview image from the first chunk (or any chunk for that matter).

The I have tried setting recorder.setFormat to many different values. No progress. Just the error keeps changing.. The video details are after the code snippet...

       FFmpegFrameGrabber grab = new FFmpegFrameGrabber(is);
   
  ByteArrayOutputStream os = new ByteArrayOutputStream(2000000);
	try {
    	grab.start();
    	FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(os, grab.getAudioChannels());
    	recorder.setFrameRate(grab.getFrameRate());
    	recorder.setSampleRate(grab.getSampleRate());
    	//recorder.setFormat("mp4");
    	recorder.setAudioCodec(grab.getAudioCodec());
    	recorder.setImageHeight(grab.getImageHeight());
    	recorder.setImageWidth(grab.getImageWidth());
    	
    	recorder.start();
    	
    	Frame frame;
    	while ((frame = grab.grab()) != null ) {
    		
    		if (os.toByteArray().length  < 2000000)
    			recorder.record(frame);
    		else {
    			byte[]  recordedchunk = os.toByteArray();
    			logger.debug("Video section {} recorded", os.toByteArray().length);
    			//Will save this byte[]
    			
    			os.close();
    			os = new ByteArrayOutputStream();
    			
    			recorder.close();	
    			
    			recorder = new FFmpegFrameRecorder(os, grab.getAudioChannels());
    			recorder.start();
    			
    			chunks++;
    		}
    	}
    	
    	recorder.close();
      	
    	//is.close(); will be done in controller
	    grab.stop();
	    grab.close();

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'java.io.BufferedInputStream@5cee5251': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.65.101 location-eng : +40.6232-111.9513/ location : +40.6232-111.9513/ Duration: 00:00:28.60, start: 0.000000, bitrate: 2010 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/smpte170m/bt709), 604x1080 [SAR 1215:1208 DAR 9:16], 1875 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default) Metadata: handler_name : ISO Media file produced by Google Inc. Created on: 05/13/2020. Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default) Metadata: handler_name : ISO Media file produced by Google Inc. Created on: 05/13/2020.

Contributor guide