完整的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 中的最新源代码构建它,但是在制作过程中我遇到了我不理解的错误(超出了我的深度)。
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。有任何想法吗?
再回到日志中,我会怀疑之前缺少头文件。
例如,在这里发现了类似的问题。
我有一个 DS411+,如果你想分享你是如何做到的,我可以帮你调试它。
我意识到这个线程现在已经很老了,但是我在 Synology DS212j 上编译同一个文件时遇到了完全相同的问题。我试图编译手刹以在我的 NAS 上使用。我意识到这可能会非常慢,但是对于我不急于使用的东西,它是一台始终处于低功耗状态的计算机,所以我不妨使用它!
我做了一些探索和修改文件,发现任何“vsub”或“vadd”指令似乎都会导致汇编器(as)出现段错误。我迷失在多个版本和平台的 ARM 世界中,并没有真正找到适合 CPU 的组装参考。我放弃了尝试解决这个问题——我认为尝试重写程序集将是徒劳的。
我最终做的是在 HandBrake-0.9.5/contrib/x264/module.defs 中添加一行:
X264.CONFIGURE.extra += --disable-asm
这实际上将 --disable-asm 添加到 x264 库的 ./configure 行。在此之后,构建 libx264 工作。
当我着手构建手刹时,我需要安装各种其他 ipkg 模块。通过查看错误或谷歌搜索错误,可以很容易地找出其中的大多数。
最后,我不得不禁用 GUI 的构建,因为这显然不适用于 NAS。为此,我在 HandBrake-0.9.5/make/include/main.defs 中注释掉了这一行:
模块 += gtk
现在我在我的 Synology DS212j NAS 上成功运行 HandBrakeCLI。它实际上非常缓慢。我敢肯定,通过禁用汇编代码,它会更慢,但它比根本没有构建它要快。
我的第一个任务是将完整的蓝光翻录缩小到 800x480。我想处理完整的蓝光翻录会尽可能地苛刻。通过这项工作,它每秒处理的帧数略低于一帧。因此,每小时处理超过 1 天的视频。
我记得我必须做的额外事情是让 HandBrake 编译: 1. ipkg install perl-xml-parser 2. ipkg install yasm 3. 下载并编译 intltool(我构建 intltool-0.40.6) 4. 如果你将 intltool 安装到非标准位置,将 share/aclocal 目录添加到 /opt/share/aclocal/dirlist 文件(只需创建一个包含一行的文件):
/your_install_prefix/share/aclocal
我知道还有一些其他的事情,但我不能忘记。如果有人尝试这样做,如果您遇到问题,我很乐意提供帮助。我可能也遇到过,所以看到一个特定的错误可能会触发我的记忆。