IplImage ipl = cvLoadImage(path2ImageFile);
int height = ipl.height();
int width = ipl.width();
if(height%2!=0) height = height+1;
if(width%2!=0) width = width+1;
OpenCVFrameConverter.ToIplImage grabberConverter = new OpenCVFrameConverter.ToIplImage();
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(path2OutputFile,width,height);
FrameGrabber audioFileGrabber = new FFmpegFrameGrabber(path2AudioFile);
try
{
audioFileGrabber.start();
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264 );//AV_CODEC_ID_VORBIS
recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);//AV_CODEC_ID_MP3 //AV_CODEC_ID_AAC
recorder.setFormat("mp4");
recorder.setAudioChannels(2);
recorder.start();
Frame frame = null;
//audioFileGrabber.getFrameNumber()
while ((frame = audioFileGrabber.grabFrame())!=null)
{ recorder.record(grabberConverter.convert(ipl));
recorder.record(frame);
}
recorder.stop();
audioFileGrabber.stop();
}
Is there something I am doing wrong? Thank you audioFileGrabber = new FFmpegFrameGrabber(yad.getAudioFilePath());
audioFileGrabber.start();
recorder = new FFmpegFrameRecorder(path2OutputFile,width,height,audioFileGrabber.getAudioChannels());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264 );//AV_CODEC_ID_VORBIS
//recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);//AV_CODEC_ID_MP3 //AV_CODEC_ID_AAC
//recorder.setPixelFormat(PIX_FMT_YUV420P); //PIX_FMT_YUV420P
recorder.setFormat("mp4");
recorder.setFrameRate(35);
recorder.setSampleRate(audioFileGrabber.getSampleRate());
recorder.start();
Frame frame = null;
int curImgNr = 0;
long curTimestamp = 0;
ipl = cvLoadImage(sortedImages.get(curImgNr).getImageFilePath());
recorder.record(grabberConverter.convert(ipl));
while ((frame = audioFileGrabber.grabFrame())!=null)
{
curTimestamp = frame.timestamp;
recorder.record(frame);
if(curTimestamp >= sortedImages.get(curImgNr).getToSecondNr() * 1000000)
{
if(curImgNr < sortedImages.size() - 1)
{
curImgNr++;
ipl = cvLoadImage(sortedImages.get(curImgNr).getImageFilePath());
recorder.record(grabberConverter.convert(ipl));
}
else break;
}
}
recorder.stop(); Since you have only one video frame, record it only once, then you'll have a file that is mostly audio only.
2020年5月11日(月) 7:52 andrei paraschiv <paraschi...@gmail.com>:
audioFileGrabber = new FFmpegFrameGrabber(yad.getAudioFilePath());
audioFileGrabber.start();
recorder = new FFmpegFrameRecorder(path2OutputFile,width,height,audioFileGrabber.getAudioChannels());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264 );//AV_CODEC_ID_VORBIS
//recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);//AV_CODEC_ID_MP3 //AV_CODEC_ID_AAC
//recorder.setPixelFormat(PIX_FMT_YUV420P); //PIX_FMT_YUV420P
recorder.setFormat("mp4");
recorder.setFrameRate(35);
recorder.setSampleRate(audioFileGrabber.getSampleRate());
recorder.start();
Frame frame = null;
int curImgNr = 0;
long curTimestamp = 0;
ipl = cvLoadImage(sortedImages.get(curImgNr).getImageFilePath());
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
while ((frame = audioFileGrabber.grabFrame())!=null)
{
curTimestamp = frame.timestamp;
recorder.record(frame);
if(curTimestamp >= sortedImages.get(curImgNr).getToSecondNr() * 1000000)
{
recorder.record(grabberConverter.convert(ipl));
if(curImgNr < sortedImages.size() - 1)
{
curImgNr++;
ipl = cvLoadImage(sortedImages.get(curImgNr).getImageFilePath());
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
}
else break;
}
}
recorder.stop();
audioFileGrabber.stop();
audioFileGrabber.release();curTimestamp = frame.timestamp;--
---
You received this message because you are subscribed to the Google Groups "javacv" group.
To unsubscribe from this group and stop receiving emails from it, send an email to javacv+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/javacv/26c0b60b-f42d-4625-8873-00e0869371d7%40googlegroups.com.
audioFileGrabber = new FFmpegFrameGrabber(yad.getAudioFilePath());
audioFileGrabber.start();
recorder = new FFmpegFrameRecorder(path2OutputFile,width,height,audioFileGrabber.getAudioChannels());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264 );//AV_CODEC_ID_VORBIS
//recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);//AV_CODEC_ID_MP3 //AV_CODEC_ID_AAC
//recorder.setPixelFormat(PIX_FMT_YUV420P); //PIX_FMT_YUV420P
recorder.setFormat("mp4");
recorder.setFrameRate(35);
recorder.setSampleRate(audioFileGrabber.getSampleRate());
recorder.start(); Yes, try to increase the frame rate to 1 FPS or above.
2020年5月18日(月) 11:00 andrei paraschiv <paraschi...@gmail.com>:
so can I fix it somehow?--
On Monday, May 18, 2020 at 4:39:21 AM UTC+3, Samuel Audet wrote:Ok, so it does work. It's just your player that doesn't support such low
frame rates. Anything less than 1 FPS is probably not a good idea...
On 5/18/20 10:37 AM, andrei paraschiv wrote:
> Something strange is going on.
> In VLC in works. In the default windows media player it does not. It is
> all black. I am running windows 10 Pro.
---
You received this message because you are subscribed to the Google Groups "javacv" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jav...@googlegroups.com.
audioFileGrabber = new FFmpegFrameGrabber(yad.getAudioFilePath());
audioFileGrabber.start();
recorder = new FFmpegFrameRecorder(path2OutputFile,width,height,audioFileGrabber.getAudioChannels());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264 );//AV_CODEC_ID_VORBIS
//recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);//AV_CODEC_ID_MP3 //AV_CODEC_ID_AAC
//recorder.setPixelFormat(PIX_FMT_YUV420P); //PIX_FMT_YUV420P
recorder.setFormat("mp4");
recorder.setVideoQuality(0);
recorder.setFrameRate(35);
recorder.setSampleRate(audioFileGrabber.getSampleRate());
recorder.start();
Frame frame = null;
int curImgNr = 0;
long curTimestamp = 0;
ipl = cvLoadImage(sortedImages.get(curImgNr).getImageFilePath());
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
while ((frame = audioFileGrabber.grabFrame())!=null)
{
curTimestamp = frame.timestamp;
recorder.record(frame);
if(curTimestamp >= sortedImages.get(curImgNr).getToSecondNr() * 1000000)
{
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
if(curImgNr < sortedImages.size() - 1)
{
curImgNr++;
ipl = cvLoadImage(sortedImages.get(curImgNr).getImageFilePath());
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
}
else break;
}
}
recorder.stop();
recorder.release();
audioFileGrabber.stop();
audioFileGrabber.release();--
---
You received this message because you are subscribed to the Google Groups "javacv" group.
To unsubscribe from this group and stop receiving emails from it, send an email to javacv+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/javacv/1bae5468-93f0-4cd0-87e2-435f530fd145%40googlegroups.com.
audioFileGrabber = new FFmpegFrameGrabber(yad.getAudioFilePath());
audioFileGrabber.start();
recorder = new FFmpegFrameRecorder(path2OutputFile,width,height,audioFileGrabber.getAudioChannels());
recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264 );//AV_CODEC_ID_VORBIS
//recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);//AV_CODEC_ID_MP3 //AV_CODEC_ID_AAC
//recorder.setPixelFormat(PIX_FMT_YUV420P); //PIX_FMT_YUV420P
recorder.setFormat("mp4");
recorder.setVideoQuality(0);
recorder.setFrameRate(maxFrameRate);
recorder.setSampleRate(audioFileGrabber.getSampleRate());
recorder.start();
Frame frame = null;
int curImgNr = 0,picFramesInsertedSinceLastClean=0;
long curTimestamp = 0;
long lastPicInsertTimestamp = 0;
ipl = cvLoadImage(sortedImages.get(curImgNr).getImageFilePath());
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
picFramesInsertedSinceLastClean++;
while ((frame = audioFileGrabber.grabFrame())!=null)
{
curTimestamp = frame.timestamp;
recorder.record(frame);
if(curTimestamp >= sortedImages.get(curImgNr).getToSecondNr() * 1000000)
{
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
lastPicInsertTimestamp = curTimestamp;
picFramesInsertedSinceLastClean++;
if(curImgNr < sortedImages.size() - 1)
{
curImgNr++;
ipl = cvLoadImage(sortedImages.get(curImgNr).getImageFilePath());
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
lastPicInsertTimestamp = curTimestamp;
picFramesInsertedSinceLastClean++;
}
else break;
}
if(curTimestamp >= lastPicInsertTimestamp + (1000000 / maxFrameRate))//1 sec/maxnrframes passed
{
if(picFramesInsertedSinceLastClean < maxFrameRate)
{
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
lastPicInsertTimestamp = curTimestamp;
picFramesInsertedSinceLastClean++;
}
else
{
picFramesInsertedSinceLastClean = 0;
}
}
}
if(curTimestamp < sortedImages.get(curImgNr).getToSecondNr() * 1000000 && picFramesInsertedSinceLastClean < maxFrameRate)
{
recorder.setTimestamp(curTimestamp);
recorder.record(grabberConverter.convert(ipl));
}
recorder.stop();
recorder.release();
audioFileGrabber.stop();
audioFileGrabber.release();Yes, something like that. Make sure it works at standard 30 FPS with setFrameRate(30) without calling setTimestamp(). If that doesn't work, the problem is somewhere else.
2020年5月19日(火) 23:35 andrei paraschiv <paraschi...@gmail.com>:
To unsubscribe from this group and stop receiving emails from it, send an email to jav...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to javacv+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/javacv/12274510-ea06-4ea5-aafe-8cd548a692b1%40googlegroups.com.