编码器的参数设置

2023-11-07

//编码器参数设置
//sps/pps
enc_ctx->profile = FF_PROFILE_H264_HIGH_444;
enc_ctx->level = 50; //表示LEVEL是5.0
enc_ctx->width = 640;
enc_ctx->height = 480;
enc_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
enc_ctx->gop_size = 250;
enc_ctx->bit_rate = 600000;//600kbps
enc_ctx->time_base = (AVRational){1, 25};
enc_ctx->framerate = (AVRational){25, 1};//帧率
if(octx->oformat->flags & AVFMT_GLOBALHEADER)
{
	printf("set video GLOBAL_HEADER\n");
	enc_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
}//这octx是输出上下文,有些封装格式希望pps,sps和关键帧分离。设置AV_CODEC_FLAG_GLOBAL_HEADER
代表不会在每个关键帧前加入pps和sps了。会将pps和sps写入到extradata字节当中,当播放端解码器解码时,
从extradata中读取pps和sps然后加入到每个关键帧中。不同的封装格式要求不同,这个if代码块检测你设置的封装格式如"flv"是否需要设置分离。 
//解释一下pps和sps,它们对解码至关重要,如果找不到他们,那么解码就会
失败,因为它们存储的是编码器设置的参数,比如视频的heigth,width等,音频的采样率,通道数等。详见另一篇文章:[h264中的pps和sps](https://blog.csdn.net/weixin_43466192/article/details/121465618)

enc_ctx->keyint_min = 25;//option 由于gop过大,当运动变化过大时,允许自动多插入一个i帧,但两个i帧相差不能小于25帧;
enc_ctx->max_b_frames = 3;//option连续的B帧的数量,一般设置不超过三帧,这里设置三帧
enc_ctx->has_b_frames = 1;//option启动B帧
enc_ctx->refs = 3;//option参考帧的数量,解码器的缓冲区中可以存放的参考帧的数量。
option的选项如果不设置的话会使用默认值,会根据其他设置的值自动设置,这两个也是option选项。

两个预设值preset,tune
因为x264参数众多,且各个参数配合紧密,x264编码器专门提供了预设值,预设值的设置相当于模式的选择,设定一个预设值,代表着使用这个模式,那么这么模式会有默认的很多参数设置。后面再手动设置的参数会覆盖模式里对应的参数。因此这两个值要在其他值之前设置,除此之外tune要在preset后。
preset的值从高到低有:

ultrafast、superfast、veryfast、faster、fast、medium(默认值)、slow、slower、veryslow、placebo

越快的编码速度,表明越低的压缩效率,码率也就越大。
注意:编码很考验cpu性能,提升编码速度能直接减少对cpu的消耗,同时还能显著减少延迟,但会牺牲画面质量。
tune的值有:

animation: 动画
grain: 需要保留大量的grain时用;
stillimage: 静态图像编码时使用;
psnr:为提高psnr做了优化的参数;
ssim: 为提高ssim做了优化的参数; fastdecode: 可以快速解码的参数;
zerolatency:零延迟,用在需要非常低的延迟的情况下,比如电视电话会议的编码。能明显减少延时,但牺牲画面质量。

turne主要是关注画质和视觉感受,如果视频有对应的选项和需求可以使用,否则建议不使用如tune grain是为高比特率的编码而设计的。这两个预设值在x264中的源码在文末尾有贴上。

可以通过x264 --fullhelp查看preset,profile,tune这些预设分别启用了不同的编码工具,启用不同的编码工具,会改变编码效率,因此如果目标码率设置足够的值,则不会降低画质。
补充:
编码器帧相关参数 :
no-deblock/deblock //去块化 解码后播放发现块比较多,像马赛克,是因为宏块预测,可以设置deblock用滤波器进行平滑处理。(no-deblock不适用滤波器)
no-cabac/cabac //不使用/使用熵编码 使用熵编码后压缩比比较高。
流控:
Qp关注量化器,与bitrate/crf互斥
bitrate,关注码流,间接控制质量
crf,关注质量,默认是23,数值越低质量越好
Partitions p8x8,b8x8,i8x8,i4x4 //i,b,p帧的宏块大小

下面这个网站会有更详细的介绍以上参数,并给出x264未设置options参数时,默认是多少。

http://www.chaneru.com/Roku/HLS/X264_Settings.htm

x264的各个参数

下面这个网站会介绍这些参数在ffmpeg命令行中对应的名字是什么。

https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping

profile设置参考
level设置参考,可以向下兼容

哎呦喂ヾ(✿゚▽゚)ノ~路长馆小,雪轻帘薄,酒热乎,这位爷~您ヾ(✿゚▽゚)ノ~ 里面坐~
本公众号专注分享C++,ffmpeg,opencv等相关音视频知识
webrtc,udp,tcp,rtsp,rtmp,srt/nginx+rtmp等流媒体协议和服务器
同时也会有大厂音视频技术专家不定期直播分享…
国人开发流媒体srs服务器,及yangrtc(国人版的webrtc)协议新动向
偶尔分享下程序员梦呓碎碎念(๑•॒̀ ູ॒•́๑)啦啦啦
目前刚刚开通,接受读者的优质投稿…
鉴于国内音视频圈子小,起步晚,以致分享少,门槛高,特开通分享,一起扇动这阵风吧!
微信扫描下方二维码,关注公众号,赶快进入音视频开发者社区吧!

附录:
x264源码中base.c文件中

static int x264_param_apply_preset( x264_param_t *param, const char *preset )
{
    char *end;
    int i = strtol( preset, &end, 10 );
    if( *end == 0 && i >= 0 && i < sizeof(x264_preset_names)/sizeof(*x264_preset_names)-1 )
        preset = x264_preset_names[i];
 
    /*
     * 下面的这些参数设置会对编码质量和编码速度造成极大影响,因此,优化时首先考虑优化下面的参数
     */
 
    /* 极快(最快)
     */
    if( !strcasecmp( preset, "ultrafast" ) )
    {
        /* 参考帧数量设置为1
         */
        param->i_frame_reference = 1;
        /* 场景切换设置阈值
         */
        param->i_scenecut_threshold = 0;
        /* 不进行去方块滤波
         */
        param->b_deblocking_filter = 0;
        /* 不使用cabac
         */
        param->b_cabac = 0;
        /* 没有B帧
         */
        param->i_bframe = 0;
        /* 设置intra划分的partition,这里应该是不进行划分,只使用16x16
         */
        param->analyse.intra = 0;
        /* 设置inter划分的partition,这里应该是不进行划分,只使用16x16
         */
        param->analyse.inter = 0;
        /* 不使用8x8的的DCT变换
         */
        param->analyse.b_transform_8x8 = 0;
        /* 运动估计:DIA
         */
        param->analyse.i_me_method = X264_ME_DIA;
        /* 亚像素运动估计精度:0,表示只进行整像素运动估计
         */
        param->analyse.i_subpel_refine = 0;
        /* 关闭自适应量化
         */
        param->rc.i_aq_mode = 0;
        /* 禁止每个宏块的分区拥有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 不使用trellis优化
         */
        param->analyse.i_trellis = 0;
        /* 自适应B帧判断的概率(从-100到100)
         */
        param->i_bframe_adaptive = X264_B_ADAPT_NONE;
        /* 不使用mbtree
         */
        param->rc.b_mb_tree = 0;
        /* 权重预测中,P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
        /* 显式的B帧权重预测
         */
        param->analyse.b_weighted_bipred = 0;
        /* mbtree前向预测的帧的数量
         */
        param->rc.i_lookahead = 0;
    }
    /* 超级快
     */
    else if( !strcasecmp( preset, "superfast" ) )
    {
        /* inter划分:4x4和8x8
         */
        param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
        /* 运动估计:DIA
         */
        param->analyse.i_me_method = X264_ME_DIA;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 1;
        /* 参考帧数量:1
         */
        param->i_frame_reference = 1;
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 关闭trellis优化
         */
        param->analyse.i_trellis = 0;
        /* 关闭mbtree
         */
        param->rc.b_mb_tree = 0;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:0
         */
        param->rc.i_lookahead = 0;
    }
    /* 非常快
     */
    else if( !strcasecmp( preset, "veryfast" ) )
    {
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 2;
        /* 参考帧数量:1
         */
        param->i_frame_reference = 1;
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 关闭trellis优化
         */
        param->analyse.i_trellis = 0;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:10
         */
        param->rc.i_lookahead = 10;
    }
    /* 很快
     */
    else if( !strcasecmp( preset, "faster" ) )
    {
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 参考帧数量:2
         */
        param->i_frame_reference = 2;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 4;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:20
         */
        param->rc.i_lookahead = 20;
    }
    /* 快
     */
    else if( !strcasecmp( preset, "fast" ) )
    {
        /* 参考帧数量:2
         */
        param->i_frame_reference = 2;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 6;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:30
         */
        param->rc.i_lookahead = 30;
    }
    /* 正常:在速度与质量之间平衡
     */
    else if( !strcasecmp( preset, "medium" ) )
    {
        // 使用默认的参数
        /* Default is medium */
    }
    /* 慢
     */
    else if( !strcasecmp( preset, "slow" ) )
    {
        param->analyse.i_subpel_refine = 8;
        param->i_frame_reference = 5;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.i_trellis = 2;
        param->rc.i_lookahead = 50;
    }
    /* 很慢
     */
    else if( !strcasecmp( preset, "slower" ) )
    {
        param->analyse.i_me_method = X264_ME_UMH;
        param->analyse.i_subpel_refine = 9;
        param->i_frame_reference = 8;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.i_trellis = 2;
        param->rc.i_lookahead = 60;
    }
    /* 非常慢
     */
    else if( !strcasecmp( preset, "veryslow" ) )
    {
        param->analyse.i_me_method = X264_ME_UMH;
        param->analyse.i_subpel_refine = 10;
        param->analyse.i_me_range = 24;
        param->i_frame_reference = 16;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.i_trellis = 2;
        param->i_bframe = 8;
        param->rc.i_lookahead = 60;
    }
    /* 极慢
     */
    else if( !strcasecmp( preset, "placebo" ) )
    {
        param->analyse.i_me_method = X264_ME_TESA;
        param->analyse.i_subpel_refine = 11;
        param->analyse.i_me_range = 24;
        param->i_frame_reference = 16;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.b_fast_pskip = 0;
        param->analyse.i_trellis = 2;
        param->i_bframe = 16;
        param->rc.i_lookahead = 60;
    }
    else
    {
        x264_log( NULL, X264_LOG_ERROR, "invalid preset '%s'\n", preset );
        return -1;
    }
    return 0;
}

static int x264_param_apply_preset( x264_param_t *param, const char *preset )
{
    char *end;
    int i = strtol( preset, &end, 10 );
    if( *end == 0 && i >= 0 && i < sizeof(x264_preset_names)/sizeof(*x264_preset_names)-1 )
        preset = x264_preset_names[i];
 
    /*
     * 下面的这些参数设置会对编码质量和编码速度造成极大影响,因此,优化时首先考虑优化下面的参数
     */
 
    /* 极快(最快)
     */
    if( !strcasecmp( preset, "ultrafast" ) )
    {
        /* 参考帧数量设置为1
         */
        param->i_frame_reference = 1;
        /* 场景切换设置阈值
         */
        param->i_scenecut_threshold = 0;
        /* 不进行去方块滤波
         */
        param->b_deblocking_filter = 0;
        /* 不使用cabac
         */
        param->b_cabac = 0;
        /* 没有B帧
         */
        param->i_bframe = 0;
        /* 设置intra划分的partition,这里应该是不进行划分,只使用16x16
         */
        param->analyse.intra = 0;
        /* 设置inter划分的partition,这里应该是不进行划分,只使用16x16
         */
        param->analyse.inter = 0;
        /* 不使用8x8的的DCT变换
         */
        param->analyse.b_transform_8x8 = 0;
        /* 运动估计:DIA
         */
        param->analyse.i_me_method = X264_ME_DIA;
        /* 亚像素运动估计精度:0,表示只进行整像素运动估计
         */
        param->analyse.i_subpel_refine = 0;
        /* 关闭自适应量化
         */
        param->rc.i_aq_mode = 0;
        /* 禁止每个宏块的分区拥有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 不使用trellis优化
         */
        param->analyse.i_trellis = 0;
        /* 自适应B帧判断的概率(从-100到100)
         */
        param->i_bframe_adaptive = X264_B_ADAPT_NONE;
        /* 不使用mbtree
         */
        param->rc.b_mb_tree = 0;
        /* 权重预测中,P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
        /* 显式的B帧权重预测
         */
        param->analyse.b_weighted_bipred = 0;
        /* mbtree前向预测的帧的数量
         */
        param->rc.i_lookahead = 0;
    }
    /* 超级快
     */
    else if( !strcasecmp( preset, "superfast" ) )
    {
        /* inter划分:4x4和8x8
         */
        param->analyse.inter = X264_ANALYSE_I8x8|X264_ANALYSE_I4x4;
        /* 运动估计:DIA
         */
        param->analyse.i_me_method = X264_ME_DIA;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 1;
        /* 参考帧数量:1
         */
        param->i_frame_reference = 1;
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 关闭trellis优化
         */
        param->analyse.i_trellis = 0;
        /* 关闭mbtree
         */
        param->rc.b_mb_tree = 0;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:0
         */
        param->rc.i_lookahead = 0;
    }
    /* 非常快
     */
    else if( !strcasecmp( preset, "veryfast" ) )
    {
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 2;
        /* 参考帧数量:1
         */
        param->i_frame_reference = 1;
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 关闭trellis优化
         */
        param->analyse.i_trellis = 0;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:10
         */
        param->rc.i_lookahead = 10;
    }
    /* 很快
     */
    else if( !strcasecmp( preset, "faster" ) )
    {
        /* 不允许每个宏块的分区有自己的参考编号
         */
        param->analyse.b_mixed_references = 0;
        /* 参考帧数量:2
         */
        param->i_frame_reference = 2;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 4;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:20
         */
        param->rc.i_lookahead = 20;
    }
    /* 快
     */
    else if( !strcasecmp( preset, "fast" ) )
    {
        /* 参考帧数量:2
         */
        param->i_frame_reference = 2;
        /* 亚像素运动估计精度
         */
        param->analyse.i_subpel_refine = 6;
        /* P帧的权值
         */
        param->analyse.i_weighted_pred = X264_WEIGHTP_SIMPLE;
        /* mbtree向前预测的帧数:30
         */
        param->rc.i_lookahead = 30;
    }
    /* 正常:在速度与质量之间平衡
     */
    else if( !strcasecmp( preset, "medium" ) )
    {
        // 使用默认的参数
        /* Default is medium */
    }
    /* 慢
     */
    else if( !strcasecmp( preset, "slow" ) )
    {
        param->analyse.i_subpel_refine = 8;
        param->i_frame_reference = 5;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.i_trellis = 2;
        param->rc.i_lookahead = 50;
    }
    /* 很慢
     */
    else if( !strcasecmp( preset, "slower" ) )
    {
        param->analyse.i_me_method = X264_ME_UMH;
        param->analyse.i_subpel_refine = 9;
        param->i_frame_reference = 8;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.i_trellis = 2;
        param->rc.i_lookahead = 60;
    }
    /* 非常慢
     */
    else if( !strcasecmp( preset, "veryslow" ) )
    {
        param->analyse.i_me_method = X264_ME_UMH;
        param->analyse.i_subpel_refine = 10;
        param->analyse.i_me_range = 24;
        param->i_frame_reference = 16;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.i_trellis = 2;
        param->i_bframe = 8;
        param->rc.i_lookahead = 60;
    }
    /* 极慢
     */
    else if( !strcasecmp( preset, "placebo" ) )
    {
        param->analyse.i_me_method = X264_ME_TESA;
        param->analyse.i_subpel_refine = 11;
        param->analyse.i_me_range = 24;
        param->i_frame_reference = 16;
        param->i_bframe_adaptive = X264_B_ADAPT_TRELLIS;
        param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_AUTO;
        param->analyse.inter |= X264_ANALYSE_PSUB8x8;
        param->analyse.b_fast_pskip = 0;
        param->analyse.i_trellis = 2;
        param->i_bframe = 16;
        param->rc.i_lookahead = 60;
    }
    else
    {
        x264_log( NULL, X264_LOG_ERROR, "invalid preset '%s'\n", preset );
        return -1;
    }
    return 0;
}

参考:https://blog.csdn.net/NB_vol_1/article/details/78363559?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163600570616780264056029%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163600570616780264056029&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-5-78363559.pc_search_result_cache&utm_term=preset%2Ctune&spm=1018.2226.3001.4187

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编码器的参数设置 的相关文章

  • 在 MacOS 终端上运行 ffmpeg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我对 MacOS 相当陌生 我发现使用终端来获取信息并不容易ffmpeg和我在 Window 上一样正常运行 我有 ffmpeg 二进制文件ffmpe
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

    我已经查看了很多问题 但仍然无法完全弄清楚 我正在使用 PyQt 并且希望能够运行ffmpeg i file mp4 file avi并获取流式输出 以便我可以创建进度条 我看过这些问题 ffmpeg可以显示进度条吗 https stack
  • Ffmpeg 无法正确转换为 ogg [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在使用 ffmpeg 在我的网站上转换音频和视频 Ffmpeg 可以正确转换为其他格式 如 mp3 mp4 等 但无法正确转换为 ogg 虽然 f
  • 致命错误:libavcodec/avcodec.h 没有这样的文件或目录编译终止

    我正在尝试使用 gcc 执行tutorial01 c 并且 gcc 和tutorial01 c 以及 libavcodec 和 libavformat 及其关联文件位于同一文件夹中 它给了我这个错误 致命错误 libavcodec avco
  • 使用 FFMPEG 添加覆盖并最少重新编码

    FFMPEG 对于剪切视频的一部分非常有用 而无需重新编码视频 我知道也可以使用 FFMPEG 添加叠加图像到视频的某个部分 例如从 10 秒到 20 秒 我的问题是 如果我对图像进行叠加 整个视频是否会因此而重新编码 或者只对相关的持续时
  • 如何在服务器上使用 ffmpeg 从 WebRTC 流获取音频和视频

    我正在尝试从 WebRTC 流获取音频和视频 并在 ubuntu 服务器上使用 ffmpeg 处理它 转码或转储 我天真地期望它能简单地解释 WebRTC 提供的 sdp 但我错了 我怀疑 ffmpeg 无法发回答案 sdp 必须手动完成
  • Xuggler 未转换 .webm 文件?

    我只是尝试使用 Xuggler 将 mov 文件转换为 webm 这应该可以工作 因为 FFMPEG 支持 webm 文件 这是我的代码 IMediaReader reader ToolFactory makeReader home use
  • FFmpeg av_read_frame 无法正确读取帧?

    好吧 我已经下载了一些 yuv 格式的原始 UHD 序列 并在 mp4 容器中使用 ffmpeg 对其进行编码 h264 4 4 4 100 质量 25fps 当我使用 ffprobe 找出编码了多少帧时 我得到 600 所以这是 24 秒
  • id3 图像编辑后播放 mp3 时遇到问题

    由于硬件限制 我们生产的软件试图确保导入到其库中的任何音频文件 准备复制到硬件上 都是可接受的比特率 最近 我们开始使用 FFmpeg 将许多不同的音频类型转换为 mp3 以便在我们的硬件上导入和使用它们 虽然转换工作正常并且 mp3 文件
  • 将循环视频添加到声音 ffmpeg

    我开始使用 ffmpeg 这是我的第一个疑问 我有一个声音文件 example mp3 持续时间 1 分钟 我想添加一个循环视频 example mp4 x 秒持续时间 在这种情况下 我想生成 1 分钟的 mp4 视频并循环该视频 3 次
  • 使用 ffmpeg 库以可变帧率模式将一系列图像(cv::Mat)保存到 mp4 文件,如何设置 pts?

    在C 代码中 我可以正确保存一系列图像 opencv的cv Mat 到 mp4 文件 使用ffmpeg图书馆 请参阅此处的问题和答案 当我尝试将多个 RGB 数据保存到 output mp4 文件时 avformat write heade
  • ffmpeg 找不到 vcodec h264

    我是 ffmpeg 的新手 正在 Windows 上使用它 我尝试使用 H 264 vcodec h264 转换 avi 文件 收到此错误 未知编码器 h264 使用 acodec 的 mp3 也会出现 未知编码器 错误 有人可以帮我解决这
  • 输入文件列表以与 Node.js 模块 Fluent-ffmpeg 连接

    版本信息 流利的 ffmpeg 版本 2 1 2 ffmpeg版本 3 4 2 操作系统 Windows 10 要重现的代码 ffmpeg C path to list txt mergeToFile C path to out mp4 C
  • 在 Python 中使用音频流 RTMP 通过管道和 OpenCV 到 FFmpeg

    我正在尝试使用音频流式传输 FFmpeg 我将在下面展示我的代码 导入模块 import subprocess as sp 创建变量 rtmpUrl rtmp a rtmp youtube com live2 key camera path
  • 使用 Java FFmpeg 包装器,还是简单地使用 Java 运行时来执行 FFmpeg?

    我对 Java 还很陌生 需要编写一个程序来监听视频转换指令 并在新指令到达时转换视频 说明存储在 Amazon SQS 中 但这与我的问题无关 我面临一个选择 要么使用 Java 运行时来执行 FFmpeg 转换 如从命令行 要么使用用
  • 使用 libavcodec 提取音频样本

    我对如何从 AVFrame 中的数据提取双值感到困惑 我正在尝试提取帧 我尝试检查用 CPython 编写的 av 模块背后的源代码 尤其是 AudioFrame 来尝试了解它从何处解码样本 https github com PyAV Or
  • 如何将 AV_SAMPLE_FMT_S16 转换为 AV_SAMPLE_FMT_S16P?

    我使用 ffmpeg 来解码音频并使用 libmp3lame 将其编码为 mp3 由于 ffmpeg 中的 libmp3lame 需要 S16P 而不是 S16 因此我必须转换音频样本 我尝试使用 swr convert 但每次都会随机崩溃
  • 导入错误:无法导入名称“FFProbe”

    我无法获取ffprobe包 https github com simonh10 ffprobe在 Python 3 6 中工作 我使用 pip 安装它 但是当我输入import ffprobe it says Traceback most
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工

随机推荐