PDA

View Full Version : (applied) 동영상 이어서 재생하기(seamless/gapeless playback)


z
02-16-2006, 02:30 PM
두 동영상 이어서 재생하기 관련 자료 쓰레드입니다.
시스템 사양이야 날로 좋아지고 있기 때문에 가능한 방법을 찾아보면 좋을 듯 하네요.
(내장 ts 스플리터의 경우 이어서 재생하기가 되는데 내장 avi 소스 필터로 비슷한 작업을 하게 할 수는 없을까요? 두 avi파일은 각각 헤더에 인덱스가 있기 때문에 파일을 열때 두 동영상 헤더에 있는 인덱스를 모두 불러서 합쳐서 계산하고 두 동영상이 마치 이어진 것처럼 재생하면-말은 쉽죠.. ㅎㅎ- 될 거 같은데)

혹시 테스트를 해보실 거면 샘플코딩을 따로 해서 배포해 보시면 좋을 거 같습니다.(단순히 seamless playback기능만 있는)

the only one way to make gapeless output is to make independend frames and buffer them for decoder.

as i know, mpg123 makes gapelss output of mp3 (this can be checked with total recorder) even if frames depend on each other just because
frames from the next file are buffering and for decoder both files seemed like one.

일단 관건은
1. 내장 avi 소스 필터에서 이 두 파일을 하나처럼 보게 하는 방법
2. 두 파일의 필터그래프를 모두 미리 생성했다가 연결하는 방법

등이 있을 거 같은데 어짜피 seamless playback의 조건은 HTPC(영화보는 것 외에 다른 용도로 사용안함)이기 때문에 700메가짜리 avi파일 두세개를 재생할 때 1번을 적용해서 실시간으로 temp에 그냥 스트리밍되는 것처럼 합쳐서 하나의 파일로 만든뒤 재생해도 상관은 없지 않나 싶습니다.

뭐.. 예전에도 어렵다고 말씀하셨지만 그냥 적어놓습니다. 예전 게시물 찾아보려고 했는데 찾지를 못하겠네요. =_= 위 영문 설명 부분은 mp3 gapeless playback문제인데 동영상에 적용하기는 불가능한 부분이 있군요. (동영상은 스플리터를 통해서 오디오/비디오 스트림이 일단 분리가 된 뒤를 생각해야 되기 때문에 결국 1번과 같은 방법을 응용하려면 kmp avi source필터에서 조작하는 방법밖에 없는 거 같습니다. 물론 1번이 가능하려면 a-cd1.avi와 a-cd2.avi라는 동영상 포멧이 같아야 한다는 문제점도 있군요. 훔... 역시 불가능인가..)

두 avi 파일 재생시 인덱스 테이블을 합치고 하나의 파일처럼 동작하는 방법(두 파일 포멧은 완전히 동일하다고 가정)만 있으면 만사 OK일텐데..

a-cd1.avi ---kmp avi source
a-cd2.avi ---kmp avi source

z
02-16-2006, 02:34 PM
DSI ([Only registered and activated users can see links])
Data Search Information. Information for Fast Forward/Fast Backward and seamless playback. This is real time control data spread throughout the DVD-Video data stream. Along with PGCI, these packets are part of the 1.00 mbit/sec overhead in video applications (Book B). These packets contain navigation information which makes it possible to search and maintain seamless playback of the Video Object Unit (VOBU). The most important field in this packet is the sector address where the first reference frame of the video object begins. Advanced angle change and presentation timing are included to assist seamless playback.

아하 이제보니 DVD는 끊어진 파일 이어서 재생하는군요?

For the sake of seamless playback, when the player should detect that the current chunk is about to end, it should spin up the drive where the next chunk lies in advance, so that the user doesn't have to stare at a frozen picture at chunk joints until the next drive spins up and starts reading (well, maybe this bit is for player requirements...).

z
02-16-2006, 02:47 PM
Matroska files will contain a unique ID number, being calculated from the MD5 of the block headers. This way every file can be easily identified ( will be very useful for p2p also [Only registered and activated users can see links] ). In addition to that matroska and MCF will support multi-segment files, means that every segment of a file will point to the file ID of the segment before and after it, so a player can easily find out if the next segment is already in one of the drives, or on the HDD ( only same folder possible i guess ) and start it automatically if it finds it.

z
02-16-2006, 03:02 PM
Seamless Playback
This is a very experimental feature. It requires VMR9 to be enabled and may not always work properly with every media file (can cause instability). When enabled, Zoom Player will try to pre-load the next media file in the Play List so that when the current file ends, the next file is switched to quickly. It can cause instability with some media file and is not recommended for general usage.

이건 예전 ZP에 있던 그 seamless 기능으로 맨 처음 게시물에서 설명한 2번째 방법인 거 같습니다. 제가 가정하는 seamless playback은 무조건 연속 재생하려는 파일 포멧이 같기 때문에 이 글에서처럼 안정성 문제는 제외해도 되지 않을지 생각해 봅니다. 게다가 KMP는 ZP와 달리 안정적인 필터 연결(내장코덱)이 가능하니까요. seamless playback을 이런 방식으로 사용한다고 할 때는 아마도 외부코덱 사용은 일단 제한하는 방식이 안정적이겠지요?

