É possível instalar o ffmpeg e x264 em uma Synology Diskstation 209?

1

Completa novata linux aqui! :)

Estou tentando fazer com que minha incrível caixa NAS DS209 faça alguns transcodificadores para mim de alguns vídeos AVI em um formato adequado para o meu iTouch Aplicar - sim, eu poderia fazê-lo com outra máquina e Handbrake, mas seria muito útil para descarregar parte disso no NAS para fazer durante a noite.

Eu consegui instalar o ipkg no meu DS209 caixa NAS e brincou com a instalação de alguns pacotes (binutils, mono, bash etc).

Eu até consegui instalar o ffmpeg do ipkg e montar o perfil de linha de comando correto para fazer a codificação como um arquivo .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

No entanto, ao executar isso, recebo uma dependência ausente em libx264 .

Eu tentei construir isso a partir da fonte mais recente do git, mas recebo erros durante o processo de criação que eu não entendo (fora da minha profundidade).

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

Alguém mais pode tentar construí-lo ou me dar uma indicação do que posso fazer para isso? Tem sido uma boa experiência de aprendizado até agora!

Obrigado.

UPDATE: Em resposta às perguntas abaixo, este é o erro em que estou agora preso:

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

Eu não acho que estou perdendo nenhuma biblioteca e isso está usando o GCC 4.2.3. Alguma idéia?

    
por Kieran Benton 28.09.2009 / 00:06

2 respostas

1

Vá mais longe no log e suspeitarei que há um arquivo de cabeçalho ausente anteriormente.

Por exemplo, um problema semelhante foi encontrado aqui .

Eu tenho um DS411 +, se você quiser compartilhar como você chegou até onde você chegou, eu poderia ajudar a depurar isso com você.

    
por 24.07.2010 / 23:26
1

Eu percebo que este segmento é bem antigo agora, mas acabei de encontrar exatamente o mesmo problema compilando o mesmo arquivo no Synology DS212j. Eu estava tentando compilar handbrake para uso no meu NAS. Eu percebo que é provável que isso seja terrivelmente lento, mas para coisas que eu não estou com pressa, é sempre um computador de baixa potência, então eu também posso usá-lo!

Eu fiz algumas pesquisas e modifiquei o arquivo, e descobri que qualquer uma das instruções "vsub" ou "vadd" parece fazer com que o assembler (as) segte a falha. Eu me perdi no mundo ARM de várias versões e plataformas e realmente não encontrei uma boa referência de montagem para a CPU. Eu abandonei tentando consertar isso - achei que tentar reescrever a assembléia seria um exercício de futilidade.

O que acabei fazendo foi adicionar uma linha ao HandBrake-0.9.5 / contrib / x264 / module.defs:

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

Isso essencialmente adiciona o --disable-asm à linha ./configure para a biblioteca x264. Depois disso, a construção da libx264 funcionou.

Enquanto eu construía o handbrake, eu precisava instalar vários outros módulos do ipkg. A maioria deles pode ser facilmente identificada com os erros ou pesquisando os erros no Google.

Por fim, tive que desabilitar a construção da GUI, já que isso obviamente não funciona no NAS. Para fazer isso, eu comentei esta linha no HandBrake-0.9.5 / make / include / main.defs:

MODULOS + = gtk

Agora estou executando com sucesso o HandBrakeCLI no meu NAS Synology DS212j. Na verdade, é muito lento. Tenho certeza de que, desabilitando o código de montagem, é ainda mais lento, mas é mais rápido do que se não tivesse sido construído.

Minha primeira tarefa foi reduzir o tamanho de um Blu-Ray para 800x480. Eu imagino que processar um rip Blu-Ray completo seria o mais exigente possível. Com esse trabalho, ele processa um pouco menos de um quadro por segundo. Então, mais de 1 dia por hora de vídeo processado.

As coisas extras que eu posso lembrar que eu tive que fazer para que o HandBrake compilasse:  1. ipkg install perl-xml-parser  2. ipkg instala o yasm  3. Faça o download e compile intltool (eu construo o intltool-0.40.6)  4. Se você instalar o intltool em um local não padrão, adicione o diretório share / aclocal ao arquivo / opt / share / aclocal / dirlist (apenas crie um arquivo com uma linha): /your_install_prefix/share/aclocal

Eu sei que havia algumas outras coisas, mas não posso esquecer. Se alguém tentar fazer isso, eu ficaria feliz em ajudar se você encontrar um problema. Eu provavelmente também encontrei isso, então ver um erro em particular pode acionar minha memória.

    
por 30.01.2012 / 22:31