标签: libavcodec

如何获取DVD中的标题和章节信息?

我发现很多关于使用ffmpeg创建DVD菜单的问题,但我没有发现任何关于以编程方式访问DVD结构信息的问题.当我使用libav(或FFmpeg)库时,我可以打开DVD映像(iso文件)并访问视频,音频和字幕流.但我找不到任何API.

我可以使用VLC播放器(以及libvlc库)播放视频和查找信息.但我需要在程序上对音频和字幕流进行一些处理.我不想使用像SmartRipper这样的工具拆分VOB,然后才进行处理.

libav(ffmpeg)是否包含用于处理DVD菜单的任何API?如果没有,您能否推荐任何其他库,可用于获取有关标题(章节)开始和结束时间的信息,一帧(样本,AVPacket)准确度?

我听说过libdvdnav库,但我不知道它是否适合我.我是libav和DVD格式内部的新手.

ffmpeg libavcodec libav libavformat

8
推荐指数
2
解决办法
1万
查看次数

什么是ffmpeg,avcodec,x264?

维基,我读到了

FFmpeg是一个自由软件项目,可生成用于处理多媒体数据的库和程序.FFmpeg最值得注意的部分是libavcodec,一个由其他几个项目使用的音频/视频编解码器库,libavformat,音频/视频容器mux和demux库,以及用于转码多媒体文件的ffmpeg命令行程序.

那么ffmpeg是avcodec的包装器?我经常听到人们使用ffmpeg用x264编码视频.那么ffmpeg也是x264的包装器?

它们有什么关系?

ffmpeg x264 libavcodec

8
推荐指数
1
解决办法
1万
查看次数

解码MP3,然后增加音量,然后编码新音频

我想首先解码MP3音频文件,然后增加音频的音量,然后再将其编码为新的MP3文件.我想为此使用libavformat或libavcodec.你能帮我解决这个问题吗?任何例子?

ffmpeg libavcodec libav libavformat

8
推荐指数
1
解决办法
5636
查看次数

在 Linux 上如何更好地将 ffmpeg 与 ASP.NET Core 一起使用?

我有项目(ASP.NET Core,在 Linux 上),其中有几个任务与视频转换和从视频文件中提取帧有关。

我考虑了两种可能的选择:

  1. 使用ffmpeg控制台实用程序
  2. 通过P/Invokelibavcodec图书馆和其他人,其ffmpeg用途

第二种选择更难,可能非常不切实际,因为它提醒我开发新的包装器/库,而不是使用现成的产品。

我已经完成了谷歌搜索,但没有针对 Linux 平台上的 C#/ASP.NET Core 做好的项目。有一些适用于 C++ 和 Python,但不适用于 Linux/.NET Core 上的 C#。

我决定看第一个选项,我认为它会更容易和实用。但是,也有一些薄弱的地方,这会产生很多问题。我们理解(我想),使用第一个选项,最终开发人员应使用进程分叉。因此,进程空闲和其他可能的问题可能存在问题......

我问的是你的做法,因为这是我第一次在 Linux 平台上使用 C# 进行视频转换/采样。我已经在 Windows 平台上使用了Expression Encoder .NET 库,但它是另一回事,现在没有任何意义。

可能还有其他选项,我目前看不到。我不喜欢第一个选项,因为可能存在未处理的异常,因为ffmpeg这样的角色成为 ASP.NET Core 后端的黑匣子。

c# linux ffmpeg libavcodec asp.net-core

8
推荐指数
1
解决办法
7687
查看次数

av_register_all()与avcodec_register()

而不是调用av_register_all(),是否有一个选择使用单个解码器的例子?我想我必须调用avcodec_register(),av_register_codec_parser()等...

问题是,应该调用哪些函数,因为如果我不使用av_register_all(),av_open_input_file()将失败-2.

libavcodec libavformat

7
推荐指数
1
解决办法
5916
查看次数

使用 libavcodec 编码视频时比特率极高

我正在尝试捕获相机输出并使用 libavcodec 制作视频。作为如何完成此操作的示例,我使用了ffmpeg muxing 示例

问题是 4 秒视频的大小为 ~15mb,比特率为 ~30000 kb/s,尽管我已将 AVCodecContext 上的比特率设置为 400000(我认为该值以比特/秒为单位,而不是 kb/s) .

我还尝试从命令行使用 ffmpeg 录制视频,它的比特率约为 700 kb/s。

有人知道为什么不保留比特率从而导致生成的文件非常大吗?我用来初始化编解码器上下文的代码如下:

初始化部分:

avformat_alloc_output_context2(&m_formatContext, NULL, NULL, filename);
outputFormat = m_formatContext->oformat;

codec = avcodec_find_encoder(outputFormat->video_codec);

m_videoStream = avformat_new_stream(m_formatContext, codec);

m_videoStream->id = m_formatContext->nb_streams - 1;

codecContext = m_videoStream->codec;

codecContext->codec_id = outputFormat->video_codec;

codecContext->width = m_videoResolution.width();
codecContext->height = m_videoResolution.height();

int m_bitRate = 400000;
codecContext->bit_rate = m_bitRate;
codecContext->rc_min_rate = m_bitRate;
codecContext->rc_max_rate = m_bitRate;
codecContext->bit_rate_tolerance = 0;

codecContext->time_base.den = 20;
codecContext->time_base.num = 1;

codecContext->pix_fmt = …
Run Code Online (Sandbox Code Playgroud)

ffmpeg libavcodec libav libavformat

7
推荐指数
1
解决办法
2310
查看次数

