Closed lianyf1994 closed 6 months ago
Please try again with JavaCV 1.5.9
I assume that's working in JavaCV 1.5.9. Please let me know if that's not the case
Yes, javacv1.5.9 can indeed convert h.265 encoding to h.264, but I have encountered new problems. I want to control the playback speed of the video after transcoding. Some blogs say that pts and dts are recalculated for the video timestamp, I wonder if javacv1.5.9 can do this. If you can give me some references, thank you
We can set the timestamp to whatever we want by calling setTimestamp() before record()
Any ideas? My code is as follows, how can I modify to achieve double speed playback? avutil.av_log_set_level(avutil.AV_LOG_QUIET); FFmpegLogCallback.set(); grabber = new FFmpegFrameGrabber(inputStream, 0); grabber.setVideoOption("vcodec", "copy"); grabber.setFormat("mpeg"); grabber.setPixelFormat(avutil.AV_PIX_FMT_YUV420P); grabber.setVideoCodec(avcodec.AV_CODEC_ID_H264); grabber.setAudioStream(Integer.MAX_VALUE); grabber.start(); recorder = new FFmpegFrameRecorder(pojo.getRtmp(), grabber.getImageWidth(), grabber.getImageHeight()); recorder.setFormat("flv"); recorder.setInterleaved(true); recorder.setVideoOption("preset", "ultrafast"); recorder.setVideoOption("tune", "zerolatency"); recorder.setVideoOption("crf", "25"); recorder.setSampleRate(grabber.getSampleRate()); recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); recorder.setFrameRate(framerate); recorder.setVideoBitrate(grabber.getVideoBitrate()); recorder.setGopSize(50); if (grabber.getVideoCodec() == avcodec.AV_CODEC_ID_H264) { recorder.start(grabber.getFormatContext()); while ((avPacket = grabber.grabPacket()) != null) { recorder.recordPacket(avPacket); } } else { if (grabber.getAudioChannels() > 0) { recorder.setAudioChannels(grabber.getAudioChannels()); recorder.setAudioBitrate(grabber.getAudioBitrate()); recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC); } recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264); recorder.setVideoCodecName("libx264"); recorder.start(); while ((frame = grabber.grab()) != null) { recorder.record(frame); } }
I'd just double the frame rate
OK, how can I change it?
We can easily accomplish this with the ffmpeg program: http://bytedeco.org/javacpp-presets/ffmpeg/apidocs/org/bytedeco/ffmpeg/ffmpeg.html
In the use of javacv1.5.3 version for video code flow code push encountered some problems, maven relies on the following, when the video encoding is h265, the stream in h264 encoding flv format pushed to the streaming media server, there will be the following errors