jjzjj

c++ - 构建的 ffmpeg.exe 没有按预期工作

coder 2024-06-14 原文

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

我下载了 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。

使用配置:./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 应用程序不正确?我的应用程序中是否也需要所有这些库才能获得类似的输出?

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

最佳答案

在没有外部库链接的情况下,FFmpeg 已经可以做很多(但不是全部)你希望它做的事情,而且在很多情况下它也不会像使用专门的库那样擅长这些。< br/=""> 所以,简而言之,是的,对于大多数常见情况(尤其是涉及 MP4 和其他现代格式时),您需要这些外部库。

所以我们要构建 FFmpeg:
构建 FFmpeg 是一场噩梦般的经历。那是在 Linux 上,这是最简单的。

在 Windows 上,在您似乎需要它的地方,它达到了 Lovecraftian 的恐怖级别 - 您已经看过了。

谢天谢地,这个很棒的辅助脚本已经存在:
https://github.com/rdp/ffmpeg-windows-build-helpers
设置运行最新 Ubuntu(或其他发行版,如果您愿意)的虚拟机,并按照“从 Linux 环境交叉编译”的步骤进行操作。
建议将 Windows 管道与 cygwin 或 msys 一起使用,因为与在 linux 上(甚至在 VM 中)本地执行所有操作相比,这实在是太慢了。

该脚本的可配置性也非常高,因此您可以根据需要进行更改。例如,在我的例子中,我从构建脚本中删除了“--disable-shared”选项,因为我需要动态构建。

关于c++ - 构建的 ffmpeg.exe 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48639498/

有关c++ - 构建的 ffmpeg.exe 没有按预期工作的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  4. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  5. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  6. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  9. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  10. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

随机推荐