Recomendação geral
Se a versão retirada do seu repositório de distribuição do mplayer2 não trabalhar para você, é uma coisa boa para relatar o que não funcionou para o bug sistema de rastreamento, para que ele tenha benefícios para você e para os outros:
- Fixa-se para o seu hardware neste lançamento da sua distribuição.
- Ele funcionará (com alta probabilidade) quando você atualizar para uma versão mais recente da distribuição, sem ter que se preocupar.
- Ele beneficiará outras pessoas que possam ter o mesmo problema, mas, como você, não assumiu a tarefa de relatar o erro.
Recompilação em um sistema particular
Recompilar o programa especificamente para suas máquinas provavelmente terá melhores resultados do que o sabor "genérico" que uma distribuição libera é, BTW, uma das motivações que o pessoal do Gentoo tem quando eles recompilar as coisas para seus próprios sistemas).
Claro, você pode ganhar algumas melhorias na velocidade, mas você perde o portabilidade dos binários.
A compilação genérica
Dito isto, a maneira geral de recompilar um programa em uma corrente Sistema Debian / Ubuntu é pegar o pacote fonte e sua compilação dependências com algo como:
sudo apt-get build-dep mplayer2
sudo apt-get install fakeroot
apt-get source mplayer2
edite o arquivo debian/rules
dentro do diretório criado pelo último
comando para alterar os valores que vão no CFLAGS
, CPPFLAGS
,
CXXFLAGS
e LDFLAGS
.
O que você pode fazer para adaptar o aplicativo às suas máquinas? Voce terá que
experimento (leia-se "medida / benchmark", veja abaixo) com qual nível de
otimização (como -O2
, -Os
ou -O3
) o programa é executado mais rapidamente.
Para realmente compilar o programa, você precisará executar, dentro do diretório
criado pelo comando apt-get source mplayer2
:
fakeroot debian/rules binary
sudo dpkg -i ../*.deb
Com o GCC versões 4.7 ou mais recentes, você pode até experimentar o -Ofast
nível de compilação, que para reproduzir vídeos não vai causar muito
prejudicar, mas que pode dar-lhe algumas melhorias (o suficiente para não acumular
quadros e obter áudio e vídeo fora de sincronia).
As partes específicas do sistema / hardware da compilação
Para compilar o programa especificamente para a máquina onde você será
Para executá-lo, é bom usar o sinalizador -mach=native
do GCC. Isso vai
provavelmente tornar os binários produzidos inutilizáveis em outros sistemas, mas contanto que
como você se importa apenas com o seu sistema, esse é o caminho a seguir.
Só para você ter uma ideia de quais opções estão ativadas no meu Core i5-2410M
quando eu uso -march=native
, veja (saída reformatada para não destruir o
layout do site):
gcc -march=native -E -v - < /dev/null 2>&1 | grep cc1
/usr/lib/gcc/i486-linux-gnu/4.7/cc1 -E -quiet -v -imultiarch i386-linux-gnu - \
-march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt \
-mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 \
-mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt -mno-rdrnd \
-mno-f16c -mno-fsgsbase --param l1-cache-size=32 \
--param l1-cache-line-size=64 \
--param l2-cache-size=3072 -mtune=corei7-avx
De lá, você pode ver que o GCC detectou algumas instruções "avançadas" que meu computador tem (AVX) e outros que não tem (AVX2).
Como medir os resultados
Como sugestão, para avaliar, basta reproduzir um vídeo curto, digamos, foo.mkv
com:
mplayer -benchmark -vo null -nosound foo.mkv
Isso "reproduzirá" o vídeo o mais rápido possível e informará quantas segundos que levou para "reproduzir" o vídeo em sua totalidade. Note que eu disse "play" entre aspas, porque estamos desativando:
- A decodificação de som com
-nosound
. Geralmente menor tempo é gasto aqui, em comparação com as outras partes de reprodução de um vídeo. - O tempo necessário para realmente exibir o vídeo (
-vo null
).
Para ver se a placa de vídeo está atrapalhando ou não, você pode omitir a parte -vo
null
do comando acima e ver se o vídeo desejado é reproduzido mais rápido
do que em tempo real (ou qualquer que seja seu objetivo).
Algumas palavras finais, parte 1: o caso específico do mplayer2
Dito isto, muito do mplayer2 (e mplayer regular, quando este mais tarde é tirado de distribuições) é que a maior parte de seu processamento é "descarregada" para bibliotecas. Em particular, muito da decodificação é feita por libav ou ffmpeg, e esses são os pacotes que devem ser compilados / otimizados no primeiro lugar.
No caso do mplayer "vanilla" (não mplayer2) tirado do upstream, ele usa
cópias embutidas de muitas bibliotecas, o que significa que, se você compilá-lo de
as fontes upstream (em vez do método que eu dei acima com
apt-get source mplayer2
etc), ele também irá compilar sua própria libav / ffmpeg
e tem o potencial de ser muito mais rápido que as alternativas.
Algumas palavras finais, parte 2: obter alguns ganhos sem recompilar
Nem sempre é necessário recompilar os binários mplayer / mplayer2 fornecido pela sua distribuição, se você alterar alguns parâmetros de configuração. Para evitar todo o trabalho acima, eu começaria tocando os vídeos com algo como:
mplayer -framedrop -lavdopts fast:skipframe=nonref:skiploopfilter=nonref foo.mkv
Claro, você pode jogar com as opções que eu acabei de te dar
manpage documenta os valores possíveis para skipframe
e skiploopfilter
,
entre outras coisas.
E feliz assistindo vídeos!