저장소(ubuntu 12.04) 버전이 내 시스템에서 작동하지 않았기 때문에 방금 mplayer2
소스( )에서 git://git.mplayer2.org/mplayer2-build.git
컴파일했습니다 . 오래된 하드웨어를 가지고 있기 때문에 하드웨어에 맞게 최적화하는 데 사용할 수 있는 컴파일러 플래그가 있는지 궁금합니다.
CPU는 Athlon XP 2200+(모바일 버전), 1GB RAM, 그래픽 카드: Nvidia GeForce4 420 Go입니다.
비슷한 사양을 가진 다른 구형 시스템에서도 동일한 작업을 수행하고 싶습니다.
CPU: Athlon 1.2 GHZ, 1GB RAM, 그래픽: [SiS] 65x/M650/740
답변1
일반적으로 권장됨
mplayer2 배포 저장소에서 가져온 버전이 작동하지 않는 경우 버그 추적 시스템에 작동하지 않는 것을 보고하여 귀하와 다른 사람들에게 도움이 되는 것이 좋습니다.
- 이번 릴리스에서는 하드웨어에 맞게 수정되었습니다.
- 최신 버전의 배포판으로 업그레이드하면 작동할 가능성이 높으므로 걱정할 필요가 없습니다.
- 이는 동일한 문제를 겪고 있지만 버그를 보고할 책임이 없는 다른 사람들에게 도움이 될 것입니다.
특정 시스템에서 재컴파일
여러분의 컴퓨터에 맞게 특별히 프로그램을 다시 컴파일하면 배포판에서 발표된 "일반" 스타일보다 더 나은 결과를 얻을 수 있을 것입니다(그런데 이것은 Gentoo 사람들이 자신의 시스템에 대해 내용을 다시 컴파일할 때 동기 중 하나입니다).
물론 속도가 어느 정도 향상될 수는 있지만 바이너리 이식성은 상실됩니다.
유니버설 컴파일
즉, 현재 Debian/Ubuntu 시스템에서 프로그램을 다시 컴파일하는 일반적인 방법은 다음과 같이 소스 패키지와 해당 빌드 종속성을 얻는 것입니다:
sudo apt-get build-dep mplayer2
sudo apt-get install fakeroot
apt-get source mplayer2
그런 다음 마지막 명령으로 생성된 디렉터리 내의 파일을 편집하여 debian/rules
, 및 의 값을 변경합니다.CFLAGS
CPPFLAGS
CXXFLAGS
LDFLAGS
귀하의 기계에 애플리케이션을 맞춤화하기 위해 무엇을 할 수 있습니까? 프로그램이 더 빠르게 실행되는 최적화 수준(예 -O2
: , -Os
또는 ) 을 시도해야 합니다("측정/벤치마크" 읽기, 아래 참조).-O3
실제로 프로그램을 컴파일하려면 다음 명령으로 생성된 디렉터리에서 실행해야 합니다 apt-get source mplayer2
.
fakeroot debian/rules binary
sudo dpkg -i ../*.deb
GCC 4.7 이상을 사용하면 -Ofast
비디오 재생에 크게 해를 끼치지는 않지만 몇 가지 개선 사항을 제공하는 편집 수준을 사용해 볼 수도 있습니다(프레임이 누적되지 않아 오디오와 비디오가 동기화되지 않을 만큼 충분함). .
컴파일의 시스템/하드웨어 특정 부분
프로그램이 실행될 컴퓨터용으로 특별히 프로그램을 컴파일하려면 GCC -mach=native
플래그를 사용하는 것이 가장 좋습니다. 이로 인해 결과 바이너리를 다른 시스템에서 사용할 수 없게 될 수 있지만 시스템에만 관심이 있는 한 이는 올바른 접근 방식입니다.
이것을 사용할 때 내 Core i5-2410M에서 어떤 옵션이 활성화되어 있는지에 대한 아이디어를 제공하기 위해 -march=native
(사이트 레이아웃을 손상시키지 않도록 출력 형식이 다시 지정됨):
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
거기에서 GCC가 내 컴퓨터에 있는 일부 "고급" 지시어(AVX)와 그렇지 않은 다른 지시어(AVX2)를 감지하는 것을 볼 수 있습니다.
결과를 측정하는 방법
팁으로 벤치마킹하려면 다음과 같은 짧은 동영상을 재생해 보세요 foo.mkv
.
mplayer -benchmark -vo null -nosound foo.mkv
이렇게 하면 비디오가 최대한 빨리 "재생"되고 전체 비디오를 "재생"하는 데 몇 초가 걸리는지 알려줍니다. 비활성화하기 때문에 "play"라고 따옴표로 묶었습니다.
- 일반적으로 사운드 디코딩은
-nosound
비디오의 다른 부분을 재생하는 것보다 시간이 덜 걸립니다. - 실제 소요 시간전시하다동영상(
-vo null
).
그래픽 카드가 방해가 되는지 확인하려면 -vo null
위 명령 중 해당 부분을 생략하고 비디오가 실시간보다 빠르게 재생되기를 원하는지(또는 목표가 무엇이든) 확인할 수 있습니다.
마지막 단어, 1부: mplayer2의 구체적인 사례
즉, mplayer2(및 배포판에서 가져온 경우 일반 mplayer)에 대한 대부분의 처리는 라이브러리로 "오프로드"됩니다. 특히, 대부분의 디코딩은 먼저 컴파일/최적화되어야 하는 패키지인 libav 또는 ffmpeg에 의해 수행됩니다.
업스트림(mplayer2 아님)에서 가져온 "바닐라" mplayer의 경우 많은 라이브러리의 내장 복사본을 사용합니다. 즉, 업스트림 소스에서 컴파일하면(위에서 제공한 방법 대신
apt-get source mplayer2
) libav/ffmpeg를 소유하고 있으며 대안보다 훨씬 빠를 것입니다.
최종 한마디, 2부: 재컴파일하지 않고도 몇 가지 이점을 얻을 수 있습니다.
일부 구성 매개변수를 변경하는 경우 배포판에서 제공하는 mplayer/mplayer2 바이너리를 항상 다시 컴파일할 필요는 없습니다. 위의 모든 작업을 피하기 위해 다음과 같은 비디오를 재생하는 것으로 시작하겠습니다.
mplayer -framedrop -lavdopts fast:skipframe=nonref:skiploopfilter=nonref foo.mkv
물론 방금 제공한 옵션을 사용할 수 있으며 맨페이지에는 및 등 skipframe
의 가능한 값이 문서화되어 있습니다.skiploopfilter
영상을 시청하시면서 행복하세요!