- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个相机将图片发送到回调函数,我想使用 FFmpeg
用这些图片制作一部电影。我遵循了 decoding_encoding
示例 here但我不确定如何使用 got_output
刷新编码器并获取延迟帧。
或者
我的视频捕获程序可能会运行数小时,所以我担心这些延迟帧在内存消耗方面的工作原理,如果它们堆积在那里直到刷新,这可能会占用我所有的内存。
这是示例执行的编码,它为 1 秒的视频生成 25 个虚拟 Frames
,然后,最后,它循环通过 avcodec_encode_video2()
寻找延迟帧的 got_output
:
///// Prepare the Frame, CodecContext and some aditional logic.....
/* encode 1 second of video */
for (i = 0; i < 25; i++) {
av_init_packet(&pkt);
pkt.data = NULL; // packet data will be allocated by the encoder
pkt.size = 0;
fflush(stdout);
/* prepare a dummy image */
/* Y */
for (y = 0; y < c->height; y++) {
for (x = 0; x < c->width; x++) {
frame->data[0][y * frame->linesize[0] + x] = x + y + i * 3;
}
}
/* Cb and Cr */
for (y = 0; y < c->height/2; y++) {
for (x = 0; x < c->width/2; x++) {
frame->data[1][y * frame->linesize[1] + x] = 128 + y + i * 2;
frame->data[2][y * frame->linesize[2] + x] = 64 + x + i * 5;
}
}
frame->pts = i;
/* encode the image */
ret = avcodec_encode_video2(c, &pkt, frame, &got_output);
if (ret < 0) {
fprintf(stderr, "Error encoding frame\n");
exit(1);
}
if (got_output) {
printf("Write frame %3d (size=%5d)\n", i, pkt.size);
fwrite(pkt.data, 1, pkt.size, f);
av_free_packet(&pkt);
}
}
/* get the delayed frames */
for (got_output = 1; got_output; i++) {
fflush(stdout);
ret = avcodec_encode_video2(c, &pkt, NULL, &got_output);
if (ret < 0) {
fprintf(stderr, "Error encoding frame\n");
exit(1);
}
if (got_output) {
printf("Write frame %3d (size=%5d)\n", i, pkt.size);
fwrite(pkt.data, 1, pkt.size, f);
av_free_packet(&pkt);
}
}
///// Closes the file and finishes.....
最佳答案
延迟是固定的,因此您的编码器延迟永远不会超过 delay
帧。因此,内存消耗不会随着记录长度的增加而增加,因此没有问题,导致正确答案 1:仅在编码结束时刷新。
关于video - 正确使用avcodec_encode_video2() Flush,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35216052/
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我正在尝试借助 libavcodec 对视频进行转码。在转码大视频文件(一小时或更长时间)时,我在 avcodec_encode_video 中出现大量内存泄漏。我试过调试它,但是对于不同的视频文件,
我正在尝试使用 libavcodec 将视频编码为 H264 ffmpeg::avcodec_encode_video(codec,output,size,avframe); 返回一个错误,我没有正确
我正在尝试使用 ffmpeg 库将一系列 .jpg 文件编码为视频,但我似乎无法对帧进行编码。 (我必须使用 ffmpeg 库,并且在我的情况下不能从命令行使用 ffmpeg。) 除了我尝试将 JPG
我是一名优秀的程序员,十分优秀!