SlideShare a Scribd company logo
1 of 9
Download to read offline
자막을 뿌리려면
해야 할 여러가지
삽질모음
7급 공무원도 쉽게 이해하는 동영상 플레이어
해킹하기
Overview of
Video Player engine
Media
Source
Demuxer
(Splitter)
Video
Audio
Subtitle
Decoder
to YUV
Decoder
to PCM
Render
to RGB
Composite
Video
Output
Audio
Output
External
Subtitle
Source
Subtitle formats
● Text based
○ srt
○ ssa/ass
○ sami
○ tmplayer
○ mpsub
■ http://goo.gl/VceeF
● Subpicture
○ dvd subpicture (.sub/.idx)
○ bluray subpicture
● Content
○ 시작시간
○ 끝시간
○ 내용
SAMI
● http://en.wikipedia.org/wiki/SAMI
● Microsoft에서 만든 Closed Caption 형식
● 상당히 많은 부분을 HTML에서 차용
○ 즉 HTML에서 표현 가능한 것 대부분 사용가능
● 자막 형식 중에서 상당히 spec이 복잡한 축에
속함
● 대부분의 배포되는 자막 파일의 경우 Valid한
markup language가 아님
Parsing
● 문자셋 정의가 되어있지 않음
● 대부분 <sync> 태그를 닫지 않음
○ 그외에 다른 여러 태그에 대해서도 올바르게 닫지 않
는 경우가 많음
● 잘못된 html entity를 사용하는 경우가 많음
○ &amp;
○ &lt;
○ &gt;
○ &nbsp;
○ &quot;
○ &apos;
● 잘못된 color code를 사용하는 경우가 많음
Rendering
● 여러가지 layout 문제
○ 글자 align에 대한 표준이 없음
○ layout engine이 필요!!!
○ layout rule도 필요!!
● 가독성
○ 글자만 그렸을 경우
■ 글자만 그려서는 가독성이 아주 떨어짐
○ 해결 방법
■ 배경에 그늘을 씌우던가..
■ 글자 테두리를 따로 그리던가..
○ 일반적으로는 테두리 + 그림자 를 같이 그림
● 비디오 소스 해상도에 맞춰서 렌더링됨
Composite
● 화면 출력전에 비디오 소스와 자막을 그린 결
과물을 합성해야 함.
○ 비디오 소스와 자막 그린 결과물의 형식이 다름
■ 비디오 소스는 yuv
■ 자막 렌더링 결과물은 rgb
● 거기다가 Anti-aliasing이 걸려있으면 alpha
처리도 추가
● 추가로 1초에 30회 이상 합성되어야 함.
Implementation
● VideoLan
○ parser
■ http://goo.gl/DVRkx
○ renderer
■ http://goo.gl/CqopE
● MPlayer
○ parser
■ http://goo.gl/6FdDI
○ renderer
■ http://goo.gl/ue2BR
Implementation
● GStreamer
○ parser
■ http://goo.gl/8HMhv
○ renderer
■ http://goo.gl/SyZLE
● XBMC
○ parser
■ http://goo.gl/7UlW7
○ renderer
■ http://goo.gl/WfuCn
● not implemented ?

More Related Content

Viewers also liked

Tizen - A Linux Based Open Source Platform (제 17회 한국 LUG 소프트웨어 테크니컬 세미나)
Tizen - A Linux Based Open Source Platform (제 17회 한국 LUG 소프트웨어 테크니컬 세미나)Tizen - A Linux Based Open Source Platform (제 17회 한국 LUG 소프트웨어 테크니컬 세미나)
Tizen - A Linux Based Open Source Platform (제 17회 한국 LUG 소프트웨어 테크니컬 세미나)Daniel Juyung Seo
 
Webrtc 허영남 20150528
Webrtc 허영남 20150528Webrtc 허영남 20150528
Webrtc 허영남 20150528영남 허
 
왜Web rtc인가
왜Web rtc인가왜Web rtc인가
왜Web rtc인가우일 권
 
Webrtc 동향과 이슈 2016.08
Webrtc 동향과 이슈 2016.08Webrtc 동향과 이슈 2016.08
Webrtc 동향과 이슈 2016.08sung young son
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다GangSeok Lee
 
WebRTC 현재와 미래 최진호 2016
WebRTC 현재와 미래 최진호 2016WebRTC 현재와 미래 최진호 2016
WebRTC 현재와 미래 최진호 2016Blisson Choi
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹totodeung
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질Young-Ho Cho
 

Viewers also liked (10)

