【问题标题】:x264 configure linking and building problemsx264配置链接和构建问题
【发布时间】:2014-02-05 13:41:23
【问题描述】:

我正在尝试在 Ubuntu 32 位上从源代码构建 x264,以便将 jpg 或 png 图像序列转换为 mp4 视频:x264 sitesample images

当我运行此命令时,下载的二进制文件能够将序列转换为 mkv 视频(或其他几种格式):

./x264dist ~/Dev/x264emp/img/FLYOVER%4d.JPG -o abc.mkv

x264dist 是我从该站点下载的二进制文件的重命名。

但是,当我获取源代码并使用简单的配置进行编译时:

$ ./configure --enable-shared --enable-static --enable-pic

platform:      X86
system:        LINUX
cli:           yes
libx264:       internal
shared:        yes
static:        yes
asm:           yes
interlaced:    yes
avs:           avxsynth
lavf:          no
ffms:          no
mp4:           no
gpl:           yes
thread:        posix
opencl:        yes
filters:       crop select_every 
debug:         no
gprof:         no
strip:         no
PIC:           yes
bit depth:     8
chroma format: all

然后$ make。然后我使用二进制文件运行与上面完全相同的命令,但出现此错误:

./x264 ~/Dev/x264emp/img/FLYOVER%4d.JPG -o abc.mkv
raw [error]: raw input requires a resolution.
x264 [error]: could not open input file `/home/tmd/Dev/x264emp/img/FLYOVER%4d.JPG' via any method!

它似乎根本无法读取任何输入。但至少我仍然能够在该二进制文件上运行 --help

然后我意识到下载的二进制文件是3.5Mb,而我的自定义编译结果是1.5Mb 二进制文件。

所以我只想知道官方构建使用的构建配置是什么,和/或我是否缺少任何导致此问题的依赖项。

我尝试构建自己的原因是因为我想使用 Emscripten 将 x264 库移植到 Javascript 中。有一个使用 FFmpeg 的解决方案,但似乎我不需要整个视频处理库,只需要一个简单的 H264 编解码器。所以我需要解决配置/编译/链接问题才能正确移植。

可能类似https://stackoverflow.com/questions/19445075/how-to-configure-x264-build-before-running-make-on-os-x

【问题讨论】:

    标签: c linux build compilation x264


    【解决方案1】:

    它无法从您的输入中读取,因为您在没有 lavf 支持的情况下编译它:lavf: no 所以它只能将原始 yuv 和 y4m 文件作为输入(我怀疑您是否安装了 avxsynth)。

    要使用 lavf 编译 x264,您需要安装 ffmpeg/libav 库并位于 gcc 搜索路径中,或者您需要在 configure 中使用以下内容为它们提供路径:

    --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib"

    此外,您可能需要自己编译 ffmpeg/libav,因为 x264 需要足够新的库,并且可能拒绝使用预构建存储库中的库。 x264 被编写为使用来自 ffmpeg/libav 的 master 分支的版本,并且可能不适用于不需要新 API 的稳定分支。所以如果你认为你已经安装了所有需要的库而不是查看 config.log 文件来找出 x264 拒绝与它们链接的原因。

    【讨论】:

    • 非常感谢您提供的信息丰富的答案。我从源代码安装了最新的 libav。然后重建整个事情。结果现在是 46Mb x264 二进制文件。它能够构建图像序列。但是,与官方构建的 3.5Mb 相比,它太大了。为什么呢?我接受你的回答。但是有什么方法可以让我获得接近 3.5Mb 独立官方版本的东西吗?
    • 首先确保您编译的 ffmpeg/libav 没有调试信息 (--disable-debug) 或剥离二进制文件。 x264 的官方版本也使用 UPX iirc 压缩。
    • 太棒了!我试过了,现在二进制文件减少到 11Mb(仍然比官方高一点)。然后我将 l-smash 用于 mp4(人们使用 gpac 但我没有使用)。事情进展顺利。很抱歉在这里成为菜鸟,但是“剥离二进制文件”是什么意思?
    • “strip”是指使用GNU strip from binutilsanother strip man。如果你还不知道它是什么,这里是UPX
    【解决方案2】:

    我认为您需要构建静态库或共享库,我不确定当您启用两者时会发生什么。

    【讨论】:

    • 实际上我尝试了其中一个或两个,或者一个都没有,它们都导致 1.5Mb/1.6Mb 和不可用的二进制文件。 (只能使用 ./x264 --help 之类的东西。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多