问题标签 [libavcodec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
42462 浏览

c - FFmpeg 可以用作库,而不是独立程序吗?

我想将视频转换功能添加到我正在编写的程序中。FFmpeg 的命令行界面很简单ffmpeg -i InputFile OutputFile,但是有没有办法将它用作库,所以我可以做类似的事情ffmpeg_convert(InputFile, OutputFile)

我希望我不必直接使用 libavcodec,因为我想它会比在格式之间转换的单行函数复杂得多。如果 FFmpeg 不能轻易改装来做到这一点,是否还有另一个基于它的库呢?我听说过 libvlc,但这似乎只公开了一个视频播放API,而不是视频转换。

谢谢。

0 投票
2 回答
24906 浏览

c - 使用 libavcodec 将音频编码为 aac

我正在使用 libavcodec(截至 2010 年 3 月 3 日的最新 git)将原始 pcm 编码为 aac(启用 libfaac 支持)。我通过每次使用 codec_context->frame_size 样本重复调用 avcodec_encode_audio 来做到这一点。前四个调用成功返回,但第五个调用永远不会返回。当我使用 gdb 中断时,堆栈已损坏。

如果我使用 audacity 将 pcm 数据导出到 .wav 文件,那么我可以使用命令行 ffmpeg 毫无问题地转换为 aac,所以我确定这是我做错了。

我写了一个重复我的问题的小测试程序。它从文件中读取测试数据,该文件可在此处获得:http: //birdie.protoven.com/audio.pcm(约 2 秒的有符号 16 位 LE pcm)

如果我直接使用 FAAC,我可以让它全部工作,但如果我可以使用 libavcodec,代码会更简洁一些,因为我也在编码视频,并将两者都写入 mp4。

ffmpeg 版本信息:

有没有我没有设置的东西,或者在我的编解码器上下文中设置不正确,也许?任何帮助是极大的赞赏!

这是我的测试代码:

0 投票
1 回答
2394 浏览

encoding - 如何在编码 MPEG-2 4:2:2 配置文件时将 libavcodec 设置为使用 4:2:2 色度?

我有一个使用 libavcodec (ffmpeg) 的项目。我正在使用它以 4:2:2 Profile, Main Level 对 MPEG-2 视频进行编码。我在 AVCodecContext 中选择了像素格式 PIX_FMT_YUV422P,但是我得到的视频输出的所有颜色都错误,在我看来编码器错误地读取缓冲区,就好像它认为它是 4:2:0 色度而不是大于 4:2:2。这是我的编解码器设置:

可以在http://ftp.limeboy.com/images/screen_grab.png看到生成的视频帧的屏幕截图(输入是标准彩条)。

我已经通过在过程中的各个点将调试帧输出为 TGA 格式进行了检查,并且我可以确认在 libavcodec 对帧进行编码之前一切都很好。

非常感谢任何帮助!

干杯,迈克。

0 投票
1 回答
6441 浏览

c++ - FFMpeg 将 RGB 图像编码为 H264

我正在开发一个 DirectShow 过滤器,它有 2 个输入引脚(1 个用于音频,1 个用于视频)。我正在使用 FFMpeg 的 libavcodec/libavformat/libavutil 将视频编码为 H264,将音频编码为 AAC,并使用 RTP 对它/流进行复用。到目前为止,我能够使用 libavcodec 正确编码视频和音频,但现在我看到 FFMpeg 似乎也支持 RTP 多路复用。不幸的是,我找不到任何显示如何执行 H264 编码和 RTP 多路复用的示例代码。有人知道好的样品吗?

0 投票
3 回答
2346 浏览

iphone - 调用 avcodec_encode_video 时的 EXC_BAD_ACCESS

我有一个 Objective-C 类(尽管我不相信这是任何特定于 Obj-C 的),我正在使用它从一系列 CGImage 将视频写入磁盘。(我在顶部用来获取像素数据的代码来自 Apple:http: //developer.apple.com/mac/library/qa/qa2007/qa1509.html)。我成功地创建了编解码器和上下文——一切都很好,直到它到达 avcodec_encode_video,当我得到 EXC_BAD_ACCESS 时。我认为这应该是一个简单的解决方法,但我就是不知道哪里出错了。

为了简洁起见,我进行了一些错误检查。'c' 是一个成功创建的 AVCodecContext*。

我已经经历了几十次。这里有一些数字...

  1. 数据长度 = 408960
  2. 图片buff = 0x5c85000
  3. 图片->数据[0] = 0x5c85000——我认为这意味着 avpicture_fill 工作......
  4. outbuf_size = 408960

然后我在 avcodec_encode_video 得到 EXC_BAD_ACCESS。不确定它是否相关,但大部分代码来自 api-example.c。我正在使用 XCode,在 Snow Leopard 上为 armv6/armv7 编译。

非常感谢您的帮助!

0 投票
2 回答
1243 浏览

ubuntu - ffmpeg problem in ubuntu (libavcodec.so)

I run Ubuntu and try to use the ffmpeg wrapper in Java from here: http://code.google.com/p/javacv/

It seems to work fine on other systems, but in Ubuntu the project crashes with the following mistake: Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'avcodec_decode_video2': /usr/lib/i686/cmov/libavcodec.so: undefined symbol: avcodec_decode_video2

ffmpeg is working great from the command line, though.

JavaCV author recommended me to check this link: http://linux-tipps.blogspot.com/2009/05/pretending-package-is-installed-by.html

Probably I'm doing something wrong, but it cannot reinstall libavcodec51 like this.

So the questions are: 1. Is those solution above a good one so I should bring it to success somehow? 2. What are the other ways to solve the problem?

Thank you for your suggestions in advance!

0 投票
2 回答
9771 浏览

c++ - 问题:FFMPEG 使用字节位置使用 av_seek_frame 搜索

我试图让 av_seek_frame() 函数转到我指定的字节位置。我正在为我的应用程序实现一个帧精确搜索机制,按照我的看法,我将扫描整个视频文件,并将每个关键帧的字节位置存储在一个结构中。我找到了获取当前字节位置的位置:AVPacket.pos。我现在用av_seek_frame这样的方式测试这个位置:

但是,这似乎没有做正确的事情,当我调用时av_read_frame,它只是从第 23 帧开始。如果我不寻找,它从第 1 帧开始。

0 投票
1 回答
1294 浏览

php - libavcodec 和 php

我在这里看到一个 libavcodec 的 c 示例http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/api-example_8c-source.html 这是编码/解码音频和视频(逐帧)。我打算这样做,但在 php.ini 中。

我想在上传的同时转换视频。例如:用户上传了一个 100mb 的视频。当服务器接收到第一个数据时,它会转换然后等待上传继续,依此类推。

有人能帮我吗 ?谢谢

0 投票
1 回答
630 浏览

c# - 实现音频播放的最佳方式

我正在开发一个将读取文件路径并播放音频文件的应用程序。我试图通过使用现有的编解码器和免费/开放的实用程序来尽可能简单地做到这一点。我想就最好的方法提出一些建议。我有两个想法,都涉及 FFmpeg:

  1. 创建一个简单的 GUI,允许用户读取要播放的文件,然后在后台运行 ffplay.exe 进程来播放文件。
  2. 通过使用 libavcodec 并将我的项目基于可用的功能来更深入地进行。

我对此只有几个主要目标。

  • 能够读取和播放多个文件而不会中断
  • 在轨道内的任意位置(基于总持续时间的百分比)开始播放
  • 在任意时间后停止播放,并移动到下一个曲目

对于这个项目,我的两种方法中哪一种最实用?是否有您建议的更好的(或者可能功能较少的)FFmpeg 替代方案。

这适用于用 C# 编写的 Windows 应用程序。

编辑:我开始使用 FFmpeg 的原因之一是它可以处理许多文件类型,特别是 MP3、AAC、Flac。

Edit2:如果使用 libavcode.dll 是最好的选择,那么获取一些关于在 C# 中实现它的信息也会很有帮助。

0 投票
3 回答
33264 浏览

c++ - 使用 ffmpeg (libavcodec) 通过 RTP 解码 H264 视频的问题

我用 SDP 的 profile-level-id 和 sprop-parameter-set 设置了 AvCodecContext 的 profile_idc、level_idc、extradata 和 extradata_size。

我将 Coded Slice、SPS、PPS 和 NAL_IDR_SLICE 数据包的解码分开:

在里面:

uint8_t start_sequence[]= {0, 0, 1}; int size= recv(id_de_la_socket,(char*) rtpReceive,65535,0);

编码切片:

结果:ConsumedBytes >0 和 GotPicture >0(经常)

SPS 和 PPS:

相同的代码。结果:ConsumedBytes >0 和 GotPicture =0

我觉得这很正常

当我找到一对新的 SPS/PPS 时,我会使用此数据包的有效负载及其大小更新 extradata 和 extrada_size。

NAL_IDR_SLICE:

Nal 单元类型是 28 =>idr 帧是分段的,因此我尝试了两种方法来解码

1) 我在第一个片段(没有 RTP 头)前加上序列 0x000001 并将其发送到 avcodec_decode_video。然后我将其余的片段发送到这个函数。

2)我在第一个片段(没有 RTP 头)前加上序列 0x000001 并将其余片段连接到它。我将此缓冲区发送到解码器。

在这两种情况下,我都没有错误(ConsumedBytes >0),但我没有检测到任何帧(GotPicture = 0)......

问题是什么 ?