Tizen - A Linux Based Open Source Platform (제 17회 한국 LUG 소프트웨어 테크니컬 세미나)
Tizen - A Linux Based Open Source Platform (제 17회 한국 LUG 소프트웨어 테크니컬 세미나)Tizen - A Linux Based Open Source Platform (제 17회 한국 LUG 소프트웨어 테크니컬 세미나)
Tizen - A Linux Based Open Source Platform (제 17회 한국 LUG 소프트웨어 테크니컬 세미나)
 
Webrtc 허영남 20150528
Webrtc 허영남 20150528Webrtc 허영남 20150528
Webrtc 허영남 20150528
 
왜Web rtc인가
왜Web rtc인가왜Web rtc인가
왜Web rtc인가
 
Webrtc 동향과 이슈 2016.08
Webrtc 동향과 이슈 2016.08Webrtc 동향과 이슈 2016.08
Webrtc 동향과 이슈 2016.08
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
 
What is web rtc
What is web rtcWhat is web rtc
What is web rtc
 
WebRTC 현재와 미래 최진호 2016
WebRTC 현재와 미래 최진호 2016WebRTC 현재와 미래 최진호 2016
WebRTC 현재와 미래 최진호 2016
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
 

Similar to 자막을 뿌리려면 해야 할 여러가지 삽질모음

오픈소스 번역 기여하기 v2
오픈소스 번역 기여하기 v2오픈소스 번역 기여하기 v2
오픈소스 번역 기여하기 v2Changwoo Ryu
 
오픈소스 번역 기여하기 v3
오픈소스 번역 기여하기 v3오픈소스 번역 기여하기 v3
오픈소스 번역 기여하기 v3Changwoo Ryu
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차Michael Yang
 
Android media codec 사용하기
Android media codec 사용하기Android media codec 사용하기
Android media codec 사용하기Taehwan kwon
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기CONNECT FOUNDATION
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)YEONG-CHEON YOU
 
Encrypted media extention
Encrypted media extentionEncrypted media extention
Encrypted media extentionTaehyun Kim
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수Yeon Soo Kim
 
Golang Restful 서버 개발기
Golang Restful 서버 개발기Golang Restful 서버 개발기
Golang Restful 서버 개발기Hyejong
 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2Hyejong
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법성훈 김
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer ModelHan Lee
 

Similar to 자막을 뿌리려면 해야 할 여러가지 삽질모음 (13)

오픈소스 번역 기여하기 v2
오픈소스 번역 기여하기 v2오픈소스 번역 기여하기 v2
오픈소스 번역 기여하기 v2
 
오픈소스 번역 기여하기 v3
오픈소스 번역 기여하기 v3오픈소스 번역 기여하기 v3
오픈소스 번역 기여하기 v3
 
처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차
처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차
 
Android media codec 사용하기
Android media codec 사용하기Android media codec 사용하기
Android media codec 사용하기
 
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
[부스트캠프 Tech Talk] 최재필_P 스테이지에서 Git으로 협업하기
 
빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)빌드관리 및 디버깅 (2010년 자료)
빌드관리 및 디버깅 (2010년 자료)
 
Encrypted media extention
Encrypted media extentionEncrypted media extention
Encrypted media extention
 
파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수파이썬을 배워야하는 이유 발표자료 - 김연수
파이썬을 배워야하는 이유 발표자료 - 김연수
 
Virtual dom
Virtual domVirtual dom
Virtual dom
 
Golang Restful 서버 개발기
Golang Restful 서버 개발기Golang Restful 서버 개발기
Golang Restful 서버 개발기
 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
 

More from Young-Ho Cha

마세라티의 비밀
마세라티의 비밀마세라티의 비밀
마세라티의 비밀Young-Ho Cha
 
More than nexus, better than nexus.
More than nexus, better than nexus.More than nexus, better than nexus.
More than nexus, better than nexus.Young-Ho Cha
 
7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트Young-Ho Cha
 
Cairo clock for android wear
Cairo clock for android wearCairo clock for android wear
Cairo clock for android wearYoung-Ho Cha
 
GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기Young-Ho Cha
 
코드 리뷰 시스템 소개
코드 리뷰 시스템 소개코드 리뷰 시스템 소개
코드 리뷰 시스템 소개Young-Ho Cha
 
웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리Young-Ho Cha
 
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기Young-Ho Cha
 
Browser history and overview
Browser history and overviewBrowser history and overview
Browser history and overviewYoung-Ho Cha
 
Introduce native client
Introduce native clientIntroduce native client
Introduce native clientYoung-Ho Cha
 
Introduce gobject introspection
Introduce gobject introspectionIntroduce gobject introspection
Introduce gobject introspectionYoung-Ho Cha
 

More from Young-Ho Cha (12)

