Полный Linux-новичок здесь! :)
Я пытаюсь заставить свой блестящий NAS-сервер DS209 сделать для меня некоторую перекодировку нескольких видео AVI в формат, подходящий для моего Apply iTouch - да, я мог бы сделать это с другой машиной и Handbrake, но было бы действительно полезно разгрузить некоторые этого в NAS, чтобы сделать в одночасье.
Мне удалось установить ipkg на мой NAS-сервер DS209 и поигрался с установкой некоторых пакетов (binutils, mono, bash и т. д.).
Мне даже удалось установить ffmpeg из ipkg и собрать правильный профиль командной строки для кодирования в виде файла .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. Любые идеи?
Я понимаю, что этот поток сейчас довольно старый, но я только что столкнулся с той же проблемой при компиляции того же файла на моем Synology DS212j. Я пытался скомпилировать ручной тормоз для использования на своем NAS. Я понимаю, что это, вероятно, будет ужасно медленным, но для вещей, к которым я не спешу, это всегда маломощный компьютер, так что я могу его использовать!
Я немного покопался и изменил файл, и обнаружил, что любая из инструкций «vsub» или «vadd», похоже, вызывает ошибку сегментирования ассемблера (as). Я потерялся в мире ARM множества версий и платформ и действительно не нашел хорошего справочника по сборке процессора. Я отказался от попыток исправить это - я подумал, что попытки переписать сборку будут бесполезными.
В итоге я добавил строку в HandBrake-0.9.5 / contrib / x264 / module.defs:
X264.CONFIGURE.extra + = --disable-asm
По сути, это добавляет --disable-asm в строку ./configure библиотеки x264. После этого сборка libx264 заработала.
Когда я приступил к сборке ручного тормоза, мне нужно было установить различные другие модули ipkg. Большинство из них можно довольно легко выяснить, посмотрев на ошибки или погуглив.
Наконец, мне пришлось отключить сборку графического интерфейса, так как это явно не работает на NAS. Для этого я закомментировал эту строку в HandBrake-0.9.5 / make / include / main.defs:
МОДУЛИ + = gtk
Теперь я успешно запускаю HandBrakeCLI на своем NAS-устройстве Synology DS212j. На самом деле это очень медленно. Я уверен, что, отключив ассемблерный код, он будет еще медленнее, но быстрее, чем если бы он вообще не был построен.
Моей первой задачей было сжать полный диск Blu-Ray до 800x480. Я полагаю, что обработка полного копирования Blu-Ray будет настолько сложной, насколько это возможно. С этой задачей он обрабатывает чуть меньше кадра в секунду. Так что более 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
Я знаю, что было еще кое-что, но не могу забыть. Если кто-то попытается это сделать, я буду рад помочь, если у вас возникнут проблемы. Я, наверное, тоже с этим сталкивался, поэтому конкретная ошибка может вызвать у меня память.
Вернитесь в журнал, и я подозреваю, что ранее отсутствовал файл заголовка.
Например, обнаружена похожая проблема Вот.
У меня есть DS411 +, и если вы хотите поделиться своими достижениями, я могу помочь вам отладить его.