- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 libavcodec (ffmpeg) 的项目。我正在使用它以 4:2:2 配置文件、主级别对 MPEG-2 视频进行编码。我在 AVCodecContext 中选择了像素格式 PIX_FMT_YUV422P,但是我得到的视频输出的所有颜色都是错误的,在我看来编码器错误地读取了缓冲区,就好像它认为它是 4:2:0 色度而不是比 4:2:2。这是我的编解码器设置:
//
// AVFormatContext* _avFormatContext previously defined as mpeg2video
//
//
// Set up the video stream for output
//
AVVideoStream* _avVideoStream = av_new_stream(_avFormatContext, 0);
if (!_avVideoStream)
{
err = ccErrWFFFmpegUnableToAllocateStream;
goto bail;
}
_avCodecContext = _avVideoStream->codec;
_avCodecContext->codec_id = CODEC_ID_MPEG2VIDEO;
_avCodecContext->codec_type = CODEC_TYPE_VIDEO;
//
// Set up required parameters
//
_avCodecContext->rc_max_rate = _avCodecContext->rc_min_rate = _avCodecContext->bit_rate = src->_avCodecContext->bit_rate;
_avCodecContext->flags = CODEC_FLAG_INTERLACED_DCT;
_avCodecContext->flags2 = CODEC_FLAG2_INTRA_VLC | CODEC_FLAG2_NON_LINEAR_QUANT;
_avCodecContext->qmin = 1;
_avCodecContext->qmax = 1;
_avCodecContext->rc_buffer_size = _avCodecContext->rc_initial_buffer_occupancy = 2000000;
_avCodecContext->rc_buffer_aggressivity = 0.25;
_avCodecContext->profile = 0;
_avCodecContext->level = 5;
_avCodecContext->width = f->GetWidth(); // f is a private Frame class with width, height properties etc.
_avCodecContext->height = f->GetHeight();
_avCodecContext->time_base.den = 25;
_avCodecContext->time_base.num = 1;
_avCodecContext->gop_size = 12;
_avCodecContext->max_b_frames = 2;
_avCodecContext->pix_fmt = PIX_FMT_YUV422P;
if (_avFormatContext->oformat->flags & AVFMT_GLOBALHEADER)
{
_avCodecContext->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
if (av_set_parameters(_avFormatContext, NULL) < 0)
{
err = ccErrWFFFmpegUnableToSetParameters;
goto bail;
}
//
// Set up video codec for encoding
//
AVCodec* _avCodec = avcodec_find_encoder(_avCodecContext->codec_id);
if (!_avCodec)
{
err = ccErrWFFFmpegUnableToFindCodecForOutput;
goto bail;
}
if (avcodec_open(_avCodecContext, _avCodec) < 0)
{
err = ccErrWFFFmpegUnableToOpenCodecForOutput;
goto bail;
}
可以在 http://ftp.limeboy.com/images/screen_grab.png 查看生成的视频帧的屏幕截图(输入是标准彩条)。
我已经通过在过程中的不同点将调试帧输出为 TGA 格式进行了检查,我可以确认在 libavcodec 对帧进行编码之前一切正常。
非常感谢任何帮助!
干杯,迈克。
最佳答案
好吧,这很尴尬。
实际上,我设置它的方式是正确的。查看 ffmpeg 的源代码,似乎要让它编码 4:2:2 配置文件和 4:2:2 色度,您只需将传入像素格式设置为 PIX_FMT_YUV422P。
问题的原因?我正在虚拟机中的 VLC 上观看视频文件,虚拟机在某个阶段将其视频分辨率从 32 位更改为 16 位。
没错!它改变了它。我没有改变它 - 它做到了!靠自己,你能听到我!!
如果有人浪费时间追查这个非问题,我们深表歉意。
关于encoding - 如何设置 libavcodec 以使用 4 :2:2 chroma when encoding MPEG-2 4:2:2 profile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2453732/
两种符号-cmp +chroma和 -cmp chroma适合我。它们之间有什么区别吗? 我目前的猜测是否定的,因为 all -cmp arguments can be presented in di
我正在尝试查看是否可以通过 VLC 播放 nv12 .yuv 文件。我看到有一个名为 --rawvid-chroma 的开关。 “nv12”似乎不起作用,但“I420”可以。我很好奇 --rawvid
我有一个特定的要求,用户将在其中输入颜色和值。 我正在使用 chroma.js , 比如说 var scale = chroma.scale(['color1','color2','color3'])
我试图弄清楚如何设置根据颜色绘制的纹理正方形的 alpha。我使用的是一张白色背景的红色阿拉巴马州 A 的图片。我希望能够切换它以取出红色并通过 A 显示,并切换它以取出白色并保留 A。我有 2 个纹
我正在使用leaflet我正在生成多边形,然后我使用 chroma.js像这样: function style(feature) { return { weight: 2,
我正在尝试将 chroma.js 合并到我的传单 map 中,以便我可以在分位数、等间隔和 k 均值之间切换,但是域函数的第二个和第三个参数不会改变任何内容 var colorScale = ch
我希望能够产生这种效果,具体来说,颜色爬行/颜色偏移。 这可以通过 OpenGL 着色器实现吗?还是我需要使用其他技术? 我是 OpenGL 新手,我想尝试将此作为入门练习,但是如果有更好的方法来做到
这不是微不足道的。我想创建一个色度键菜单。对于那些不熟悉的人,在删除绿色背景(或任何颜色)并添加特殊背景的视频中也是如此。 我在菜单中有图像作为背景。我想要的是以某种方式设置背景透明的部分,其余部分填
我有一个无损.mov视频,我正在尝试使用 h.265 对 firetv 和其他一些 android 电视设备进行编码。他们支持的规范是: 基于他们的原生 H.265 支持,我正在尝试导出 Main 1
我正在使用 ffmpeg-3.2.4-win32(来自 zeranoe 页面的静态版本和开发版本)来解码我使用 x264 编码器创建的一些 h264 mp4 视频。这些视频有很多静态区域,2d 视频游
我有一个使用 libavcodec (ffmpeg) 的项目。我正在使用它以 4:2:2 配置文件、主级别对 MPEG-2 视频进行编码。我在 AVCodecContext 中选择了像素格式 PIX_
我是一名优秀的程序员,十分优秀!