tmp
02-16-2006, 04:09 PM
DVD경우는 파일시스템이 1G까지 지원되기 때문에 본 영화는 1G단위로 여러개로
나누어져 있습니다.
재생될 때는 하나의 파일처럼 잘 재생됩니다.
현재 mpeg2 (ts)도 잘 되는것 같습니다.

kyh96403
02-18-2006, 12:26 PM
흠....
Avi파일 중 일부 파일만 연속적으로 재생되는 기능을 넣어 봤는데...
일단.. 문제가... 대부분의 동영상이 동영상의 끝부분과... 다음 동영상의 첫부분이...
부드럽게 이어져 있지 않네요...
대부분... 해당 되는 부분이... 중복됩니다...
그리고 가장 큰 문제가... 역시나.. 자막입니다...
제가 테스트 해본 동영상은... 하나의 파일로 처리 되게 해놓았는데...
가상으로 파일을 하나로 합쳐서 재생되게 해놓았기 때문에...
자막 또한 가상으로 합쳐야 되는데... 그게.....
생각처럼 단순하지가 않네요... 흠....
일단은.. 좀더 테스트 해보도록 하겠습니다~~

z
02-18-2006, 06:11 PM
오.. 일단 부드럽게 이어지지 않는 문제는 별 상관 없을 겁니다. 소리가 안 끊기면 중간에 조금 동영상이 중복되거나 반복된다고 해도 눈치챌 사용자는 별로 없을 거구요.

실제로 mp3 gapeless playback은 lame 인코더에서 트랙 사이에 무슨 정보를 넣는다고 더군요. 아.. 위에 mkv도 그런다는 거 같군요. 그래서 그 정보를 이용해서 이어질 부분을 연결하기 때문에 자연스럽다고 합니다. 때문에 avi에서 이어질 부분 타이밍 재는 건 어느 정도 오차범위가 있을 수 밖에 없습니다. 그런 부분은 테스트를 통해서 오차범위를 줄이는 수밖에 없고 완전한 방법을 기대할 수는 없을 거 같습니다. (설정에서 뒤에 이어지는 overlap부분을 사용자가 조정할 수 있게 한다거나 하는 것도 좋겠죠)

참고로 seamless playback할 때 kmp avi source filter가 제어하는 파일 갯수나 용량 제한이 필요할 수도 있습니다.
(현재 어떤 방식으로 구현하시는지 모르겠는데 만약 위에서 제가 언급한 대로 파일을 이어붙여서 temp에 생성하는 경우라면 그렇다는 겁니다. 만약 그렇다면 하드 남은 용량 체크루틴도 들어가야 할 테구요.

애니메이션 같은 거 20개를 이렇게 이어 보기한다고 하면 그것도 좀 문제가 될 수 있으니까 갯수제한도 필요할 수 있습니다. 만약 이런 제한사한이 없는 구조라면 상관없지만요. ^^.... )

seamless로 연결할 때 혹시(avi1.avi, avi2.avi) avi1.avi의 엔딩 스킵값과 avi2.avi의 인트로 스킵값을 적용할 수 있는 구조라면 더 재미있겠네요. 즉 avi1.avi의 엔딩과 avi2.avi의 인트로를 없애고 바로 본문을 연결하는 방식인데.. 만약 인코더에서 이런 엔딩과 인트로를 구별할 수 있는 표식을 넣어줄 수 있다면 정말로 skip이 가능하겠군요. (하긴 chapter같은 걸 만들어 놔도 인식 가능한 일이긴 하겠네요.) 생각이 가지를 친 요 뒷부분은 그냥 읽어보시기만 하셔도 됩니다. ^^

아.. dvd 재생기중에 commercial skip(광고 스킵) 기능이 있는것이 있던데 혹시 이런 것도 비슷해 보이는군요. 예전에 그거 읽을 때는 신기하게만 생각했었는데 지금 생각해 보니.. 광고부분의 표식이 명확한가 봅니다.

kyh96403
02-18-2006, 08:46 PM
구현 방법은... 무식하게 파일을 만들어서 처리 하는것은 아님니다..
그냥 여러개의 파일을 가상으로 하나로 합쳐서 재생하는 겁니다.
따라서 겹치는 공간을 어떻게 처리 할수 없고...
인트로 스킵같은거는 더더욱 구현할 수 없습니다.
즉 Dvd처럼 여러개로 나누어진 파일을 하나로 재생한다고 보면 됩니다.

kyh96403
02-19-2006, 12:52 PM
흠....
끊김없이 재생하는 기능 이거... 디게 좋네요... ㅋㅋㅋ
Avi만 되고 파일 포멧이 100% 같이야 된다는 단점이 있지만...
무지하게 좋습니다요... ㅎㅎㅎ

z
02-19-2006, 01:25 PM
오.. 궁금하네요.