标签: ffmpeg

在.net中使用FFmpeg?

所以我知道这是一个相当大的挑战,但我想使用FFmpeg库在c#中编写一个基本的电影播放器​​/转换器.但是,我需要克服的第一个障碍是将FFmpeg库包装在c#中.我已经下载了ffmpeg但无法在Windows上编译它,所以我为我下载了一个预编译版本.太棒了.然后我开始寻找C#包装器.

我环顾四周,发现了一些包装器,如SharpFFmpeg(http://sourceforge.net/projects/sharpffmpeg/)和ffmpeg-sharp(http://code.google.com/p/ffmpeg-sharp/).首先,我想使用ffmpeg-sharp作为其LGPL而SharpFFmpeg是GPL.但是,它有很多编译错误.事实证明它是为单声道编译器编写的,我尝试用单声道编译它但无法弄清楚如何.然后我开始自己手动修复编译器错误,但遇到了一些可怕的错误,并认为我最好不要单独留下它们.所以我放弃了ffmpeg-sharp.

然后我看着SharpFFmpeg,它看起来像我想要的,所有P/Invoked函数.不过它的GPL?AVCodec.cs和AVFormat.cs文件看起来像avcodec.c和avformat.c的端口,我估计我可以移植自己?然后不必担心许可.

但是我想在开始编码之前做到这一点.我是不是该:

  1. 编写我自己的C++库以与ffmpeg交互,然后让我的C#程序与C++库通信以播放/转换视频等.

要么

  1. 通过使用大量的DllImports将端口avcodec.h和avformat.h(这就是我需要的全部吗?)到c#中并完全用C#编写?

首先要考虑的是我在C++方面并不擅长,因为我很少使用它,但我知道它足以绕过它.我认为#1的原因可能是更好的选择,因为大多数FFmpeg教程都是用C++编写的,而且我对内存管理的控制也比我在c#中做的要多.

你怎么看?您是否也碰巧使用FFmpeg有任何有用的链接(也许是教程)?

c# video ffmpeg

62
推荐指数
4
解决办法
11万
查看次数

ffmpeg可以将音频转换为原始PCM吗?如果是这样,怎么样?

我目前正在使用ffmpeg将FLV/Speex成功转换为WAV/pcm_s16le.但是,我现在需要输出格式为RAW,即PCM签名的16位小端,没有WAV头.我尝试了以下方法:

ffmpeg -y -i input.flv -vn -acodec pcm_s16le output.raw
Run Code Online (Sandbox Code Playgroud)

但ffmpeg回应:

Unable to find a suitable output format for 'output.raw'
Run Code Online (Sandbox Code Playgroud)

我也尝试使用'output.pcm'和'output'作为输出文件名,结果相同.

我也尝试了ffmpeg标志来指定原始格式,但这给出了:

Unknown input or output format: raw
Run Code Online (Sandbox Code Playgroud)

这可能与FFmpeg一起使用吗?如果是这样,怎么样?

flv ffmpeg pcm

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

使用FFmpeg检索和保存媒体元数据

我想读取媒体文件中的元数据,然后将该元数据保存在text/xml文件中,以便稍后我可以在我的数据库中插入该数据.我更愿意使用ffmpeg.

与MediaInfo一样可能吗?我知道我可以使用MediaInfo获取各个曲目的元数据,但我想自动化它; 就像在找到新媒体文件时一样,读取其元数据,然后将其存储在txt/xml文件中.

或者,我可以使用其他任何工具/实用程序/ API吗?

media metadata ffmpeg

62
推荐指数
3
解决办法
10万
查看次数

"编码器'aac'是实验性的,但实验编解码器未启用"

使用它转换flvmp4转换FFMPEG时显示以下错误

[aac @ 0x2b4b640] The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
Run Code Online (Sandbox Code Playgroud)

ffmpeg

62
推荐指数
3
解决办法
3万
查看次数

用于转换为mp4的ffmpeg设置和用于HTML5视频的ogg

尽管所有的炒作,实际上HTML5视频标签有一些问题.为了使用它并使其与浏览器兼容,您必须包含多种格式的视频.要定位所有支持的浏览器,这些格式为mp4和ogg.

我正在寻找每种格式的最佳设置,但不幸的是我找不到任何格式.我正在使用ffmpeg 0.6,其标语为"Works with HTML5".我不是视频专家,所以我想知道是否有人可以为每种格式推荐合适的设置?

video html5 mp4 ffmpeg ogg

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

使用QtMultimedia播放自定义avi数据流

我需要播放一个自定义AVI文件,其中包含经典视频流,音频流以及自定义数据流.

自定义流包含由某些自定义小部件可视化的数据; 这些小部件只需要在适当的时间将每个自定义帧写入缓冲区.

我们的应用程序基于Qt,并且已经使用QMediaPlayer/ QVideoWidget播放传统视频,但额外的自定义流使事情变得更复杂,因为AFAIK QMediaPlayer只播放视频/音频并忽略其他所有内容.

我想避免重新发明整个qt-multimedia,但我不知道如何充分利用可用的Qt类.


我到目前为止的想法是:

  1. 编写一个自定义媒体播放器类,使用解复用和解码视频ffmpeg,实现定时,QAudioOutput用于播放音频,生成QVideoFrame要在视频上播放的s 流,并将自定义数据写入某个缓冲区以进行可视化.

    问题:为了避免编写代码来重新缩放/转换视频帧,我想重用QVideoWidget,但它似乎只适用于"真实" QMediaPlayer.

  2. 将输入文件解复用并QMediaPlayer与AV流一起提供. 将输入解复用ffmpeg(可能将解码留给Qt后端),让一个QIODevice只检索输入文件中的视频/音频流,另一个检索数据流.播放视频/音频QMediaPlayer.

                  +-------+                          
                  | QFile |                          
                  +---^---+                          
                      |                              
                   inherits                          
                      |                              
            +--------------------+
            |    MyAviDemuxer    |
            |                    |
            |  holds a queue of  |
            |  demuxed packets   |
            +--------------------+
            |                    |
      readDataPacket      readVideoPacket
            |                    |
    +-------v--------+  +--------v-----------+            +-----------+
    | MyCustomReader | …
    Run Code Online (Sandbox Code Playgroud)

c++ qt ffmpeg qtmultimedia

58
推荐指数
1
解决办法
1772
查看次数

使用FFmpeg在iOS上编写时将fMP4转码为HLS

TL; DR

我想将fMP4片段转换为TS段(用于HLS),因为片段是在iOS设备上使用FFmpeg编写的.

为什么?

我正在尝试在iOS上实现实时上传,同时在本地保持无缝的高清副本.

我试过的

  1. 滚动AVAssetWriters,每次写入8秒,然后通过FFmpeg连接MP4.

    出了什么问题 - 音频和视频有时会出现问题.我已经确定了3个原因.

    1)为AAC编码器写入的音频启动帧,从而产生间隙.

    2)由于视频帧长33.33ms,音频帧长0.022ms,因此它们可能不在文件末尾排队.

    3)Mac OS上缺少帧精确编码,但iOS 详细信息不适用于此

  2. FFmpeg将具有原始音频的大视频MP4文件复用到TS段中.这项工作基于Kickflip SDK

    什么是错的 - 每隔一段时间,只有一个音频文件会上传,没有任何视频.永远不能在内部重现它,但当他们没有记录他们认为他们做的事情时,它对我们的用户来说非常令人沮丧.在最后一段上也存在准确搜索的问题,几乎就像TS段的时间戳错误一样.

