gpt4 book ai didi

android - avcodec_encode_video2() 错误 -1 : Could not encode video packet - javacv

转载 作者:行者123 更新时间:2023-12-03 01:56:55 28 4
gpt4 key购买 nike

我想从一组图像中创建一个视频 (mp4),并想为其添加背景声音。可以录制背景声音,也可以使用 android 中的内容选择器浏览文件。
以下代码在以 3gp 格式录制新音频时创建视频。但是,当我浏览音频文件(例如 mp3)时,它会显示此错误并且无法播放录制的视频。

显示的错误是:

org.bytedeco.javacv.FrameRecorder$Exception: avcodec_encode_video2() error -1: Could not encode video packet. :at video_settings$Generate.doInBackground(video_settings.java:298)

video_settings.java:298 处的代码是
                    recorder.record(frame2);

相关代码是:
protected Void doInBackground(Void... arg0) {


try {
FrameGrabber grabber1 = new FFmpegFrameGrabber(paths.get(0));
FrameGrabber grabber2 = new FFmpegFrameGrabber(backgroundSoundPath);
Log.d("hgbj", backgroundSoundPath);
grabber1.start();
grabber2.start();

FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(video, 320,
240, grabber2.getAudioChannels());// 320, 240
recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);//
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
recorder.setFormat("mp4");
recorder.setFrameRate(2);
recorder.setVideoBitrate(10 * 1024 * 1024);

recorder.start();
Frame frame1, frame2;
long timeLength = grabber2.getLengthInTime();
System.out.println("total time = " + timeLength);


for (int i = 0; i < paths.size(); i++) {
// record this frame and then record (numFrames*percentageTime[i]/100) number of frames of the audio.
frame1 = grabber1.grabFrame();
long startTime = System.currentTimeMillis();
recorder.setTimestamp(startTime * 1000);
recorder.record(frame1);
boolean first = true;
// while current time - start time < percentage time * total time / 100: record frame2
long temp = timeLength * percentageTime[i] / 100000 + startTime;
while (System.currentTimeMillis() <= temp) {
frame2 = grabber2.grabFrame();
if (frame2 == null) break;
if (first) {
recorder.setTimestamp(startTime * 1000);
first = false;
}
recorder.record(frame2);
}
if (i < paths.size() - 1) {
grabber1.stop();
grabber1 = new FFmpegFrameGrabber(paths.get(i + 1));
grabber1.start();
}
}

我的问题是:如果它适用于 3gp 录制的文件,为什么它不适用于浏览的 mp3 文件,我应该怎么做才能让它工作?
我尝试更改编解码器、帧高度宽度、视频比特率,但不知道有什么方法可以确定与给定编解码器/格式兼容的比特率等。
我正在将从文件浏览器获得的内容 uri 更改为真实路径,所以这不是问题。

最佳答案

您可以尝试使用其他视频编解码器。
我自己将视频编解码器设置为 AV_CODEC_ID_H264 以解决问题。
所以你可以这样尝试:

recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);

关于android - avcodec_encode_video2() 错误 -1 : Could not encode video packet - javacv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34597324/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com