ffmpeg视频编码h264后用播放器播放时没有进度条

按照原来视频设置了上下文参数,输出的视频文件大了十倍(yuv-h264),而且不知道怎么把视频时长给带上导致播放时没有显示进度条

  1. 原来视频的上下文参数是啥? 原视频是否有时长呢
  2. 编码后视频的封装是啥?
  3. ffprobe探测一下视频各种信息贴出来看一下,原视频以及处理后的视频
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/763696
  • 除此之外, 这篇博客: ffmpeg 教程学习笔记(1)中的 2.定义一个全局变量,用于存储重采样的标准(属性) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • AVFrame wanted_frame;
    
  • 您还可以看一下 夏曹俊老师的FFmpeg 4.3 音视频基础到工程应用课程中的 章节总结和ffmpeg代码调试设置小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以通过以下步骤解决该问题:

    1. 针对视频文件大小变大的问题,可以对编码器的参数进行调整,以达到更好的压缩效果。具体来说,在使用FFmpeg的H.264编码器时,可以通过修改比特率、量化参数、码率控制模式等方式来控制输出视频的大小。

    2. 对于进度条显示的问题,需要将视频的时长信息写入文件的元数据中。可以通过FFmpeg的AVFormatContext结构体中的duration字段来获取原视频的时长,并将其写入到编码后的文件中。代码示例如下:

    // 获取原视频时长
    AVFormatContext *input_fmt_ctx = avformat_alloc_context();
    avformat_open_input(&input_fmt_ctx, "input.mp4", NULL, NULL);
    avformat_find_stream_info(input_fmt_ctx, NULL);
    int64_t duration = input_fmt_ctx->duration;
    
    // 设置输出文件的时长信息
    AVFormatContext *output_fmt_ctx = avformat_alloc_context();
    ...
    output_fmt_ctx->duration = duration;
    ...
    
    1. 在播放器中显示进度条的具体实现方式,与使用的播放器有关。通常来说,现代的视频播放器都会自动读取文件的元数据,并在播放界面中显示进度条。如果播放器未能正确显示进度条,则可能需要更新播放器版本或检查播放器的配置参数。

用writetail那个函数就能显示进度条了,不执行那个函数就没有进度和时长信息