是否可以在 Synology Diskstation 209 上安装 ffmpeg 和 x264?

是否可以在 Synology Diskstation 209 上安装 ffmpeg 和 x264?

我是完全的 Linux 新手!:)

我正在尝试让我的出色的 DS209 NAS 盒为我把一些 AVI 视频转码为适合我的 Apply iTouch 的格式 - 是的,我可以使用另一台机器和 Handbrake 来完成这项工作,但将其中一些工作转移到 NAS 上以便在夜间完成会非常有用。

我已经成功了安装 ipkg到我的 DS209 NAS 盒上,并尝试安装一些软件包(binutils、mono、bash 等)。

我甚至设法从 ipkg 安装了 ffmpeg,并组合了正确的命令行配置文件以将其编码为 .sh 文件:

time ffmpeg -y -i $1 -f mp4 -title $2 -vcodec libx264 -level 21 -s 426×320 -b 512k -bt 512k -bufsize 4M -maxrate 4M -g 250 -coder 0 -threads 0 -acodec libfaac -ac 2 -ab 64k $3

但是运行这个程序时我发现缺少依赖项libx264

我试过了建造这个来自 git 中的最新源代码,但是在 make 过程中我遇到了一些我无法理解的错误(远远超出了我的理解范围)。

encoder/set.c: In function 'x264_sei_version_write':
encoder/set.c:491: error: 'X264_VERSION' undeclared (first use in this function)
encoder/set.c:491: error: (Each undeclared identifier is reported only once
encoder/set.c:491: error: for each function it appears in.)
make: *** [encoder/set.o] Error 1

有没有人可以尝试构建它或给我一些建议,告诉我该怎么做才能实现它?到目前为止,这是一次很好的学习经历!

谢谢。

更新:针对以下问题,这是我现在遇到的错误:

DISKSTATION> make
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/mc.o common/mc.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/predict.o common/predict.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/pixel.o common/pixel.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/macroblock.o common/macroblock.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/frame.o common/frame.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/dct.o common/dct.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/cpu.o common/cpu.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/cabac.o common/cabac.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/common.o common/common.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/mdate.o common/mdate.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/rectangle.o common/rectangle.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/set.o common/set.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/quant.o common/quant.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/deblock.o common/deblock.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/vlc.o common/vlc.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/mvpred.o common/mvpred.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/bitstream.o common/bitstream.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/analyse.o encoder/analyse.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/me.o encoder/me.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/ratecontrol.o     encoder/ratecontrol.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/set.o encoder/set.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/macroblock.o encoder/macroblock.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/cabac.o encoder/cabac.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/cavlc.o encoder/cavlc.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/encoder.o encoder/encoder.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o encoder/lookahead.o encoder/lookahead.c
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/arm/mc-c.o common/arm/mc-c.c
common/arm/mc-c.c: In function 'x264_weight_cache_neon':
common/arm/mc-c.c:86: warning: assignment discards qualifiers from pointer target type
common/arm/mc-c.c:91: warning: assignment discards qualifiers from pointer target type
common/arm/mc-c.c:96: warning: assignment discards qualifiers from pointer target type
common/arm/mc-c.c:98: warning: assignment discards qualifiers from pointer target type
common/arm/mc-c.c: In function 'x264_mc_init_arm':
common/arm/mc-c.c:232: warning: assignment discards qualifiers from pointer target type
common/arm/mc-c.c:233: warning: assignment discards qualifiers from pointer target type
common/arm/mc-c.c:234: warning: assignment discards qualifiers from pointer target type
gcc -Wshadow -O3 -fno-fast-math  -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -fPIC -s -fomit-frame-pointer -fno-tree-vectorize   -c -o common/arm/predict-c.o common/arm/predict-c.c
gcc -Wall -I. -std=gnu99 -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -c -DPIC -o common/arm/cpu-a.o common/arm/cpu-a.S
gcc: Internal error: Segmentation fault (program as)
Please submit a full bug report.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
make: *** [common/arm/cpu-a.o] Error 1

我认为我没有遗漏任何库,并且使用的是 GCC 4.2.3。有什么想法吗?

答案1

进一步追溯日志,我会怀疑早些时候缺少一个头文件。

例如,发现了一个类似的问题这里

我有一台 DS411+,如果你想分享你是如何做到的,我可以帮你调试它。

答案2

我意识到这个帖子现在已经很老了,但我刚刚在 Synology DS212j 上编译同一个文件时遇到了完全相同的问题。我试图编译 handbrake 以供在我的 NAS 上使用。我意识到这可能会非常慢,但对于我不着急的东西,它是一台始终处于低功耗状态的计算机,所以我不妨使用它!

我仔细查看并修改了文件,发现任何“vsub”或“vadd”指令似乎都会导致汇编程序 (as) 出现分段错误。我迷失在多个版本和平台的 ARM 世界中,并没有真正找到适合 CPU 的汇编参考。我放弃了修复这个问题的尝试——我认为尝试重写汇编是徒劳的。

我最终在 HandBrake-0.9.5/contrib/x264/module.defs 中添加了一行:

X264.CONFIGURE.extra += --disable-asm

这实际上是将 --disable-asm 添加到 x264 库的 ./configure 行。此后,构建 libx264 就可以正常工作了。

在构建 handbrake 的过程中,我需要安装各种其他 ipkg 模块。大多数模块都可以通过查看错误或谷歌搜索错误轻松解决。

最后,我不得不禁用 GUI 的构建,因为这显然无法在 NAS 上运行。为此,我在 HandBrake-0.9.5/make/include/main.defs 中注释掉了以下行:

模块 += gtk

现在,我成功地在 Synology DS212j NAS 上运行了 HandBrakeCLI。事实上,它非常慢。我确信,通过禁用汇编代码,它会变得更慢,但它比根本没有构建它要快。

我的第一个任务是将完整的蓝光翻录缩小到 800x480。我想处理完整的蓝光翻录可能非常困难。对于这项工作,它每秒处理不到一帧。因此,每小时处理的视频需要超过 1 天的时间。

我记得为了让 HandBrake 编译我必须做的额外事情是:1. ipkg 安装 perl-xml-parser 2. ipkg 安装 yasm 3. 下载并编译 intltool(我构建了 intltool-0.40.6)4. 如果将 intltool 安装到非标准位置,请将 share/aclocal 目录添加到 /opt/share/aclocal/dirlist 文件(只需创建一个包含一行的文件): /your_install_prefix/share/aclocal

我知道还有其他一些事情,但我无法忘记。如果有人尝试这样做,如果您遇到问题,我很乐意提供帮助。我可能也遇到过这种情况,所以看到一个特定的错误可能会触发我的记忆。

相关内容