未定义的avcodec_alloc_context参考但ffmpeg链接器顺序是否正确?

我想构建静态链接到libavcodec和libavformat的静态链接可执行文件.静态ffmpeg库是用以下代码构建的:

./configure --enable-static --enable-gpl --enable-nonfree --disable-vaapi 
     --disable-libopus --prefix=myBuild --disable-swresample
Run Code Online (Sandbox Code Playgroud)

接头设置如下:

g++ -O2 -static -o myBin myBin-myBin.o someotherlibraries.a 
     -L/ffmpeg/myBuild/lib -lavformat -lavcodec -lavutil  -lrt -lm -lpthread -lz
Run Code Online (Sandbox Code Playgroud)

编译时,我收到一条错误消息>: - /

src/ffmpeg/myProgram.cpp:115: error: undefined reference to 'avcodec_alloc_context'
Run Code Online (Sandbox Code Playgroud)

输出nm /ffmpeg/myBuild/lib/libavcodec.a | grep avcodec_alloc_context:

         U avcodec_alloc_context3
         U avcodec_alloc_context3
000003c0 T avcodec_alloc_context3
         U avcodec_alloc_context3
Run Code Online (Sandbox Code Playgroud)

我包含带有extern"C"{}的libavcodec.h,我相信我的静态链接器顺序是正确的.为什么我会收到此错误?是因为这个方法已被弃用了吗?我怎么解决这个问题?

解:

不要用

avCtx = avcodec_alloc_context()
Run Code Online (Sandbox Code Playgroud)

从可能较旧的代码片段,但使用

codec = avcodec_find_decoder(CODEC_ID_XYZ);//for completeness but should be the same as before
avCtx = avcodec_alloc_context3(codec)
Run Code Online (Sandbox Code Playgroud)

c++ ffmpeg static-linking libavcodec libavformat

7
推荐指数
1
解决办法
5871
查看次数

FFMPEG 解码太慢 (avcodec_send_packet() / avcodec_receive_frame())

我正在使用 ffmpeg 库对 MPEG 传输流中的视频进行解码、缩放和重新编码。我刚刚从源代码重新编译到 v3.3.2,并从旧的 avcodec_decode_video2() API 更改为新的发送/接收 API。

旧的和新的 API 都非常缓慢地解码视频。

25 fps 视频 = 每 40 毫秒 1 帧。但是,我看到每帧要解码 70 到 120 毫秒。这是一个文件翻译器,因此需要它比实时运行得更快

代码大纲如下。有人对如何提高解码速度有任何想法吗?还有其他关于弃用avcodec_decode_video2()缓慢的帖子;这些都没有得到解决。新的 API 没有运行得更快...

gettimeofday(&tv1, NULL);
int rc = av_read_frame(pFormatContext, pESPacket);
gettimeofday(&tv2, NULL);

int ret = avcodec_send_packet(pDecoderContext, pESPacket);
if (ret < 0)
    continue;

ret = avcodec_receive_frame(pDecoderContext, pFrameDec);
if (ret != 0)
{
    printf("avcodec_receive_frame error: %d\n", ret);
    continue;
}
gettimeofday(&tv3, 0);

u_long twoMinusOne   = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - …
Run Code Online (Sandbox Code Playgroud)

ffmpeg libavcodec avcodec

7
推荐指数
2
解决办法
2589
查看次数

如何使用 ffmpeg / libavfilter 输出原始频率 (fft) 数据

我正在尝试编写 libavfilter 绑定以将任意音频文件转换为原始频率(频谱)数据以进行后续音频分析。是否有内置的 ffmpeg 或 libavfilter 来输出二进制频率数据,而不是正确的音频/视频文件?

FFmpeg 有一些执行 FFT 的内置过滤器,例如afftfiltshowfreqs,但是这些过滤器总是将输出转换回视频或音频。我需要的是类似于afftfilt过滤器的东西,但它会转储原始 FFT 数据,而不是将其重新编码回 PCM。

audio ffmpeg libavcodec libav

6
推荐指数
1
解决办法
1006
查看次数

为什么将音频流添加到 ffmpeg 的 libavcodec 输出容器会导致崩溃?

就目前而言,我的项目正确使用 libavcodec 解码视频,其中每一帧都被操纵(无论如何)并输出到新视频。我从网上找到的例子拼凑起来,它的工作原理。结果是处理过的帧的完美 .mp4,减去音频。

我的问题是,当我尝试将音频流添加到输出容器时,我在 mux.c 中遇到了无法解释的崩溃。它在static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket *pkt). 当st->internal->priv_pts->val = pkt->dts;尝试,priv_pts是nullptr。

我不记得版本号,但这是 2020 年 11 月 4 日 ffmpeg 从 git 构建的。

我的MediaContentMgr比我在这里的要大得多。我正在剥离与帧操作有关的所有内容,因此如果我遗漏了任何内容,请告诉我,我会进行编辑。

添加时触发 nullptr 异常的代码被内联调用

.h:

#ifndef _API_EXAMPLE_H
#define _API_EXAMPLE_H

#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include "glm/glm.hpp"

extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavutil/avutil.h>
#include <libavutil/opt.h>
#include <libswscale/swscale.h>
}

#include "shader_s.h"

class MediaContainerMgr {
public:
    MediaContainerMgr(const std::string& infile, const std::string& vert, const std::string& frag, …
Run Code Online (Sandbox Code Playgroud)

c++ crash ffmpeg nullptr libavcodec

6
推荐指数
1
解决办法
406
查看次数