所以我知道这是一个相当大的挑战,但我想使用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的端口,我估计我可以移植自己?然后不必担心许可.
但是我想在开始编码之前做到这一点.我是不是该:
要么
首先要考虑的是我在C++方面并不擅长,因为我很少使用它,但我知道它足以绕过它.我认为#1的原因可能是更好的选择,因为大多数FFmpeg教程都是用C++编写的,而且我对内存管理的控制也比我在c#中做的要多.
你怎么看?您是否也碰巧使用FFmpeg有任何有用的链接(也许是教程)?
我目前正在使用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一起使用吗?如果是这样,怎么样?
我想读取媒体文件中的元数据,然后将该元数据保存在text/xml文件中,以便稍后我可以在我的数据库中插入该数据.我更愿意使用ffmpeg.
与MediaInfo一样可能吗?我知道我可以使用MediaInfo获取各个曲目的元数据,但我想自动化它; 就像在找到新媒体文件时一样,读取其元数据,然后将其存储在txt/xml文件中.
或者,我可以使用其他任何工具/实用程序/ API吗?
使用它转换flv为mp4转换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) 尽管所有的炒作,实际上HTML5视频标签有一些问题.为了使用它并使其与浏览器兼容,您必须包含多种格式的视频.要定位所有支持的浏览器,这些格式为mp4和ogg.
我正在寻找每种格式的最佳设置,但不幸的是我找不到任何格式.我正在使用ffmpeg 0.6,其标语为"Works with HTML5".我不是视频专家,所以我想知道是否有人可以为每种格式推荐合适的设置?
我需要播放一个自定义AVI文件,其中包含经典视频流,音频流以及自定义数据流.
自定义流包含由某些自定义小部件可视化的数据; 这些小部件只需要在适当的时间将每个自定义帧写入缓冲区.
我们的应用程序基于Qt,并且已经使用QMediaPlayer/ QVideoWidget播放传统视频,但额外的自定义流使事情变得更复杂,因为AFAIK QMediaPlayer只播放视频/音频并忽略其他所有内容.
我想避免重新发明整个qt-multimedia,但我不知道如何充分利用可用的Qt类.
我到目前为止的想法是:
编写一个自定义媒体播放器类,使用解复用和解码视频ffmpeg,实现定时,QAudioOutput用于播放音频,生成QVideoFrame要在视频上播放的s 流,并将自定义数据写入某个缓冲区以进行可视化.
问题:为了避免编写代码来重新缩放/转换视频帧,我想重用QVideoWidget,但它似乎只适用于"真实" QMediaPlayer.
将输入文件解复用并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)我想将fMP4片段转换为TS段(用于HLS),因为片段是在iOS设备上使用FFmpeg编写的.
我正在尝试在iOS上实现实时上传,同时在本地保持无缝的高清副本.
滚动AVAssetWriters,每次写入8秒,然后通过FFmpeg连接MP4.
出了什么问题 - 音频和视频有时会出现问题.我已经确定了3个原因.
1)为AAC编码器写入的音频启动帧,从而产生间隙.
2)由于视频帧长33.33ms,音频帧长0.022ms,因此它们可能不在文件末尾排队.
3)Mac OS上缺少帧精确编码,但iOS 详细信息不适用于此
FFmpeg将具有原始音频的大视频MP4文件复用到TS段中.这项工作基于Kickflip SDK
什么是错的 - 每隔一段时间,只有一个音频文件会上传,没有任何视频.永远不能在内部重现它,但当他们没有记录他们认为他们做的事情时,它对我们的用户来说非常令人沮丧.在最后一段上也存在准确搜索的问题,几乎就像TS段的时间戳错误一样.
苹果公司今年(2016年)正在WWDC推动fMP4,在此之前我还没有对它进行太多调查.由于fMP4文件可以在写入时读取和播放,我认为FFmpeg也可以在写入时对文件进行转码,只要我们阻止将字节发送到FFmpeg直到每个片段内文件完成了.
但是,我对FFmpeg C API并不熟悉,我只是在尝试#2中简单地使用它.
AVFoundation已经完成在文件中写一个片段,以便我可以将它管道输入FFmpeg?我正在使用ffmpeg将.avi文件转换为.flv文件.由于转换文件需要很长时间,我想显示进度条.有人可以指导我如何去做同样的事情.
我知道ffmpeg不得不在文本文件中输出进度,我必须使用ajax调用来读取它.但是如何让ffmpeg将进度输出到文本文件?
非常感谢你.
像许多人似乎已经拥有(这里有几个主题)我正在寻找从一系列图像创建视频的方法.
我想在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毫秒(在我想要创建的视频流中).
(视频是关于什么的?植物生长......)
谁能帮我完成我的功能?
我试图在我的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编译器建议的那样重新编译它,但我不知道如何.任何帮助表示赞赏.