找回密码
 注册
关于网站域名变更的通知
查看: 382|回复: 1
打印 上一主题 下一主题

cygwin下编译最简单的ffmpeg

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-10 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1 ?1 b& E5 ~! `! r0 `* B
网上很多是在mingw/msys环境下编译ffmpeg的。4 A' N3 m% f* k# B
7 k, [  h4 i+ a6 s* h8 q7 J
这里说说我在cygwin下编译的过程和问题。# R6 j/ s0 C/ t3 t, E  |
* L  e6 `8 A& T6 j7 t, m
1、首先安装cygwin;3 K: H6 C* G; v/ O+ P0 Q, E" C

) Q* B+ C! n/ H2、下载ffmpeg源码包:- f# M9 h' K$ R# ^9 M
- ~: @: Q6 I: [
3、下载ffmpeg源码后,解压到相应目录下;打开cygwin,进入ffmpeg相应目录;
; p# A. i# e1 O# }4 x; I3 }2 @5 `9 m( |+ p/ T5 |% b. _( L
4、开始编译,运行以下命令:
/ x# R4 A( V1 z./configure --enable-shared --enable-small --disable-vhook  Q# v  m2 z. }6 R
make
  T; e2 Y" v; Q: L! Pmake install" D1 m7 z- d9 c( x0 c; ^4 F3 c

6 l* l8 w6 B/ T说明:( Q, r- h' _+ M( P% ]: p
1)这次安装只是测试整个安装过程,所以配置的参数我只选了最基本的,如果想编译真正有用的ffmpeg,必须下载其它音频、视频解码库,比如faac、mp3lame、x264等等;0 d) N6 t  v: ^3 Y
& r# [) u/ K3 ?- {+ f; D; p" U2 w
2)在执行./configure过程中,曾经出现以下报错:3 a0 s8 L6 p. p0 @+ a: w  o
./configure7 ^) t0 W5 i/ c& L5 E2 G
./configure: line 9: $'\r': command not found- Q  P. l1 u/ g2 o( j: `
./configure: line 12: $'\r': command not found
6 m2 [- ]' Q5 q4 ]./configure: line 13: syntax error near unexpected token `$'{\r''
# v/ V( b6 N3 s$ |# f( l'/configure: line 13: `try_exec(){; y, y% O# _; z( ^5 l( {5 X
...
! A' A+ N5 l. }7 M这是因为我用的是SVN去下载ffmpeg源码,这个./configure文件中的换行是'\r\n',cygwin无法识别导致的,解决办法有几种:A)在linux下或cygwin下用svn去获取ffmpeg代码;B)使用工具替换'\r\n' -> '\n',我就是用UltraEdit去修改搞定的;C)通过google搜索以下关键词“ffmpeg configure unexpected token”;: G! [4 i; C- Y" T% W4 B

) X3 W- o$ h; u. e( C9 O) p3)在执行make命令过程中,又出现以下错误:
' [( W4 s- Z5 |5 ^% o- P3 E/cygdrive/e/package/ffmpeg_package/ffmpeg_x264_src_20071007/ffmpeg/libavcodec/mp$ u% {+ N; q9 j
egaudiodec.c:362: undefined reference to `_llrint'
, y: U2 U0 x- ~" y! GInfo: resolving _ff_sqrt_tab by linking to __imp__ff_sqrt_tab (auto-import)1 W2 }4 i2 ?7 p% ?! @
...9 ]4 {) n+ k7 I( d' V1 S% A
原因是llrint()这个函数是用在mingw中的,cygwin并不支持它。这个好像是一个数学相关的函数。可以通过google搜索“ffmpeg  llrint”来查找这个问题。我们要么修改ffmpeg代码,要么给cygwin打patch。打patch的话可以参考这个链接:
' h8 s* u! f$ S' {& N/ l我就参考它的建议修改了mpegaudiodec.c的代码:
; v$ |1 u' |$ \! x; F4 j把两个llrint()函数替换成lrint(),结果编译成功了。
' C2 a  E7 {  R9 Q% ~
2 o' J( i) g; j& r0 x/ }4 O) e/ {5、终于搞定!/ X& z  b& X2 [* @3 B0 v4 U1 y: x
回到windows目录下,看到已经生成了ffmpeg.exe/ffserver.exe,但是这个时候运行会报错。因为刚才我们是用动态方式编译的,所以生成的动态的dll:cygavcodec-51.dll/cygavformat-51.dll/cygavutil-49.dll,但是这些dll生成后,是放在类似libavcodec的目录下,所以要么加入到系统环境目录中,要么把他们拷贝出来与ffmpeg.exe放在同一目录下。# s- x( K1 D' J) [, D0 `
最后,也必须对cygwin的一系列dll加载到windows的系统PATH中。
8 \# e' r/ d2 f' B2 c% E% [; o1 G3 U8 C* @3 |* r3 T& J! X4 ]2 b7 B% |% a
OK,现在可以运行生成的ffmpeg了!!

该用户从未签到

2#
发表于 2021-3-10 10:54 | 只看该作者
cygwin下编译最简单的ffmpeg
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 13:22 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表