在我的c ++应用程序中,我想静态使用ffmpeg lib。
我下载了ffmpeg-3.4.1源代码并使用MINGW,Yasm和VS2015命令提示符构建了静态链接的ffmpeg,如下所示,
使用配置:./ configure --prefix =“build”--toolchain = msvc --arch = x86 --enable-yasm --enable-asm --disable-shared --enable-static
它已成功构建。我得到了具有ffmpeg.exe和ffprobe.exe的bin文件夹。 ffmpeg.exe的大小是18 Mb。 7个库也是.a文件。
我想我必须将.a文件转换为.lib并在应用程序中使用?
我想确认一下是否正确构建了一切。所以我尝试使用内置的ffmpeg.exe将.webm文件转换为mp4。我发现输出文件的大小非常大,质量太差了。 input.webm文件大小仅为15 Mb,output.mp4文件大小约为188 Mb。
然后我从https://ffmpeg.zeranoe.com/builds/下载了静态链接ffmpeg应用程序。我看到ffmpeg.exe的大小约为35 Mb,并且工作正常。对于相同的.webm文件,它创建.mp4文件只有44 Mb,质量也没问题。我发现它是用很多外部库构建的。
外部库是否会产生差异,或者我的内置ffmpeg应用程序是不是正确的?我是否也需要在我的应用程序中使用所有这些库以获得类似的输出?
请帮忙
谢谢, R上。
答案 0 :(得分:0)
如果没有连接外部库,FFmpeg已经可以完成许多(但不是全部)你想要它做的事情,并且在很多情况下它也不会像专用库那样好。<登记/> 所以,简而言之,是的,对于大多数常见情况,你需要那些外部库(特别是如果它涉及MP4和其他现代格式)。
这样我们就可以建立FFmpeg :
建设FFmpeg是一种噩梦般的体验。这是在Linux上,它是最简单的。
在Windows上,你似乎需要它,它达到了Lovecraftian的恐怖程度 - 你已经瞥了一眼。
谢天谢地,这个精彩的助手脚本存在:
https://github.com/rdp/ffmpeg-windows-build-helpers
设置运行最近的Ubuntu(或其他发行版,如果您愿意)的虚拟机,并遵循&#34;从Linux环境进行交叉编译&#34;步骤。
我不建议使用带有cygwin或msys的Windows管道,因为与在Linux上(或甚至在VM中)本地执行它相比,速度非常慢。
该脚本也非常易于配置,因此您可以根据需要进行更改。在我的情况下,例如,我删除了&#34; - 禁用共享&#34;构建脚本中的选项,因为我需要动态构建。