마세라티의 비밀
마세라티의 비밀마세라티의 비밀
마세라티의 비밀
 
More than nexus, better than nexus.
More than nexus, better than nexus.More than nexus, better than nexus.
More than nexus, better than nexus.
 
7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트7급 공무원도 쉽게 따라하는 쉘 스크립트
7급 공무원도 쉽게 따라하는 쉘 스크립트
 
Cairo clock for android wear
Cairo clock for android wearCairo clock for android wear
Cairo clock for android wear
 
GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기GITHUB와 함께 Social하게 코딩하기
GITHUB와 함께 Social하게 코딩하기
 
코드 리뷰 시스템 소개
코드 리뷰 시스템 소개코드 리뷰 시스템 소개
코드 리뷰 시스템 소개
 
웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리웹표준과 자동화의 약속된 승리
웹표준과 자동화의 약속된 승리
 
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
7급 공무원도 쉽게 따라하는 프로파일링 도구 만들기
 
Browser history and overview
Browser history and overviewBrowser history and overview
Browser history and overview
 
Introduce native client
Introduce native clientIntroduce native client
Introduce native client
 
Introduce gobject introspection
Introduce gobject introspectionIntroduce gobject introspection
Introduce gobject introspection
 
페챠쿠챠
페챠쿠챠페챠쿠챠
페챠쿠챠
 

자막을 뿌리려면 해야 할 여러가지 삽질모음

  • 1. 자막을 뿌리려면 해야 할 여러가지 삽질모음 7급 공무원도 쉽게 이해하는 동영상 플레이어 해킹하기
  • 2. Overview of Video Player engine Media Source Demuxer (Splitter) Video Audio Subtitle Decoder to YUV Decoder to PCM Render to RGB Composite Video Output Audio Output External Subtitle Source
  • 3. Subtitle formats ● Text based ○ srt ○ ssa/ass ○ sami ○ tmplayer ○ mpsub ■ http://goo.gl/VceeF ● Subpicture ○ dvd subpicture (.sub/.idx) ○ bluray subpicture ● Content ○ 시작시간 ○ 끝시간 ○ 내용
  • 4. SAMI ● http://en.wikipedia.org/wiki/SAMI ● Microsoft에서 만든 Closed Caption 형식 ● 상당히 많은 부분을 HTML에서 차용 ○ 즉 HTML에서 표현 가능한 것 대부분 사용가능 ● 자막 형식 중에서 상당히 spec이 복잡한 축에 속함 ● 대부분의 배포되는 자막 파일의 경우 Valid한 markup language가 아님
  • 5. Parsing ● 문자셋 정의가 되어있지 않음 ● 대부분 <sync> 태그를 닫지 않음 ○ 그외에 다른 여러 태그에 대해서도 올바르게 닫지 않 는 경우가 많음 ● 잘못된 html entity를 사용하는 경우가 많음 ○ &amp; ○ &lt; ○ &gt; ○ &nbsp; ○ &quot; ○ &apos; ● 잘못된 color code를 사용하는 경우가 많음
  • 6. Rendering ● 여러가지 layout 문제 ○ 글자 align에 대한 표준이 없음 ○ layout engine이 필요!!! ○ layout rule도 필요!! ● 가독성 ○ 글자만 그렸을 경우 ■ 글자만 그려서는 가독성이 아주 떨어짐 ○ 해결 방법 ■ 배경에 그늘을 씌우던가.. ■ 글자 테두리를 따로 그리던가.. ○ 일반적으로는 테두리 + 그림자 를 같이 그림 ● 비디오 소스 해상도에 맞춰서 렌더링됨
  • 7. Composite ● 화면 출력전에 비디오 소스와 자막을 그린 결 과물을 합성해야 함. ○ 비디오 소스와 자막 그린 결과물의 형식이 다름 ■ 비디오 소스는 yuv ■ 자막 렌더링 결과물은 rgb ● 거기다가 Anti-aliasing이 걸려있으면 alpha 처리도 추가 ● 추가로 1초에 30회 이상 합성되어야 함.
  • 8. Implementation ● VideoLan ○ parser ■ http://goo.gl/DVRkx ○ renderer ■ http://goo.gl/CqopE ● MPlayer ○ parser ■ http://goo.gl/6FdDI ○ renderer ■ http://goo.gl/ue2BR
  • 9. Implementation ● GStreamer ○ parser ■ http://goo.gl/8HMhv ○ renderer ■ http://goo.gl/SyZLE ● XBMC ○ parser ■ http://goo.gl/7UlW7 ○ renderer ■ http://goo.gl/WfuCn ● not implemented ?