• peter
    2022-08-16 来自北京
    请教老师几个问题: Q1:FFmpeg框架有渲染音频的能力吗?比如要实现“混音”功能,即在一个音频上叠加另外一个音频,混音后能同时听到两个声音。Ffmpeg是否支持开发“混音”功能?(安卓系统上搜到了几个音频编辑的APP,APP的其中一个功能是“音频合并”。我这里说的“混音”差不多就是“音频合并”)。 Q2:切片是什么意思?是若干帧的组合吗?或者是从视频或音频文件中截取一小段? Q3:partition、切片、宏块有什么区别? Q4:”side data”是什么意思?

    作者回复: 1. amix滤镜可以搞定 2. 视频文件切片,编码的话通常叫切slice或者tile 3. 可以参考极客时间的搞定视频课 4. 通常指avpacket里面的side data,用于存放编解码数据以外的信息相关的数据,例如旋转信息,例如目标识别相关信息一类的数据

    
    3
  • Geek_a54b66
    2023-05-12 来自江苏
    windows 的 ffmpeg 要通过源代码编译,还是官网直接下编译好的,如果要编译怎么编译,而且开发环境怎么搭建

    作者回复: github有个叫btbn的user,他有一个编译ffmpeg的脚本的repo,很值得研究

    
    
  • Sky丶蓝调
    2023-04-01 来自广东
    在FFmpeg的API中,可以使用av_opt_set()函数来设置movflags参数,从而实现将MP4的moov移动到文件头部的功能。具体步骤如下: 首先需要获取AVFormatContext,可以使用avformat_alloc_output_context2()函数创建一个输出上下文。 设置输出格式和输出文件路径,可以使用avformat_new_stream()函数新建一个流。 使用av_opt_set()函数设置movflags参数,将其设置为"faststart"。 调用avformat_write_header()函数写入文件头。 循环调用av_interleaved_write_frame()函数将AVPacket输出到文件中。 调用av_write_trailer()函数输出文件尾。 需要注意的是,如果使用avformat_write_header()函数写入文件头之前没有设置movflags参数,那么moov将会被放在文件的尾部。如果在调用avformat_write_header()函数之后再设置movflags参数,那么设置将不起作用。因此,必须在调用avformat_write_header()函数之前设置movflags参数。 AVFormatContext *out_ctx; AVOutputFormat *out_fmt; AVStream *out_stream; AVCodecContext *codec_ctx; AVCodec *codec; AVPacket packet; avformat_alloc_output_context2(&out_ctx, NULL, "mp4", "output.mp4"); out_fmt = out_ctx->oformat; out_stream = avformat_new_stream(out_ctx, NULL); codec_ctx = out_stream->codec; codec = avcodec_find_encoder(codec_ctx->codec_id); avcodec_open2(codec_ctx, codec, NULL); av_opt_set(out_ctx->priv_data, "movflags", "faststart", 0); avformat_write_header(out_ctx, NULL); while (/* 读取AVPacket */) { av_interleaved_write_frame(out_ctx, &packet); } av_write_trailer(out_ctx);
    展开
    
    