对于使用 x264 压缩的视频中的某些 I 帧,我需要在所有块中使用 I_PCM 模式。我知道这些帧将占用大量空间,但要求它们尽可能忠实于源,并使它们能够非常快速地编码/解码(I_PCM 应该超快且无损)。有没有办法强制 x264 以编程方式执行此操作。我正在使用 libx264 来执行此操作,但我还没有找到在给定帧内指定自定义宏块类型的方法。如果不支持,修改库来实现这一点会有多困难,我应该首先看哪里?
我目前使用的文件在这里,但我得到了一些错误,在测试我的程序.我只是想看看它是否只有这个或所有其他.h264文件失败.那么,有没有其他资源我可以下载(标准).h264样本文件进行测试?
谢谢.
我试图在ffmpeg/libav中将RGB帧转换为YUV420P格式.以下是转换代码以及转换前后的图像.转换后的图像会丢失所有颜色信息,并且尺度也会发生显着变化.有谁知道如何处理这个?我是ffmpeg/libav的新手!
// Did we get a video frame?
if(frameFinished)
{
i++;
sws_scale(img_convert_ctx, (const uint8_t * const *)pFrame->data,
pFrame->linesize, 0, pCodecCtx->height,
pFrameRGB->data, pFrameRGB->linesize);
//==============================================================
AVFrame *pFrameYUV = avcodec_alloc_frame();
// Determine required buffer size and allocate buffer
int numBytes2 = avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
pCodecCtx->height);
uint8_t *buffer = (uint8_t *)av_malloc(numBytes2*sizeof(uint8_t));
avpicture_fill((AVPicture *)pFrameYUV, buffer, PIX_FMT_RGB24,
pCodecCtx->width, pCodecCtx->height);
rgb_to_yuv_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
PIX_FMT_RGB24,
pCodecCtx->width,pCodecCtx->height,
PIX_FMT_RGB24,
SWS_BICUBIC, NULL,NULL,NULL);
sws_scale(rgb_to_yuv_ctx, pFrameRGB->data, pFrameRGB->linesize, 0,
pCodecCtx->height, pFrameYUV->data, pFrameYUV->linesize);
sws_freeContext(rgb_to_yuv_ctx);
SaveFrame(pFrameYUV, pCodecCtx->width, pCodecCtx->height, i);
av_free(buffer);
av_free(pFrameYUV);
}
Run Code Online (Sandbox Code Playgroud)


我正在尝试计算以下视频需要的空间:
704x576尺寸,每秒30帧,运行90分钟长度,每像素24位彩色编码.视频采用未压缩的原始格式.
我不确定我是否正确地做数学运算:
704*576 = 405504 bytes * 30 fps = 12165120 byte = 12.165Mbps
Run Code Online (Sandbox Code Playgroud)
但是,我不明白应该如何合并每像素24位.
如果我指定一个编解码器来重新编码并省略比特率参数,FFMpeg 会做什么?我用一个视频进行了测试,但我想了解
原来的:
Duration: 00:00:10.48, start: 0.000000, bitrate: 17282 kb/s
Run Code Online (Sandbox Code Playgroud)
然后我跑了
ffmpeg.exe -i a.mp4 -c:v h264 c.mp4
Run Code Online (Sandbox Code Playgroud)
结果:
Duration: 00:00:10.50, start: 0.000000, bitrate: 4467 kb/s
Run Code Online (Sandbox Code Playgroud)
它从哪里得到 4467?它是任何视频的标准值还是取决于某些东西?
让我们说对于超过10000个视频的批量处理,使用FFmpeg而不是pyFFmpeg有什么好处吗?
我有一个CUDA VIDEO ENCODING的示例代码,它最初是为windows编写的,在准备Make文件并尝试编译之后,由于HRESULT,LARGE_INTEGER和DWORD数据类型它们是特定于windows的,因此会出错.我该如何克服这个问题?
LARGE_INTEGER m_liUserTime0, m_liKernelTime0;
DWORD m_dwStartTime;
Run Code Online (Sandbox Code Playgroud)
那有什么选择吗?
我正在使用Media Foundation(MFT)的H264编码器.
我从中提取了SPS和PPS,因为我需要它来进行流畅的流式传输.
MSDN表示在每个NALU之前出现的长度字段使用的字节数1, 2, or 4.这都是网络字节顺序.如您所见,缓冲区中的前4个字节是0, 0, 0, 1.如果我们应用任何可能的长度,我们什么都得不到.如果用于长度的字节数是1,则长度为零,如果为2,则长度再次为零.如果是4,那么第一个NALU的长度是1?!而且,这不正确.
有谁知道我应该如何解释这个SPS和PPS连接在一起?

我想创建几个具有不同分辨率但相同音频的输出视频。Afaik 音频编码是一个输出选项。
ffmpeg \
-hwaccel qsv -c:v h264_qsv \
-i <input> \
-filter_complex '[0:a]aformat=channel_layouts=stereo,aresample=async=1,asplit=3[a1][a2][a3];[0:v]vpp_qsv=detail=50:framerate=25,split=3[v1][v2][v3];[v2]vpp_qsv=width=1280[v2o];[v3]vpp_qsv=width=800[v3o]' \
-c:v h264_qsv -c:a aac -b:a 96k -map '[v1]' -map '[a1]' <output> \
-c:v h264_qsv -c:a aac -b:a 96k -map '[v2o]' -map '[a2]' <output> \
-c:v h264_qsv -c:a aac -b:a 96k -map '[v3o]' -map '[a3]' <output>
Run Code Online (Sandbox Code Playgroud)
上面我有两个冗余的音频编码。
如何对音频进行一次编码并将其复制到不同的输出?