gpt4 book ai didi

linux - 仅编码视频 FLV

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:01 36 4
gpt4 key购买 nike

我正在尝试生成仅视频的 FLV 文件,我正在使用:

  1. libx264 + ffmpeg
  2. 30 fps(固定)
  3. 使用 VLC 2.0.1 和 flowplayer 进行播放

播放 FLV 时,帧速率似乎约为每秒 1 帧,以下是我配置 ffmpeg 的方式:

AVOutputFormat* fmtOutput = av_oformat_next(0);
while((0 != fmtOutput) && (0 != strcmp(fmtOutput->name, "flv")))
fmtOutput = av_oformat_next(fmtOutput);
m_pFmtCtxOutput = avformat_alloc_context();
m_pFmtCtxOutput->oformat = fmtOutput;

AVStream* pOutVideoStream= av_new_stream(m_pFmtCtxOutput, pInVideoStream->id);
AVCodec* videoEncoder = avcodec_find_encoder(CODEC_ID_H264);

pOutVideoStream->codec->width = 640;
pOutVideoStream->codec->height = 480;
pOutVideoStream->codec->level = 30;
pOutVideoStream->codec->pix_fmt = PIX_FMT_YUV420P;
pOutVideoStream->codec->bit_rate = 3000000;

pOutVideoStream->cur_dts = 0;
pOutVideoStream->first_dts = 0;
pOutVideoStream->index = 0;
pOutVideoStream->avg_frame_rate = (AVRational){ 30, 1 };
pOutVideoStream->time_base =
pOutVideoStream->codec->time_base= (AVRational){ 1, 30000 };
pOutVideoStream->codec->gop_size = 30;
%% Some specific libx264 settings %%
m_dVideoStep = 1000;// packet dts/pts is incremented by this amount each frame

pOutVideoStream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
avcodec_open(pOutVideoStream->codec, videoEncoder);

生成的文件看起来不错,除了播放帧速率之外。
记住:

  1. pOutVideoStream->avg_frame_rate = (AVRational){ 30, 1 };
  2. pOutVideoStream->time_base = (AVRational){ 1, 30000 };
  3. pOutVideoStream->编解码器->time_base= (AVRational){ 1, 30000 };
  4. 对于每一帧,我将 dts/pts 增加 1000

我在这里做错了什么?为什么文件播放时断断续续(~1 fps)?

任何帮助将不胜感激。

索芬的纳达夫

最佳答案

通过调试器逐步执行 flv muxer 代码,我发现 ffmpeg 实现支持分辨率不高于毫秒的 PTS,即 time_base = (AVRational){ 1, 1000 }。

此外,必须设置“AVStream::r_frame_rate”,以便 flv 复用器正确解析帧速率。

关于linux - 仅编码视频 FLV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9854293/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com