- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 JavaCV 新手,所以问题可能非常明显。我正在尝试做说起来容易做起来难的任务,即从视频中获取图像和音频,以便我可以开始制作视频编辑器。经过很多困惑和错误之后,我终于得到了结果,但它和错误一样奇怪。图像似乎在 x 方向上被挤压,右侧的额外空间是透明的(因此图像大小与视频大小匹配)。此外,它还有很多额外的透明像素,并且以奇怪的方式呈现出多种颜色。
图像应该是什么样子:https://gofile.io/d/1lQnNd
图像的样子:https://gofile.io/d/kc09G7
这是我的代码:
try {
FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber("C:/Users/mega12345mega/Desktop/Test Files/video.mp4");
frameGrabber.setFormat("mp4");
frameGrabber.start();
int width = frameGrabber.getImageWidth();
int height = frameGrabber.getImageHeight();
System.out.println("width: " + width + ", height: " + height);
Frame frame = frameGrabber.grabImage();
if (frame == null)
throw new Exception("Frame is NULL!");
if (frame.image == null)
throw new Exception("Frame Image is NULL!");
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
if (bi == null)
throw new Exception("bi is NULL!");
Java2DFrameConverter.copy(frame, bi);
ImageIO.write(bi, "png", new File("C:/Users/mega12345mega/Desktop/Test Files/img.png"));
frameGrabber.stop();
frameGrabber.close();
} catch (Exception e) {
throw new Exception("Error Getting Image", e);
}
如果您有兴趣,这里是控制台:
width: 1280, height: 720
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:/Users/mega12345mega/Desktop/Test Files/video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Duration: 00:00:04.95, start: 0.000000, bitrate: 16375 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 16401 kb/s, 60 fps, 60 tbr, 90k tbn, 120 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)
Metadata:
handler_name : SoundHandler
此外,如果我只是执行 frameGrabber.grab()
而不是 frameGrabber.grabImage()
(我相信这会忽略音频),则框架的图像属性为null(这就是 frame.image == null
语句的用途)。我不确定这是否属于一个新问题,但也感谢对此的帮助。
提前致谢!
最佳答案
我想出了如何解决这个问题,但我不确定为什么会这样。 (对此的评论表示赞赏!)
查看this issue后- 虽然问题不同 - 我发现他们在代码中使用了这个:
bi = new Java2DFrameConverter().convert(frame);
我所做的是:
Java2DFrameConverter.copy(frame, bi);
出于某种原因,这解决了问题。
显然,通过解决方案,您也可以删除此行:
new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
关于JavaCV FFmpegFrameGrabber 和 Java2DFrameConverter 创建奇怪的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62185618/
我尝试使用 JavaCV 和 FFmpegFrameGrabber 类显示我的手机通过 WiFi 发送的图像。不幸的是,无论我设置哪种像素格式(尝试从 0 到 65),我都会收到此错误。 Input
我正在使用 javacv读取 mp4 文件和以下代码来查找视频: FFmpegFrameGrabber frameGrabber; [...] frameGrabber.setTimestamp(ti
我有一个使用 javacv 的 FFmpegFrameRecorder 将视频数据流式传输到 RTMP 服务器的应用程序。我想从一个单独的文件中向这个流中添加一些音频——一个我想重复播放的简短的声音片
我在我的项目中使用 JavaCV,它是 FFmpegFrameGrabber。当我从 Eclipse 启动项目时,它可以加载和播放文件,但是当我运行已编译的项目时显示黑屏或仍然是第一帧。有时会出现此错
我是 JavaCV 新手,所以问题可能非常明显。我正在尝试做说起来容易做起来难的任务,即从视频中获取图像和音频,以便我可以开始制作视频编辑器。经过很多困惑和错误之后,我终于得到了结果,但它和错误一样奇
我正在尝试加载我在应用程序其他地方录制的 mp4 视频文件,然后想将图像的地址传递给 jni native opencv 代码以进行一些处理。 FFmpegFrameGrabber grabber;
尝试使用 javaCV、FFFmpegFramGrabber 从视频文件中提取每一帧并保存为 jpg,最终每次都得到相同的帧。 FFmpegFrameGrabber grabber = n
我是 ffmpeg 新手 我发现使用 JavaCV 项目时从 Javafx 与其交互更容易 我成功地从 RTSP 协议(protocol)进行流式传输,并且我想微调我的播放器以获得更好的性能,为此我需
我在 Android 中创建了慢动作视频应用程序,我可以尝试在总视频长度中的任何开始和结束位置设置视频运动速度。 但是启动FFmpegFrameGrabber时出现一些错误。 这是我的代码: priv
我是一名优秀的程序员,十分优秀!