我现在在想什么

苹果公司今年(2016年)正在WWDC推动fMP4,在此之前我还没有对它进行太多调查.由于fMP4文件可以在写入读取和播放,我认为FFmpeg也可以在写入时对文件进行转码,只要我们阻止将字节发送到FFmpeg直到每个片段内文件完成了.

但是,我对FFmpeg C API并不熟悉,我只是在尝试#2中简单地使用它.

我需要你什么

  1. 这是可行的解决方案吗?有人对fMP4足够熟悉,知道我是否真的可以做到这一点?
  2. 我怎么知道AVFoundation已经完成在文件中写一个片段,以便我可以将它管道输入FFmpeg?
  3. 如何从磁盘上的文件中获取数据,一次块,将其传递给FFmpeg并让它吐出TS段?

ffmpeg avfoundation http-live-streaming ios fmp4

57
推荐指数
1
解决办法
1774
查看次数

ffmpeg可以显示进度条吗?

我正在使用ffmpeg将.avi文件转换为.flv文件.由于转换文件需要很长时间,我想显示进度条.有人可以指导我如何去做同样的事情.

我知道ffmpeg不得不在文本文件中输出进度,我必须使用ajax调用来读取它.但是如何让ffmpeg将进度输出到文本文件?

非常感谢你.

ffmpeg progress-bar

56
推荐指数
9
解决办法
7万
查看次数

图像序列到视频流?

像许多人似乎已经拥有(这里有几个主题)我正在寻找从一系列图像创建视频的方法.

我想在C#中实现我的功能!

这是我不想做的事情:

/*Pseudo code*/
void CreateVideo(List<Image> imageSequence, long durationOfEachImageMs, string outputVideoFileName, string outputFormat)
{
    // Info: imageSequence.Count will be > 30 000 images
    // Info: durationOfEachImageMs will be < 300 ms

    if (outputFormat = "mpeg")
    {
    }
    else if (outputFormat = "avi")
    {      
    }
    else
    {
    }

    //Save video file do disk
}
Run Code Online (Sandbox Code Playgroud)

我知道有一个名为Splicer的项目(http://splicer.codeplex.com/)但我找不到合适的文档或明确的例子我可以遵循(这些是我发现的例子).

我想在CodePlex上找到的最接近的是: 如何在C#中的图像目录中创建视频?

我还阅读了一些关于ffmpeg的线程(例如:C#和FFmpeg最好没有shell命令?这个:使用ffmpeg转换图像序列)但我发现没有人帮我解决我的问题而且我不认为ffmpeg -命令行样式对我来说是最好的解决方案(因为图像数量).

我相信我可以用某种方式使用Splicer -project(?).

在我的情况下,它大约是> 30 000张图像,其中每张图像应显示约200毫秒(在我想要创建的视频流中).

(视频是关于什么的?植物生长......)

谁能帮我完成我的功能?

c# video ffmpeg image aforge

56
推荐指数
5
解决办法
7万
查看次数

如何使用-fPIC重新编译

我试图在我的ARM Ubuntu机器上按照本指南重新安装我的ffmpeg .不幸的是,当我编译一个使用这个lib的程序时,我得到以下失败:

/usr/bin/ld: /usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libavcodec.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

现在我想像-fPIC编译器建议的那样重新编译它,但我不知道如何.任何帮助表示赞赏.

c++ gcc ffmpeg compilation fpic

56
推荐指数
5
解决办法
9万
查看次数

标签 统计

ffmpeg ×10

video ×3

c# ×2

c++ ×2

aforge ×1

avfoundation ×1

compilation ×1

flv ×1

fmp4 ×1

fpic ×1

gcc ×1

html5 ×1

http-live-streaming ×1

image ×1

ios ×1

media ×1

metadata ×1

mp4 ×1

ogg ×1

pcm ×1

progress-bar ×1

qt ×1

qtmultimedia ×1