- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用以下代码将 avcodec_decode_video2()
输出的图像帧提取到 BMP 文件中:
// Convert the image from its native format to RGB
int height = sws_scale(state.sws_ctx,
(uint8_t const * const *)state.frame->data,
state.frame->linesize,
0,
state.video_codec_ctx->height,
state.picture.data,
state.picture.linesize);
// ..... here BMP header initialization goes ...
// Extract pixels
{
int y = 0;
size_t frame_line_size = state.picture.linesize[0];
uint8_t* bmp_data = &bmp->data[0];
uint8_t* picture_data = state.picture.data[0];
while(y < height)
{
memcpy(bmp_data, picture_data, image_line_size);
bmp_data += image_line_size_with_padding;
picture_data += frame_line_size;
++y;
}
}
但它的结果是翻转图像:
任何人都可以帮助我理解我在这里做错了什么吗?
视频流信息:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'testdata/video3.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
title : video3.mp4
encoder : Lavf52.78.3
Duration: 00:00:07.93, start: 0.000000, bitrate: 1467 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 640x320 [PAR 1:1 DAR 2:1], 1331 kb/s, 29.73 fps, 29.73 tbr, 29734 tbn, 59.47 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1(und): Audio: aac, 48000 Hz, stereo, fltp, 127 kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
Video file 'testdata/video3.mp4' has 236 frames.
我有使用 libopencv 的替代代码,它从同一视频文件中给出了正确的图像,但我需要直接使用 ffmpeg 库来达到正确的效果。
最佳答案
下面是工作代码:
// Extract pixels
{
int y = 0;
size_t frame_line_size = state.picture.linesize[0];
uint8_t* bmp_data = &bmp->data[0] + (image_line_size_with_padding * (height - 1));
uint8_t* picture_data = state.picture.data[0];
while(y < height)
{
memcpy(bmp_data, picture_data, image_line_size);
bmp_data -= image_line_size_with_padding;
picture_data += frame_line_size;
++y;
}
}
关于c - 使用 libavformat 和 libswscale 提取视频帧图像给出翻转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790619/
我是 ffmpeg 的新手。当某些媒体有多个音频流时,我遇到了问题。 假设在 MKV 文件中,它具有三个音频流(MP3、WMA 和 WMAPro) 使用以下方法进行解复用时如何更改流索引: AVPac
我正在尝试使用 libavformat/Libavcodec 生成一个视频,其中包含一堆内存中的图像。 有人可以指出我正确的方向吗? 提前致谢。 最佳答案 首先,解释使用 FFmpeg 从图像创建视频
我使用 pip 在 Anaconda 虚拟环境中使用以下命令安装 opencv3。 install opencv-python 我成功安装了它,因为我可以在 pip 列表中看到包。 (olfatf)r
我在运行 pyfmpeg 时遇到问题,当我尝试导入下面的代码时会出现错误: libavformat.so can not found 我该如何解决这个问题,我找不到足够的信息。谢谢.. 操作系统:Ub
libavfromat 中是否有任何机制可以将其控制台输出重定向到自定义日志系统? 例如。我想用我的自定义记录器打印 av_dump_format 的输出。 最佳答案 FFmpeg 将日志输出打印到
我正在使用 libavformat 库在 udp://127.0.0.1:1000 等网络地址流式传输视频。我使用ffplay在网络地址显示接收到的视频流。但是,视频在同一台机器上的 ffplay 出
默认情况下,libavformat 将错误消息写入stderr,例如: 根据比特率估计持续时间,这可能不准确 如何关闭它?或者更好的是,将其通过管道传输到我自己的整洁的日志记录功能? 编辑:将 std
我目前正在尝试读取从服务器发送的小视频文件 为了使用 libavformat 读取文件,您应该调用 av_open_input_file(&avFormatContext, "C:\\path\\to
我正在实现一个管道,我在内存中接收入站 RTP 数据包,但我无法弄清楚如何设置 libavformat 来处理/解包 RTP 数据包。 我有所有必要的底层编解码器的相关信息,但由于它是 h264,我不
我正在使用 libavcodec 和 libavformat 对视频进行编码。我使用 libx264 作为编解码器,使用 flv 作为容器。我选择 flv 是因为我希望能够在视频编码时播放和剪切视频片
我正在使用 libavcodec 将流编码为 h264 并使用 libavformat 将其存储在 mp4 中。生成的容器有一个无效的 header ,可以在 VLC 中播放,但不能在任何其他播放器中
我正在使用 libavformat 的示例 remuxing.c 重新混合实时 rtmp 流我的代码与该示例几乎相同,但它还解码音频和视频,以便使用 SDL 呈现预览,效果很好。 我的应用程序有一个开
我想捕获视频,将其压缩并复用为 mpeg2 ts。使用 ffmpeg 库,所有这些都非常简单,但我想做的不是将其写入文件,而是在缓冲区中捕获 ts 数据包并以其他方式使用此流。有没有一种简单的方法可以
我正在尝试使用 libavformat 编写视频流应用程序。虽然 ffmpeg 和 libavformat 将 96 和 97 作为默认负载类型,但我想指定自定义 RTP 负载类型。我已经知道如何在
我正在尝试使用 libavformat 多路复用器“hlsenc.c”......查看多路复用器的代码,看起来多路复用器通过 AVOption 机制支持参数......例如,hlsenc.c 多路复用
我想使用 FFmpeg 的 libavformat 提供的 RTP 数据结构(例如 libavformat/rtpenc.h 中的 RTPMuxContext),但它们似乎在以下安装中不可用: ffm
我们如何在使用 libavformat 和 libavcodec 库的 C++ 代码中设置 re 标志。我需要在我的 C++ 应用程序中实现类似以下命令的东西 ffmpeg -re -f m4v -i
我正在使用以下代码将 avcodec_decode_video2() 输出的图像帧提取到 BMP 文件中: // Convert the image from its native format to
我正在构建一个 iOS 应用程序,其中需要在后台重新编码和修剪视频。 我不能使用 iOS 库 (AVFoundation),因为它们依赖于 GPU,如果它在后台,则没有应用程序可以访问 GPU。 由于
我正在使用 ffmpeg 的各种 API 在我的应用程序中绘制视频。到目前为止,这非常有效。因为我也有 gif,所以我想循环播放而不必一遍又一遍地加载文件。 在我的代码中,解码器循环如下所示: AV
我是一名优秀的程序员,十分优秀!