제가 필요해서 원본 출처 사이트 내용으로 작업하며 따로 메모장에 저장해 둔 내용을 약간 손봐서 올립니다.
원본 사이트 내용에서 필요없어 보이는 부분들을 생략했습니다.
omxplayer는 smi자막을 지원하지 않고, kodi는 영상을 보기 위해 거쳐야 할 단계가 많은 게 싫어서 삽을 떴습니다.
youtube-dl 로 유튜브에서 1080p 60fps뮤직비디오들을 다운로드 받아 테스트 해 보니 프레임드랍 0%로 재생 잘 됩니다.
아래 내용은 빌드한 mpv를 이용해 1080p 60fps 뮤직비디오를 재생한 결과입니다.
프레임드랍이 발생한 경우 재생 시간 표시 오른쪽에 dropped: xx% 식으로 표시됩니다(아마도).
Playing: 60 FPS _ 1080P BLACKPINK - 뚜두뚜두 (DDU DU DDU DU)_MV-yi7AZyBzurc.mp4
11:59 PM (+) Video --vid=1 (*) (h264 1920x1080 60.000fps)
11:59 PM (+) Audio --aid=1 --alang=eng (*) (aac 2ch 44100Hz)
11:59 PM AO: [alsa] 44100Hz stereo 2ch float
11:59 PM Using hardware decoding (rpi).
11:59 PM VO: [rpi] 1920x1080 mmal
11:59 PM AV: 00:03:35 / 00:03:35 (99%) A-V: 0.000
11:59 PM Exiting... (End of file)
그리고 본문의 빌드 팁은 라즈베리파이 3, 3B+에 라즈비안 OS를 사용중인 경우에 해당되는 팁입니다. 다른 버전의 기기나, 다른 OS에서는 작동을 보장하지 않습니다.
1단계: 빌드 전 사전작업으로 라즈비안을 최신 상태로 업데이트 합니다.
sudo apt-get update
sudo apt-get dist-upgrade
2단계: 의존성 소프트웨어 설치
sudo apt-get install automake checkinstall libsdl2-dev libva-dev libluajit-5.1-dev libtool libvdpau-dev libxcb-shm0-dev texinfo libfontconfig1-dev libfribidi-dev python-docutils libbluray-dev libjpeg-dev libtheora-dev libvorbis-dev libgnutls28-dev linux-headers-rpi2 libomxil-bellagio-dev
3단계: 빌드 작업에 필요한 디렉토리를 만듭니다.
cd ~
mkdir FFmpeg_Build
sudo mkdir -p /usr/share/doc/lame
4단계: x264 VIDEO ENCODER 빌드하기
cd ~/FFmpeg_Build
wget https://download.videolan.org/x264/snapshots/x264-snapshot-20180125-2245-stable.tar.bz2
tar jxvf x264-snapshot-20180125-2245-stable.tar.bz2
cd x264-snapshot-20180125-2245-stable
./configure --prefix=/usr --enable-shared --disable-opencl --extra-cflags="-march=armv8-a+crc -mfpu=neon-fp-armv8 -mtune=cortex-a53"
*아래 명령은 바이너리를 빌드합니다. -j2 옵션은 코어를 2개 사용한다는 의미이며, -j4 옵션을 주면 코어 4개를 모두 사용할 수 있으나 작업 도중 발열이나 CPU과부하로 라즈베리파이가 멈출 수도 있으므로 저는 안전하게 두 개만 사용하는 것을 기준으로 작성합니다.
make -j2
*checkinstall 을 실행하면 질문에 순서대로 y, x264 입력, 이후 리스트 메뉴가 나오는데 3을 입력해 Version 옵션을 선택한 후 버전 넘버로 20180125를 입력하고 엔터,엔터.
sudo checkinstall make install
sudo ldconfig
5단계: fdk-aac AAC 오디오 인코더 빌드하기
cd ~/FFmpeg_Build
wget https://downloads.sourceforge.net/opencore-amr/fdk-aac-0.1.5.tar.gz
tar xzvf fdk-aac-0.1.5.tar.gz
cd fdk-aac-0.1.5
./autogen.sh
./configure --prefix=/usr --enable-shared
make -j2
*checkinstall 을 실행하면 질문에 순서대로 y, AAC-FDK, 엔터키 입력
sudo checkinstall make install
sudo ldconfig
6단계: libvpx VP9비디오 인코더 빌드하기
cd ~/FFmpeg_Build
wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.1.tar.bz2
tar jxvf libvpx-1.6.1.tar.bz2
cd libvpx-1.6.1
./configure --prefix=/usr --enable-shared --disable-examples --disable-unit-tests --enable-vp9-highbitdepth
make -j2
*checkinstall 을 실행하면 질문에 순서대로 y, VP9, 엔터 키 입력
sudo checkinstall make install
sudo ldconfig
7단계: opus 오디오 인코더 빌드하기
cd ~/FFmpeg_Build
wget https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz
tar xzvf opus-1.2.1.tar.gz
cd opus-1.2.1
./configure --prefix=/usr --enable-shared
make -j2
*checkinstall 실행후 질문에 순서대로 y, Opus, 엔터 입력
sudo checkinstall make install
sudo ldconfig
8단계: lame mp3 오디오 인코더 빌드하기
cd ~/FFmpeg_Build
wget https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar xzvf lame-3.100.tar.gz
cd lame-3.100
./configure --prefix=/usr --enable-shared
make -j2
*checkinstall 실행 후 순서대로 y, MP3-LAME, 엔터 키 입력
sudo checkinstall make install
sudo ldconfig
9단계: libass 자막 랜더러 빌드하기
cd ~/FFmpeg_Build
wget https://github.com/libass/libass/releases/download/0.13.7/libass-0.13.7.tar.gz
tar zxvf libass-0.13.7.tar.gz
cd libass-0.13.7
./configure --prefix=/usr --enable-shared
make -j2
*checkinstall 실행 후 질문에 순서대로 y, libass, 엔터 키 입력
sudo checkinstall make install
sudo ldconfig
10단계: FFmpeg빌드하기
cd ~/FFmpeg_Build
wget https://www.ffmpeg.org/releases/ffmpeg-3.4.1.tar.bz2
tar jxvf ffmpeg-3.4.1.tar.bz2
cd ffmpeg-3.4.1
./configure --prefix=/usr --enable-gpl --enable-nonfree --enable-static --enable-libx264 --enable-libfdk-aac --enable-libvpx --enable-libopus --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-omx --enable-omx-rpi --enable-mmal --enable-libxcb --enable-libfreetype --enable-libass --enable-gnutls --disable-opencl --extra-cflags="-march=armv8-a+crc -mfpu=neon-fp-armv8 -mtune=cortex-a53"
*이번 빌드 작업은 소스코드가 가장 방대하기 때문에 25분 이상의 시간이 걸립니다. 작업 도중 건드리지 말고 최대한 내버려두되 도중에 화면이 꺼져 상태를 확인하려거든 쉬프트 키를 눌러 모니터를 깨웁시다.
혹시 작업 도중 라즈베리파이가 아예 멈춰 강제 재부팅을 해야 하는 경우 작업 폴더(ffmpeg-3.4.1)를 삭제한 후 10단계를 처음부터 다시 시작해야 합니다. 저는 make -j4로 작업하다 라즈베리파이가 과열로 뻗어서 한 번 재시도했습니다. 다른 모든 작업을 -j4로 했더라도 이 빌드작업만큼은 -j2옵션을 추천.
make -j2
*checkinstall 실행 후 순서대로 y, FFmpeg, 엔터 키 입력
sudo checkinstall make install
sudo ldconfig
11단계: MPV 빌드하기
sudo wget -P /opt/vc/lib https://github.com/raspberrypi/firmware/raw/master/hardfp/opt/vc/lib/libEGL.so
sudo wget -P /opt/vc/lib https://github.com/raspberrypi/firmware/raw/master/hardfp/opt/vc/lib/libGLESv2.so
sudo wget -P /opt/vc/lib/pkgconfig https://github.com/raspberrypi/firmware/raw/master/hardfp/opt/vc/lib/pkgconfig/egl.pc
sudo wget -P /opt/vc/lib/pkgconfig https://github.com/raspberrypi/firmware/raw/master/hardfp/opt/vc/lib/pkgconfig/glesv2.pc
cd ~/FFmpeg_Build
wget https://github.com/mpv-player/mpv/archive/v0.27.0.tar.gz
tar zxvf v0.27.0.tar.gz
cd mpv-0.27.0
./bootstrap.py
다음은 방금 다운로드 받아 압축을 해제한 mpv-0.27.0 디렉토리 안의 wscript 파일을 수정해야 합니다.
vim 이나 nano, 혹은 GUI용 에디터를 써도 좋습니다.
wascript 파일을 열어 아래 내용을 찾습니다.
-------------------------------------------------------------
'name': '--rpi',
'desc': 'Raspberry Pi support',
'func': compose_checks(
check_cc(cflags="-isystem/opt/vc/include/ "+
"-isystem/opt/vc/include/interface/vcos/pthreads " +
"-isystem/opt/vc/include/interface/vmcs_host/linux " +
"-fgnu89-inline",
linkflags="-L/opt/vc/lib",
header_name="bcm_host.h",
lib=['mmal_core', 'mmal_util', 'mmal_vc_client', 'bcm_host']),
# We still need all OpenGL symbols, because the vo_opengl code is
# generic and supports anything from GLES2/OpenGL 2.1 to OpenGL 4 core.
check_cc(lib="EGL"),
check_cc(lib="GLESv2"),
-------------------------------------------------------------
여기서,
lib=['mmal_core', 'mmal_util', 'mmal_vc_client', 'bcm_host']),
# We still need all OpenGL symbols, because the vo_opengl code is
# generic and supports anything from GLES2/OpenGL 2.1 to OpenGL 4 core.
check_cc(lib="EGL"),
부분을 아래 내용으로 변경해 줍니다.
lib=['mmal_core', 'mmal_util', 'mmal_vc_client', 'bcm_host', 'vchostif']),
# We still need all OpenGL symbols, because the vo_opengl code is
# generic and supports anything from GLES2/OpenGL 2.1 to OpenGL 4 core.
check_cc(linkflags="-lbrcmGLESv2", lib="EGL"),
수정이 끝났으면 문서를 저장하고 터미널로.
export LIBRARY_PATH=/opt/vc/lib
export PKG_CONFIG_PATH=/opt/vc/lib/pkgconfig
export CPATH=/opt/vc/include
./waf configure --prefix=/usr --enable-rpi
./waf build -j2
*checkinstall 실행후 순서대로 y, mpv, 엔터 키 입력
sudo checkinstall ./waf install
sudo ldconfig
이제 mpv 설정파일을 생성합니다.
mkdir -p ~/.config/mpv
echo -e "--fullscreen\nrpi-background=yes\nsub-codepage=cp949" > ~/.config/mpv/mpv.conf
sudo chown -R $LOGNAME:$LOGNAME ~/.config/mpv
라즈베리파이의 메뉴->기본설정(Preferences)->Raspberry Pi Configuration-> Performance
에서 GPU Memory 를 160MB로 수정하고 재부팅(160MB미만으로 되어 있었던 경우만)
12단계: mpv를 기본 동영상 플레이어로 설정하고 동영상을 우클릭해서 "MPV로 열기"기능을 사용할 수 있도록 설정
동영상 파일을 우클릭해 "Open With..."를 선택
"Custom Command Line" 탭 클릭
"Command line to excute" 박스에 mpv %f 입력
"Excute in terminal emulator" 체크
"Keep terminal window open after command excution" 체크
"Application name" 박스에 MPV 입력
"Set selected application as default action for this file type" 체크
OK 버튼을 누르고 동영상이 재생되기 시작하면 q를 눌러 재생을 종료
이 과정을 원하는 모든 동영상 확장자마다 실행해 주면 됩니다.
여기까지 작업을 끝내고 나면 동영상 파일을 더블클릭해서 바로 재생할 수도 있고 우클릭해서 MPV를 선택해 주어도 됩니다.
당연히 omxplayer처럼 터미널에서
mpv 파일명.mp4 해서 재생해도 됩니다.
자막은 다른 동영상 재생 프로그램들처럼 같은 경로에 같은 파일명의 자막이 있으면 자동으로 로드됩니다.
13단계: 마지막으로, 빌드한 프로그램들을 업데이트 되지 않도록 "Pinning"작업을 해야 합니다.
애써 빌드한 소중한 아이들을 실수로 업데이트하다 덮어씌워 버리지 앉도록 보호해야죠.
즐겨 쓰는 에디터를 이용해 /etc/apt/preferences 를 열어서 아래 내용을 복사해 붙여넣고 저장합니다.
Package: ffmpeg
Pin: version 3.4.1-1
Pin-Priority: 1001
Package: mpv
Pin: version 0.27.0-1
Pin-Priority: 1001
Package: libass
Pin: version 0.13.7-1
Pin-Priority: 1001
Package: x264-snapshot-20180125-2245
Pin: version 20180125-1
Pin-Priority: 1001
Package: fdk-aac
Pin: version 0.1.5-1
Pin-Priority: 1001
Package: libvpx
Pin: version 1.6.1-1
Pin-Priority: 1001
Package: opus
Pin: version 1.2.1-1
Pin-Priority: 1001
Package: lame
Pin: version 3.100-1
Pin-Priority: 1001
*mpv의 기본 단축키
f : 풀스크린 토글
스페이스바 : 재생/멈춤
좌우 방향키 : 건너뛰기(6초)
위아래 방향키 : 건너뛰기 (1분)
9,0 : 볼륨 다운, 업
o : OSD표시 토글
q : 종료
mpv를 이용해 동영상을 재생할 때에 터미널이 실행되는데 mpv의 단축키 입력을 터미널이 받기 때문에 터미널은 열려 있어야 하며, 다른 터미널이 열려 있으면 단축키 입력이 제대로 되지 않을 수 있습니다.
또한, 단축키 입력을 터미널로 받기 때문에, 다른 기기에서 ssh로 라즈베리파이에 접속해 원격으로 mpv를 실행해 동영상을 재생한 경우라면 단축키를 ssh클라이언트 쪽에서 입력해 리모콘처럼 사용할 수 있습니다.
motion 서비스 사용하려고 -j4 옵션(4코어할당) 넣고 컴파일했었는데 저는 다운안되고 괜찮더라구요
alt-tab 을 한 번 눌러 포커스 변경하고 단축키 입력해 보세요.
제 경우엔 라즈베리파이에 아예 키보드 마우스 연결을 하지 않고 쓰고 있어서 ssh 접속해서 원격에서 mpv 파일명 입력해서 실행하고 ssh 터미널에 단축키 입력해서 컨트롤 하는 게 가장 편하더군요...
~/.config/mpv/mpv.conf 의 --fullscreen 옵션을 빼고 실행해 보시는 것도 좋을 것 같습니다.