Encoding H264编码器设置

Encoding H264编码器设置,encoding,ffmpeg,h.264,xuggle,mpeg-4,Encoding,Ffmpeg,H.264,Xuggle,Mpeg 4,我正在使用Xugler将一系列图像编码到MP4文件中。我使用以下代码设置IStreamCoder并指定H264编解码器: // only set if codec is H264 Configuration.configure("/usr/local/xuggler/share/ffmpeg/libx264-hq.ffpreset", outStreamCoder); outStreamCoder.setNumPicturesInGroupOfPictures(12);

我正在使用Xugler将一系列图像编码到MP4文件中。我使用以下代码设置
IStreamCoder
并指定H264编解码器:

// only set if codec is H264
Configuration.configure("/usr/local/xuggler/share/ffmpeg/libx264-hq.ffpreset",
            outStreamCoder);

outStreamCoder.setNumPicturesInGroupOfPictures(12);
outStreamCoder.setCodec(codec);
outStreamCoder.setBitRate(videoSettings.getBitrate());
outStreamCoder.setBitRateTolerance(videoSettings.getBitrateTolerance());
outStreamCoder.setPixelType(IPixelFormat.Type.YUV420P);
outStreamCoder.setHeight(videoSettings.getResolution().height);
outStreamCoder.setWidth(videoSettings.getResolution().width);
outStreamCoder.setFlag(IStreamCoder.Flags.FLAG_QSCALE, true);
outStreamCoder.setGlobalQuality(0);
fps = IRational.make((int) videoSettings.getFramerate(), 1);
outStreamCoder.setFrameRate(fps);
outStreamCoder.setTimeBase(IRational.make(fps.getDenominator(), fps.getNumerator()));
这将产生以下输出:

Codec: CODEC_ID_H264
Resolution: 1280x720
Bitrate: 25000
Bitrate Tolerance: 1000
Framerate: 25.0
Codec: CODEC_ID_MPEG4
Resolution: 1280x720
Bitrate: 25000
Bitrate Tolerance: 1000
Framerate: 25.0

现在,当我指定MPEG4编解码器时,我得到以下输出:

Codec: CODEC_ID_H264
Resolution: 1280x720
Bitrate: 25000
Bitrate Tolerance: 1000
Framerate: 25.0
Codec: CODEC_ID_MPEG4
Resolution: 1280x720
Bitrate: 25000
Bitrate Tolerance: 1000
Framerate: 25.0


如您所见,唯一的区别是ICodec类型(MPEG4而不是H264)和预设的使用(Xugler在使用H264编解码器时需要使用预设)。有谁能向我解释一下质量上的巨大差异,并告诉我如何解决这个问题吗?

在视频播放器中打开它,看看分辨率和比特率是多少。大多数玩家会在菜单中的某个位置显示它们。如果播放机显示低比特率,那么这就是你的问题所在。事实证明,我是个白痴,在命令行中使用ffmpeg时会使用比特率。e、 假设2500Kbs,我将比特率设置为2500,但实际上是2500bps。将其乘以1e3得到所需的分辨率。另一方面,为什么Mpeg4编解码器忽略所有比特率设置?不知道。您需要查看代码才能知道原因。可能它有一些最小比特率,如果它看到比它小的东西,它就会恢复到默认值。