草庐IT

ffmpeg_output

全部标签

c++ - 使用 ffmpeg (c++) 编码 AAC

我正在研究将在Unity插件中使用的视频编码。我已经使图像编码工作,但现在我在处理音频。所以只尝试将音频转换为AAC编码的mp4文件。我卡住了。结果文件不包含任何内容。另外,据我了解,ffmpeg中的AAC仅支持AV_SAMPLE_FMT_FLTP,这就是我使用它的原因。这是我的代码:设置:intinitialize_encoding_audio(constchar*filename){intret;AVCodecIDaud_codec_id=AV_CODEC_ID_AAC;AVSampleFormatsample_fmt=AV_SAMPLE_FMT_FLTP;avcodec_regi

c++ - 从 C++ 中的 AVFrame (FFMPEG) 中提取 RGB 值

我目前正在尝试使用FFMPEG读取视频帧。格式为PIX_FMT_RGB24;对于每一帧,RGB值都在frame->data[0]中组合在一起(其中frame是AVFrame类型)。如何为每一帧提取单独的R、G和B值?这是为了处理视频。我认为它的工作方式与从位图中提取RGB值的方式相同。谢谢! 最佳答案 我的猜测:intp=x*3+y*frame->linesize[0];r=frame->data[0][p];g=frame->data[0][p+1];b=frame->data[0][p+2];我可能把r、g和b倒过来了。而且还有

c++ - ffmpeg c/c++ 获取帧数或时间戳和 fps

我正在使用ffmpeg解码C中的视频文件。我正在努力获取我正在解码的当前帧的计数或帧的时间戳。我已经阅读了许多文章,这些文章展示了如何根据fps和帧时间戳计算估计的帧数,但是我无法获得其中任何一个。我需要的:视频文件的fps,当前帧的时间戳或帧号(未计算)我所拥有的:我可以使用获取视频的时间pFormatCtx->duration/AV_TIME_BASE我在处理它们时计算当前的帧数,并获取当前的帧数,但这不会长期有效。我可以使用获取文件的总帧数pFormatCtx->streams[currentStream->videoStream]->nb_frames我读过这可能不适用于所有流

C++ FFMPEG 不写入 AVCC 框信息

我正在尝试使用C++中的FFMPEGAPI将原始H264编码为mp4容器。一切正常,但AVCC框为空,并返回错误:[iso文件]框“avcC”大小8无效如果我然后在输出文件上使用命令行工具:ffmpeg-ioutput.mp4-vcodeccopyfixed.mp4输出文件有效,并且AVCC填充了所需的信息。我不知道为什么这个命令行参数有效,但我无法使用API产生相同的结果。我在C++代码中做了什么(也在函数调用之间做了一些事情):outputFormat_=av_guess_format("mp4",NULL,NULL);//AV_CODEC_H264formatContext_=a

c++ - 未定义对 avcodec_alloc_context 的引用但 ffmpeg 链接器顺序正确吗?

我想构建静态链接到libavcodec和libavformat的静态链接可执行文件。静态ffmpeg库是用以下方法构建的:./configure--enable-static--enable-gpl--enable-nonfree--disable-vaapi--disable-libopus--prefix=myBuild--disable-swresample链接器设置如下:g++-O2-static-omyBinmyBin-myBin.osomeotherlibraries.a-L/ffmpeg/myBuild/lib-lavformat-lavcodec-lavutil-lrt

c++ - boost 日志 : How to prevent the output will be duplicated to all added streams when it uses the add_file_log() function?

我使用add_file_log()函数来初始化一个日志接收器,它将日志记录存储到一个文本文件中。当我定义多个接收器时,我观察到:为每个接收器创建一个文件。输出被复制到所有文件。这是我的记录器:classlogger{public:logger(constlogger&)=delete;logger(logger&&)=delete;logger&operator=(constlogger&)=delete;logger&operator=(logger&&)=delete;staticlogger&get_instance(conststd::string&file,boolconso

Transformer代码实现机器翻译示例(注意:Encoder_input,Decoder_input,Decoder_output:训练标签设定)

**Transformer原理+代码实现机器翻译示例(注意:Encoder_input,Decoder_input,Decoder_output:训练标签设定,设定模式不能出错,否则模型训练将极其难达到想要的效果,即使loss已经很低了,甚至模型非常优化也不能达到效果)Transformer原理:inputs:Encoder_inputOutputs:Decoder_inputOutputsprobility:Decoder_output##关键部分代码实现:maskedLoss:(一)importtorchimporttorch.nnasnnimporttorch.nn.functional

c++ - 使用 FFMPEG 和 url_fopen 示例

我想知道如何从URL(例如url_fopen)获取流(例如实时视频或PCM流)并将其编码成某种东西?更新:这实际上是一个商场格式的问题。这是关于如何使用url_fopen流式传输内容。回答:这很简单:有像ashortarticleexplaininghowtouseit我有一个实际使用它的小型视频流解决方案和url_write称为HelloVideoStreaming(windowssln)之前有很多修改。好消息是您实际上不需要或不想使用ffmpeg进行流式传输。但是您希望有可发送的编码数据包以便发送。Wehaveaclientthatdoesit(crossplatform,with

c++ - 使用 FFmpeg 从音频和视频文件中混合

我正在学习如何从this中创建MP4视频示例。问题是该示例演示了动态生成的一些虚拟源数据的音频编码。我需要对文件中的音频进行编码。我检查了很多示例,其中大多数显示相同或只是单独的音频编码。在我的试错过程中,我对音频和视频帧使用相同的AVFormatContext。我不确定这样做是否正确,或者我应该有2个单独的上下文?到目前为止,我的视频编码正常,但音频流失败因为AVPacket无法找到正确的音频流索引。这是我设置音频流的方式:voidopen_audio(AVFormatContext*oc,AVCodec**codec,AVStream**st,enumAVCodecIDcodec_

c++ - 如何传递 unique_ptr<T> 代替原始 *output* 指针参数?

我在外部库中有一个预先存在的函数,它看起来像这样;boolCreateTheThing(MyThing*&pOut);简而言之;我给它一个原始指针(通过引用),函数分配内存并将我的指针分配给新分配的对象。当函数返回时,我有责任在我完成后释放内存。显然,我想将此结果存储到unique_ptr中,并避免使用手册delete.我可以创建一个临时原始指针以用于API调用,并将其传递到unique_ptr的构造函数中;MyThing*tempPtr;CreateTheThing(tempPtr);unique_ptrrealPtr=unique_ptr(tempPtr);还有比这更直接的方法吗?