生成的ffmpeg.exe无法正常工作

时间:2018-02-06 09:24:37

标签: c++ windows ffmpeg

在我的c ++应用程序中,我想静态使用ffmpeg lib。

我下载了ffmpeg-3.4.1源代码并使用MINGW,Yasm和VS2015命令提示符构建了静态链接的ffmpeg,如下所示,

  1. 下载msys2-x86_64-20161025.exe
  2. 在打开MINGW命令提示符时,使用命令“pacman -S make gcc diffutils”安装所需的gcc工具
  3. 将C:\ msys64 \ usr \ bin \ link.exe重命名为C:\ msys64 \ usr \ bin \ link_orig.exe
  4. 下载yasm 32位exe并将其路径设置为PATH环境变量。 ( “%PATH%; d:\ ffmpeg的”)
  5. 运行VS2015,然后打开MINGW-C:\ msys64 \ msys2_shell.cmd -use-full-path
  6. 在打开MingW时,将pwd更改为ffmpeg。运行./configure然后进行make install。
  7. 使用配置:./ 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上。

    来自内置ffmpeg.exe的屏幕截图output.mp4(15 Mb) screenshot output.mp4 from built ffmpeg.exe(15 Mb)

1 个答案:

答案 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;构建脚本中的选项,因为我需要动态构建。