KR102304143B1 - 왜곡 및 비트레이트를 최적화하기 위한 인코딩 기술들 - Google Patents

왜곡 및 비트레이트를 최적화하기 위한 인코딩 기술들 Download PDF

Info

Publication number
KR102304143B1
KR102304143B1 KR1020207004274A KR20207004274A KR102304143B1 KR 102304143 B1 KR102304143 B1 KR 102304143B1 KR 1020207004274 A KR1020207004274 A KR 1020207004274A KR 20207004274 A KR20207004274 A KR 20207004274A KR 102304143 B1 KR102304143 B1 KR 102304143B1
Authority
KR
South Korea
Prior art keywords
sequence
encoded
data points
chunks
encoding
Prior art date
Application number
KR1020207004274A
Other languages
English (en)
Other versions
KR20200024325A (ko
Inventor
이오아니스 카차보우니디스
Original Assignee
넷플릭스, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 넷플릭스, 인크. filed Critical 넷플릭스, 인크.
Publication of KR20200024325A publication Critical patent/KR20200024325A/ko
Application granted granted Critical
Publication of KR102304143B1 publication Critical patent/KR102304143B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/234Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
    • H04N21/2343Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements
    • H04N21/23439Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements for generating different versions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • H04N19/147Data rate or code amount at the encoder output according to rate distortion criteria
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/179Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a scene or a shot
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/192Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding the adaptation method, adaptation tool or adaptation type being iterative or recursive
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/59Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial sub-sampling or interpolation, e.g. alteration of picture size or resolution
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/234Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
    • H04N21/2343Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements
    • H04N21/234345Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving reformatting operations of video signals for distribution or compliance with end-user requests or end-user device requirements the reformatting operation being performed only on part of the stream, e.g. a region of the image or a time segment
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/238Interfacing the downstream path of the transmission network, e.g. adapting the transmission rate of a video stream to network bandwidth; Processing of multiplex streams
    • H04N21/23805Controlling the feeding rate to the network, e.g. by controlling the video pump
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/238Interfacing the downstream path of the transmission network, e.g. adapting the transmission rate of a video stream to network bandwidth; Processing of multiplex streams
    • H04N21/2385Channel allocation; Bandwidth allocation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/83Generation or processing of protective or descriptive data associated with content; Content structuring
    • H04N21/845Structuring of content, e.g. decomposing content into time segments
    • H04N21/8456Structuring of content, e.g. decomposing content into time segments by decomposing the content in the time domain, e.g. in time segments

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

인코딩 엔진은 비디오 시퀀스를 인코딩하여 주어진 비트레이트에 대한 최적의 품질을 제공한다. 인코딩 엔진은 비디오 시퀀스를 샷 시퀀스들의 집합으로 절단한다. 각각의 샷 시퀀스는 특정 캡처 포인트로부터 캡처된 비디오 프레임들을 포함한다. 인코딩 엔진은 상이한 해상도 범위에 걸쳐 각각의 샷 시퀀스를 리샘플링하고, 각각의 리샘플링된 시퀀스를 품질 파라미터들의 범위로 인코딩한 다음, 각각의 인코딩된 시퀀스를 비디오 시퀀스의 원래 해상도로 업샘플링한다. 각각의 업샘플링된 시퀀스에 대해, 인코딩 엔진은 품질 메트릭을 계산하고, 품질 메트릭 및 리샘플 해상도를 포함하는 데이터 포인트를 생성한다. 인코딩 엔진은 모든 이러한 데이터 포인트들을 수집하고 이어서 결과적인 데이터 세트의 볼록 껍질을 계산한다. 모든 샷 시퀀스들에 걸친 모든 볼록 껍질들에 기반하여, 인코딩 엔진은 비트레이트들의 범위에 대한 샷 시퀀스들의 최적의 집합을 결정한다.

Description

왜곡 및 비트레이트를 최적화하기 위한 인코딩 기술들
관련 출원들에 대한 상호 참조
본 출원은 "ENCODING TECHNIQUE FOR OPTIMIZING DISTORTION AND BITRATE"라는 명칭으로 2017년 7월 18일에 출원된 미국 가특허 출원 제62/534,170호의 우선권 이익을 주장하며, 본 출원은 "ENCODING TECHNIQUE FOR OPTIMIZING DISTORTION AND BITRATE"라는 명칭으로 2018년 7월 12일에 출원된 미국 특허 출원 제16/034,303호의 우선권 이익을 주장한다. 이들 관련 출원들의 주제는 본 명세서에 참조로 포함된다.
본 발명의 실시예들은 일반적으로 비디오 인코딩에 관한 것이며, 더 구체적으로는 왜곡 및 비트레이트를 최적화하기 위한 인코딩 기술들에 관한 것이다.
비디오 스트리밍 서비스는 상이한 엔드포인트 디바이스들의 범위에서 재생될 수 있는 미디어 타이틀들의 라이브러리에 대한 액세스를 제공한다. 각각의 엔드포인트 디바이스는, 특히, 이용가능한 대역폭 및 레이턴시를 포함하는, 상이한 접속 조건들 하에서 비디오 스트리밍 서비스에 접속할 수 있다. 또한, 각각의 상이한 디바이스는 최종 사용자에게 비디오 콘텐츠를 출력하기 위한 상이한 하드웨어를 포함할 수 있다. 예를 들어, 주어진 엔드포인트 디바이스는 특정 스크린 크기 및 특정 스크린 해상도를 갖는 디스플레이 스크린을 포함할 수 있다.
통상적으로, 비디오 스트리밍 서비스에 접속하는 엔드포인트 디바이스는, 비디오 콘텐츠 라이브러리 내의 주어진 미디어 타이틀에 대해, 엔드포인트 디바이스에 스트리밍하기 위한 미디어 타이틀의 적절한 버전을 결정하는 엔드포인트 애플리케이션을 실행한다. 주어진 미디어 타이틀의 각각의 상이한 버전은 일반적으로 상이한 비트레이트를 이용하여 인코딩되고, 상이한 버전들의 미디어 타이틀은 해상도들, 스케일링 인자들, 및/또는 서로 상이한 비디오 콘텐츠와 통상적으로 연관된 다른 파라미터들을 갖는다. 엔드포인트 디바이스 상의 미디어 타이틀의 재생 동안, 엔드포인트 애플리케이션은 네트워크 조건들, 네트워크 접속의 품질, 및 엔드포인트 디바이스의 하드웨어 사양들과 같은 인자들에 기반하여 엔드포인트 디바이스에 스트리밍하기 위한 미디어 타이틀의 적절한 버전을 선택한다.
위에서 언급한 바와 같이, 전술한 방식으로 스트리밍하기 위한 미디어 타이틀을 준비하기 위해, 미디어 타이틀은 복수의 상이한 비트레이트를 이용하여 인코딩된다. 그렇게 함에 있어서, 인코딩 애플리케이션은 각각의 인코딩에 대한 인코딩 파라미터들의 상이한 세트를 이용하여, 전체 미디어 타이틀의 개별 "모놀리식" 인코딩들을 수행한다. 각각의 상이한 인코딩은 인코딩 프로세스를 통해 미디어 타이틀의 그 인코딩된 버전 내로 도입되는 왜곡의 레벨을 객관적으로 표시하는 상이한 품질 메트릭과 연관될 수 있다. 주어진 인코딩과 연관된 품질 메트릭은 전형적으로 그 인코딩을 생성하는데 이용되는 인코딩 파라미터들에 의존한다. 예를 들어, 다른 인코딩에 비해 높은 비트레이트로 생성된 인코딩은 그 다른 인코딩과 비교하여 더 높은 품질 메트릭을 가질 수 있다.
상이한 인코딩 파라미터들로 미디어 타이틀을 인코딩하는 것은 전형적으로 상이한 계산 자원들 및 상이한 저장 자원들을 요구한다. 예를 들어, 높은 비트레이트 및 높은 품질 메트릭을 갖는 인코딩을 생성하는 것은 일반적으로 낮은 비트레이트 및 낮은 품질 메트릭을 갖는 인코딩을 생성하는 것보다 더 많은 계산/저장 자원들을 소비한다. 종래의 인코딩 애플리케이션은 그 인코딩에 대한 특정 목표 품질 메트릭을 충족시키기 위해 단일 모놀리식 인코딩을 생성하기 위한 주어진 인코딩 파라미터 세트를 선택할 수 있다.
그러나, 이러한 접근법의 한가지 문제점은 미디어 타이틀의 모든 부분들이 주어진 목표 품질 메트릭을 충족시키기 위해 동일한 인코딩 파라미터들을 요구하지는 않지만, 종래의 인코딩 애플리케이션들은 전체 미디어 타이틀에 대해 동일한 인코딩 파라미터들을 이용한다는 것이다. 그 결과, 종래의 인코딩된 미디어 타이틀은, 미디어 타이틀의 일부 부분들이 그 자원들이 동일한 메트릭을 충족시킬 필요가 없음에도 불구하고, 목표 품질 메트릭을 충족시키기 위해 과도한 계산 및 저장 자원들을 소비할 수 있다. 이러한 비효율성은 계산 자원들 및 저장 자원들을 불필요하게 낭비한다.
전술한 바와 같이, 관련 기술분야에서 필요한 것은 비디오 시퀀스들을 인코딩하기 위한 보다 효율적인 기술이다.
본 발명의 일 실시예는 컴퓨터에 의해 구현되는 방법을 제시하며, 이 컴퓨터에 의해 구현되는 방법은, 소스 비디오 시퀀스에 대한 제1 세트의 인코딩된 청크들을 생성하는 단계; 제1 세트의 인코딩된 청크들에 기반하여 제1 세트의 데이터 포인트들을 생성하는 단계; 적어도 2개의 메트릭에 걸쳐 최적화되는 제1 서브세트의 데이터 포인트들을 계산하기 위해 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 단계; 제1 서브세트의 데이터 포인트들에 포함된 제1 데이터 포인트와 제1 서브세트의 데이터 포인트들에 포함된 제2 데이터 포인트 사이의 제1 기울기 값을 계산하는 단계; 및 제1 기울기 값에 기반하여, 제1 데이터 포인트와 연관된 제1 인코딩된 청크가 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하는 단계를 포함한다.
종래 기술에 비해 개시된 기술들의 적어도 하나의 기술적 개선은 인코딩된 청크들의 입도에서 최적화 동작들을 수행하는 것이 종래의 인코딩 기술들과 연관된 인코딩 비효율성들을 감소시킨다는 것이다. 그 결과, 소스 비디오 시퀀스의 최종 인코딩된 버전은 목표 비트레이트에 대해 증가된 시각적 품질로 엔드포인트 디바이스들에 스트리밍될 수 있다. 반대로, 소스 비디오 시퀀스의 최종 인코딩된 버전은 목표 시각적 품질에 대해 감소된 비트레이트로 엔드포인트 디바이스들에 스트리밍될 수 있다.
위에 언급한 본 발명의 특징들이 상세하게 이해될 수 있는 방식으로, 위에서 간략히 요약된 본 발명의 더 구체적인 설명이 실시예들을 참조하여 이루어질 수 있으며, 실시예들 중 일부가 첨부 도면들에 도시되어 있다. 그러나, 첨부 도면들은 본 발명의 통상적인 실시예들만을 도시할 뿐이며, 따라서 그 범위를 제한하는 것으로 간주되지 않아야 하는 바, 이는 본 발명이 다른 동등하게 효과적인 실시예들에 적용될 수 있기 때문임에 유의해야 한다.
도 1a는 본 발명의 하나 이상의 양태를 구현하도록 구성된 클라우드 컴퓨팅 환경을 도시한다.
도 1b는 본 발명의 다양한 실시예들에 따른, 도 1a의 인코딩 엔진들의 더 상세한 도면이다.
도 2는 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 어떻게 비디오 시퀀스를 샷 시퀀스들로 절단하는지를 도시한다.
도 3은 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 어떻게 도 2의 샷 시퀀스들을 처리하여 데이터 세트를 생성하는지를 도시한다.
도 4는 본 발명의 다양한 실시예들에 따른, 도 3의 처리 파이프라인의 더 상세한 도면이다.
도 5a는 본 발명의 다양한 실시예들에 따라, 도 3의 데이터 세트에 기반하여 생성되는 비트레이트 대 품질의 그래프이다.
도 5b는 본 발명의 다양한 실시예들에 따라, 도 3의 데이터 세트에 기반하여 생성되는 볼록 껍질 데이터 포인트들의 그래프이다.
도 6은 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 도 5b의 볼록 껍질 데이터 포인트들을 어떻게 생성하는지를 도시한다.
도 7은 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 복수의 볼록 껍질들을 이용하여 도 2의 비디오 시퀀스의 상이한 버전들을 어떻게 생성하는지를 도시한다.
도 8a 내지 도 8d는 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 비디오 콘텐츠의 청크들을 인코딩된 비디오 시퀀스로 어떻게 조립하는지를 더 상세히 도시한다.
도 9는 본 발명의 다양한 실시예들에 따라, 도 8a 내지 도 8d에 도시된 인코딩된 비디오 시퀀스들에 대해 생성된 볼록 껍질 데이터 포인트들의 그래프이다.
도 10은 본 발명의 다양한 실시예들에 따라, 인코딩된 비디오 시퀀스로 비디오 콘텐츠의 청크들을 조립하기 위한 방법의 단계들의 흐름도이다.
도 11은 본 발명의 다양한 실시예들에 따라, 리샘플링된 샷 시퀀스를 처리하여 데이터 포인트들의 세트를 생성하기 위한 방법의 단계들의 흐름도이다.
도 12는 본 발명의 다양한 실시예들에 따라, 인코딩된 비디오 시퀀스들의 세트를 생성하기 위한 방법의 단계들의 흐름도이다.
이하의 설명에서, 본 발명의 보다 철저한 이해를 제공하기 위해 많은 특정 상세들이 제시된다. 그러나, 관련 기술분야의 통상의 기술자에게는 본 발명이 이들 특정 상세들 중 하나 이상 없이도 실시될 수 있음이 명백할 것이다. 다른 경우들에서는, 본 발명을 모호하게 하는 것을 피하기 위해 잘 알려진 특징들이 설명되지 않는다.
전술한 바와 같이, 종래의 인코딩 기술들은 비디오 시퀀스들의 "모놀리식" 인코딩들을 수행하는 것과 연관된 특정 비효율성들을 겪는다. 이러한 비효율성들은, 비디오 시퀀스의 일부 부분들이 상이한 인코딩 파라미터들로 인코딩될 수 있고 여전히 동일한 품질 메트릭을 충족시킬 수 있다는 사실에도 불구하고, 종래의 인코딩 기술들이 주어진 품질 메트릭을 충족시키기 위해 동일한 인코딩 파라미터들로 비디오 시퀀스의 모든 부분들을 인코딩하기 때문에 발생한다.
이 문제를 해결하기 위해, 본 발명의 실시예들은 주어진 왜곡 레벨에 대한 비트레이트를 최적화하는 상이한 인코딩 파라미터들로 소스 비디오 시퀀스 내의 상이한 샷 시퀀스들을 인코딩하도록 구성된 인코딩 엔진을 포함한다. 샷 시퀀스를 인코딩할 때, 인코딩 엔진은 샷 시퀀스를 상이한 해상도 범위로 리샘플링한 다음, 품질 파라미터들의 범위를 이용하여 각각의 리샘플링된 시퀀스를 인코딩한다. 그 후, 인코딩 엔진은 각각의 인코딩된 시퀀스를 소스 비디오 시퀀스의 원래 해상도로 업샘플링하고, 결과적인 업샘플링된 시퀀스들에 대한 품질 메트릭을 계산한다. 각각의 샷 시퀀스에 대한 업샘플링된 시퀀스들 및 대응하는 품질 메트릭들에 기반하여, 인코딩 엔진은 소스 비디오 시퀀스의 상이한 인코딩된 버전들을 생성한다. 각각의 이러한 버전은 잠재적으로 상이한 인코딩 파라미터들로 인코딩된 복수의 샷 시퀀스의 합성이다.
이러한 접근법의 장점은 주어진 품질 메트릭을 충족시키기 위해 특정 인코딩 파라미터들을 필요로 하는 소스 비디오 시퀀스의 부분들이 정확하게 이러한 특정 인코딩 파라미터들로 인코딩된다는 것이다. 또한, 소스 비디오 시퀀스의 다른 부분들은 다른 적절히 선택된 인코딩 파라미터들로 인코딩될 수 있다. 따라서, 소스 비디오 시퀀스의 인코딩된 버전들은 더 효율적인 방식으로 생성된다.
시스템 개요
도 1a는 본 발명의 하나 이상의 양태를 구현하도록 구성된 클라우드 컴퓨팅 환경을 도시한다. 도시된 바와 같이, 시스템(100)은 컴퓨터 클라우드(130)에 결합된 호스트 컴퓨터(110)를 포함한다. 호스트 컴퓨터(110)는 함께 결합된 프로세서(112), 입력/출력(I/O) 디바이스들(114), 및 메모리(116)를 포함한다.
프로세서(112)는 데이터를 처리하고 프로그램 코드를 실행하도록 구성된, 임의의 기술적으로 실현가능한 형태의 처리 디바이스일 수 있다. 프로세서(112)는 예를 들어 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 주문형 집적 회로(ASIC), 필드 프로그램 가능 게이트 어레이(FPGA), 이러한 유닛들의 임의의 기술적으로 실현가능한 조합 등일 수 있다.
I/O 디바이스들(114)은 예를 들어 키보드, 마우스 등을 포함하는, 입력을 수신하도록 구성되는 디바이스들을 포함할 수 있다. I/O 디바이스들(114)은 또한, 예를 들어, 디스플레이 디바이스, 스피커 등을 포함하는, 출력을 제공하도록 구성되는 디바이스들을 포함할 수 있다. I/O 디바이스들(114)은, 예를 들어, 터치스크린, 범용 직렬 버스(USB) 포트 등을 포함하는, 각각 입력 및 출력을 수신하고 제공하도록 구성된 디바이스들을 추가로 포함할 수 있다.
메모리(116)는 데이터 및 소프트웨어 애플리케이션들을 저장하도록 구성된 임의의 기술적으로 실현가능한 저장 매체를 포함할 수 있다. 메모리(116)는 예를 들어 하드 디스크, 랜덤 액세스 메모리(RAM) 모듈, 판독 전용 메모리(ROM) 등일 수 있다. 메모리(116)는 호스트 인코딩 엔진(118) 및 데이터베이스(120)를 포함한다.
호스트 인코딩 엔진(118)은, 프로세서(112)에 의해 실행될 때, 데이터베이스(120) 및/또는 외부 저장 자원 내에 저장된 미디어 콘텐츠와의 인코딩 동작을 수행하는 소프트웨어 애플리케이션이다. 호스트 인코딩 엔진(118)은 이하에서 더 상세히 논의되는 다양한 클라우드 인코딩 엔진들과 상호동작하도록 구성된다.
컴퓨터 클라우드(130)는 복수의 클라우드 컴퓨터들(140(0) 내지 140(N))을 포함한다. 임의의 클라우드 컴퓨터(140)는 물리적으로 분리된 컴퓨팅 디바이스 또는 컴퓨팅 디바이스의 가상화된 인스턴스일 수 있다. 각각의 클라우드 컴퓨터(140)는 함께 결합된 프로세서(142), I/O 디바이스들(144), 및 메모리(146)를 포함한다. 주어진 프로세서(142)는, CPU, GPU, ASIC, FPGA, 이러한 유닛들의 임의의 기술적으로 실현가능한 조합 등을 포함하는, 데이터를 처리하고 프로그램 코드를 실행하도록 구성된 임의의 기술적으로 실현가능한 형태의 처리 디바이스일 수 있다. I/O 디바이스들(144)의 주어진 세트는, 앞서 논의된 I/O 디바이스들(114)과 유사한, 예를 들어, 키보드, 마우스 등을 포함하는, 입력을 수신하도록 구성된 디바이스들을 포함할 수 있다. 각각의 메모리(146)는 클라우드 인코딩 엔진(148) 및 데이터베이스(150)를 포함하는, 데이터 및 소프트웨어 애플리케이션들을 저장하도록 구성된 저장 매체이다.
클라우드 인코딩 엔진들(148(0) 내지 148(N))은 인코딩 동작의 다양한 부분들을 수행하기 위해 호스트 인코딩 엔진(118)과 상호동작하도록 구성된다. 일반적으로, 호스트 인코딩 엔진(118)은 클라우드 인코딩 엔진들(148(0) 내지 148(N))의 동작을 조정하고, 그 엔진들에 처리 작업들을 분산하는 것, 각각의 엔진으로부터 처리된 데이터를 수집하는 것 등과 같은 작업들을 수행할 수 있다. 클라우드 컴퓨팅에 익숙한 사람들은 클라우드 인코딩 엔진들(148(0) 내지 148(N))이 실질적으로 서로 병렬로 동작할 수 있다는 것을 이해할 것이다. 따라서, 호스트 인코딩 엔진(118)은 별개의 작업을 동시에 수행하도록 클라우드 인코딩 엔진들(148)을 구성함으로써 복잡한 인코딩 작업들을 효율적으로 수행할 수 있다. 일반적으로, 호스트 인코딩 엔진(118) 및 클라우드 인코딩 엔진들(148)은, 도 1b와 관련하여 이하에서 더 상세히 설명되는 바와 같이, 분산된 소프트웨어 엔티티 내의 상이한 모듈들을 나타낸다.
도 1b는 본 발명의 다양한 실시예들에 따른, 도 1a의 인코딩 엔진들의 더 상세한 도면이다. 도시된 바와 같이, 인코딩 엔진(160)은 호스트 인코딩 엔진(118) 및 클라우드 인코딩 엔진들(148(0) 내지 148(N))을 포함한다. 일반적으로, 인코딩 엔진(160)은 호스트 인코딩 엔진(118) 및 클라우드 인코딩 엔진들(140)의 실행을 통해 하나 이상의 상이한 인코딩 동작을 수행하도록 구성된 분산된 소프트웨어 엔티티를 구성한다. 특히, 인코딩 엔진(160)은 소스 비디오 시퀀스(170)를 처리하여 인코딩된 비디오 시퀀스 세트(180)를 생성한다. 소스 비디오 시퀀스(170)는 비디오 스트리밍 서비스와 연관된 콘텐츠 라이브러리에 포함될 수 있는 미디어 타이틀이다. 각각의 인코딩된 비디오 시퀀스(180)는 상이한(및 잠재적으로 변하는) 인코딩 파라미터들로 인코딩된 그 미디어 타이틀의 상이한 버전이다.
인코딩 동작을 수행하기 위해, 인코딩 엔진(160)은 소스 비디오 시퀀스(170)를 전처리하여 관련 없는 픽셀을 제거한 다음 소스 비디오 시퀀스(170)를 복수의 샷 시퀀스로 절단한다. 각각의 샷 시퀀스는 주어진 카메라 또는 캡처 포인트로부터 연속적으로 캡처된 프레임들을 포함한다. 이 절차는 도 2와 관련하여 논의된다. 이어서, 인코딩 엔진(160)은 각각의 샷 시퀀스를 하나 이상의 상이한 해상도로 리샘플링하고, 모든 리샘플링된 시퀀스들을 처리하여 데이터 세트를 생성한다. 리샘플링 프로세스는 도 3과 관련하여 논의된다. 리샘플링된 시퀀스들에 기반한 데이터 세트의 생성은 도 4와 관련하여 논의된다. 이어서, 인코딩 엔진(160)은, 도 5a, 도 5b 및 도 6과 관련하여 논의된 바와 같이, 데이터 세트에 기반하여, 주어진 왜곡 레벨에 대한 비트레이트를 최대화하는 데이터 포인트들의 볼록 껍질을 생성한다. 모든 샷 시퀀스들에 걸친 모든 볼록 껍질 포인트들에 기반하여, 인코딩 엔진(160)은 인코딩된 비디오 시퀀스 세트(180)를 생성한다. 이들 인코딩된 비디오 시퀀스들은 도 7 내지 도 9와 관련하여 논의된 바와 같이 왜곡 및 비트레이트를 최적화한다. 도 3 내지 도 9와 관련하여 논의된 인코딩 동작은 또한 도 10 및 도 11과 관련하여 일련의 단계들로서 제시된다.
왜곡 및 비트레이트의 최적화
도 2는 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 어떻게 비디오 시퀀스를 샷 시퀀스들로 절단하는지를 도시한다. 도 1 및 도 2와 관련하여 앞서 언급된 바와 같이, 인코딩 엔진(160)은 소스 비디오 시퀀스(170)의 상이한 인코딩된 버전들을 생성하기 위해 인코딩 동작을 수행하도록 구성되고, 여기서 각각의 상이한 버전은 주어진 비트레이트에 대한 왜곡을 최소화하고/하거나 왜곡 및 비트레이트를 최적화한다. 그 인코딩 동작에서의 제1 단계가 도 2에 도시되어 있다. 도시된 바와 같이, 샷 분석기(200)는 소스 비디오 시퀀스(170)를 처리하여 샷 시퀀스들(220(0) 내지 220(P))을 생성하도록 구성된다. 샷 분석기(200)는 인코딩 엔진(160) 내에 포함된 소프트웨어 모듈이다. 도시된 예에서, 소스 비디오 시퀀스(170)는 4096 픽셀 폭 × 2048 픽셀 높이를 의미하는, 4096 × 2048 해상도를 갖는 비디오의 프레임들을 포함한다. 소스 비디오 시퀀스(170)의 해상도는 일반적으로 비디오 시퀀스와 연관된 특정 배포 포맷에 대응한다.
샷 분석기(200)는 소스 비디오 시퀀스(170)와 동일한 해상도를 갖도록 각각의 샷 시퀀스(220)를 생성한다. 그러나, 각각의 샷 시퀀스(220)는 상이한 "샷"에 대응하는 비디오 프레임들의 상이한 시퀀스를 포함한다. 본 개시내용의 맥락에서, "샷"은 단일 카메라 또는 카메라의 가상 표현(예를 들어, 컴퓨터 애니메이팅된 비디오 시퀀스들의 경우)으로부터 연속적으로 캡처된 프레임들의 시퀀스일 수 있다. 샷 시퀀스들(220)을 생성함에 있어서, 샷 분석기(200)는 또한 소스 비디오 시퀀스(170)로부터 관련 없는 픽셀들을 제거할 수 있다. 예를 들어, 샷 분석기(200)는 소스 비디오 시퀀스(170)의 경계 섹션들을 따라 블랙 바들에 포함된 픽셀들을 제거할 수 있다.
샷 분석기(200)는 많은 상이한 기술들을 이용하여 소스 비디오 시퀀스(170)의 어느 프레임들이 각각의 상이한 샷에 대응하는지를 결정할 수 있다. 예를 들어, 샷 분석기(200)는 2개 이상의 순차적 프레임의 서브세트에 걸쳐 크게 변하지 않는 픽셀 값들의 연속적인 분포를 갖는 순차적 프레임 세트를 식별할 수 있다. 대안적으로, 샷 분석기(200)는 각각의 프레임에 존재하는 특징들을 비교하고 유사한 특징들을 갖는 순차적 프레임들을 식별할 수 있다. 관련 기술분야의 통상의 기술자는 소스 비디오 시퀀스를 개별 샷 시퀀스로 파싱하기 위한 많은 기술들이 존재한다는 것을 이해할 것이다. 이러한 방식으로 소스 비디오 시퀀스(170)를 파싱할 때, 인코딩 엔진(160)은 도 3과 관련하여 후술하는 바와 같이, 각각의 샷 시퀀스(220)를 처리하여 상이한 데이터 세트를 생성한다.
도 3은 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 어떻게 도 2의 샷 시퀀스들을 처리하여 데이터 세트를 생성하는지를 도시한다. 도시된 바와 같이, 리샘플러(300)는 샷 시퀀스(220)를 처리하여 리샘플링된 시퀀스들(320(0) 내지 320(M))을 생성한다. 각각의 리샘플링된 시퀀스(320)는 도시된 바와 같이, 상이한 해상도를 갖는다. 리샘플링된 시퀀스(320(0))는 4096 × 2048의 해상도를 가지고, 리샘플링된 시퀀스(320(1))는 2048 × 1024의 해상도를 가지며, 리샘플링된 시퀀스(220(M))는 256 × 144의 해상도를 갖는다. 리샘플링된 시퀀스 세트(320)는 샷 시퀀스(220)와 연관된 해상도 래더(330)에 대응한다.
리샘플러(300)는 해상도들의 임의의 분포를 포함하도록 해상도 래더(330)를 생성할 수 있다. 그러나, 실제로, 리샘플러(300)는 먼저 샷 시퀀스(220)(또는 소스 비디오 시퀀스(170))와 동일한 해상도를 갖도록 리샘플링 시퀀스(320(0))를 생성하고, 이어서 이전의 해상도의 일정한 분율인 해상도를 갖도록 각각의 후속 리샘플링된 시퀀스(320(1))를 계속 생성한다. 실제로, 주어진 리샘플링된 시퀀스(320(H))와 이전의 리샘플링된 시퀀스(320(H-1))의 해상도 간의 비율은 대략 1.5이다.
그러나, 다양한 실시예들에서 더 조밀한 해상도 래더, 즉 1.414 또는 1.26과 같은 1.5 미만의 주어진 리샘플링된 시퀀스(320(H))와 이전의 리샘플링된 시퀀스(320(H-1))의 해상도 간의 비율을 갖는 해상도 래더, 또는 더 거친 해상도 래더, 즉 2.0 또는 3.0과 같은 1.5 초과의 주어진 리샘플링된 시퀀스(320(H))와 이전의 리샘플링된 시퀀스(320(H-1))의 해상도 간의 비율을 갖는 해상도 래더가 이용될 수 있다. 해상도 래더(330)의 밀도는 또한 비디오 샷의 특성들에 의존할 수 있으며, 원하는 품질 레벨들에 균일하게 걸칠 수 있다. 특정 시퀀스를 인코딩하는데 있어서 소비하기를 원하는 CPU의 양과 같은 추가적인 제약들이 해상도 래더들의 밀도를 결정하는데 이용될 수 있다.
이어서, 해상도 래더(330)를 생성할 때, 인코딩 엔진(160)은 병렬 처리 파이프라인 세트(340)를 실행하여 각각의 상이한 리샘플링된 시퀀스(320)를 처리한다. 각각의 처리 파이프라인(340)은, 이에 입력되는 리샘플링된 시퀀스(320)에 기반하여, 데이터 포인트들(350)의 집합을 생성한다. 처리 파이프라인(340(0))은 데이터 포인트들(350(0))을 생성하고, 처리 파이프라인(350(1))은 데이터 포인트들(350(1))을 생성하며, 모든 처리 파이프라인들(340)에 대해 그러한 식이다. 이어서, 인코딩 엔진(160)은 모든 이러한 데이터 포인트들(350)을 결합하여 데이터 세트(360)를 생성한다. 인코딩 엔진(160)이 모든 샷 시퀀스들(220(0) 내지 220(P))에 대해 이 처리를 수행하기 때문에, 인코딩 엔진(160)은 P개의 상이한 데이터 세트들(360)을 생성한다. 예시적인 처리 파이프라인(340)이 도 4와 관련하여 아래에 더 상세히 설명되고, 데이터 세트(360)가 도 5a 및 도 5b와 관련하여 추가로 설명된다.
도 4는 본 발명의 다양한 실시예들에 따른, 도 3의 처리 파이프라인의 더 상세한 도면이다. 도시된 바와 같이, 처리 파이프라인(340)은 리샘플링된 시퀀스(320)를 수신하고, 병렬 서브 파이프라인 세트(450(0) 내지 450(L))를 통해 데이터 포인트들(350)을 생성한다. 각각의 서브 파이프라인(450)은 인코더(400), 디코더(410), 업샘플러(420) 및 메트릭 분석기(430)를 포함한다. 서브 파이프라인(450(0))은 인코더(400(0)), 디코더(410(0)), 업샘플러(420(0)), 및 메트릭 분석기(430(0))를 포함하고, 서브 파이프라인(450(1))은 인코더(400(1)), 디코더(410(1)), 업샘플러(420(1)), 및 메트릭 분석기(430(1))를 포함하며, 모든 서브 파이프라인들(450)에 대해 그러한 식이다. 각각의 서브 파이프라인(450) 내의 인코더들(400) 및 디코더들(410)은 특히 AVC(advanced video coding), HEVC(high-efficiency video encoding) 또는 VP9를 포함하는 임의의 기술적으로 실현가능한 인코딩/디코딩 알고리즘(들)을 구현할 수 있다.
처리 파이프라인(340)의 실행 동안, 각각의 인코더(400(0) 내지 400(L))는 먼저 리샘플링된 시퀀스(320)를 상이한 양자화 파라미터(QP)로 인코딩한다. 인코더(400(0))는 QP=0으로 리샘플링된 시퀀스(320)를 인코딩하고, 인코더(400(1))는 QP=1로 리샘플링된 시퀀스(320)를 인코딩하고, 인코더(400(L))는 QP=L로 리샘플링된 시퀀스(320)를 인코딩한다. 일반적으로, 인코더들(L)의 수는 인코더들(400)에 의해 구현되는 주어진 알고리즘에 대한 이용가능한 QP들의 수에 대응한다. 인코더들(400)이 ×264 구현을 이용하여 AVC 인코딩 알고리즘을 구현하는 실시예들에서, 인코더들(400)은 QP들 대신에 상이한 CRF(constant rate factor)들을 이용하여 설명된 인코딩 동작을 수행할 수 있다. 다양한 실시예들에서, 인코더들(400)은 QP 또는 CRF를 넘어서 임의의 인코딩 파라미터를 변경할 수 있다.
중요하게는, 인코더들(400)에 의해 생성된 인코딩된 리샘플링된 시퀀스들은 궁극적으로 도 2b에 도시된 인코딩된 비디오 시퀀스(180) 내에 포함될 수 있다. 본 개시내용의 맥락에서, 이러한 인코딩된, 리샘플링된 시퀀스들은 본 명세서에서 "청크들"로서 지칭될 수 있다. "청크"는 일반적으로 인코딩 파라미터들의 특정 세트로 인코딩된 비디오 프레임들의 시퀀스를 포함한다. 실제로, 각각의 청크는 특정 해상도로 리샘플링되고, 이어서 주어진 QP로 인코딩된다. 또한, 각각의 청크는 일반적으로 주어진 샷 시퀀스로부터 도출된다. 그러나, 관련 기술분야의 통상의 기술자라면, 비디오 인코딩의 맥락에서 "청크"는 픽처 그룹(GOP), 프레임들의 시퀀스, 프레임들의 복수의 시퀀스 등을 포함하는 다양하고 상이한 구성들을 나타낼 수 있다는 것을 이해할 것이다.
일단 인코더들(400)이 설명된 방식으로 상이한 QP들로 리샘플링된 시퀀스들(320)을 인코딩하면, 각각의 서브 파이프라인(450)은 비교적 유사한 방식으로 진행한다. 디코더들(410)은 인코딩된 시퀀스들을 수신한 다음, 그 시퀀스들을 디코딩한다. 따라서, 업샘플러들(420(0) 내지 420(L))을 통해 출력되는 각각의 비디오 시퀀스는 동일한 해상도를 갖는다. 그러나, 이들 비디오 시퀀스들은 상이한 QP들로 인코딩됨으로써 상이한 품질들을 가질 수 있다.
일 실시예에서, 업샘플러들(420)은 디코딩된 시퀀스들을 한 부류의 엔드포인트 디바이스들의 디스플레이 특성들과 관련될 수 있는 목표 해상도들로 업샘플링한다. 예를 들어, 특정 비디오는 3840 × 2160 해상도로 전달될 수 있지만, 1920 × 1080 해상도로 많은 수의 디스플레이들에 의해 소비되도록 의도될 수 있다. 다른 부류의 엔드포인트 디바이스들, 예를 들어 랩톱 컴퓨터들은 동일한 비디오를 1280 × 720 해상도로 표시할 것으로 예상된다. 또 다른 부류의 엔드포인트 디바이스들, 예를 들어, 태블릿 또는 스마트폰 디바이스들은 960 × 540 해상도로 동일한 비디오를 표시할 것으로 예상된다. 이들 상이한 부류들의 엔드포인트 디바이스들 중 하나를 고려할 때, 디코딩된 시퀀스들은 이에 대응하여 품질을 평가하기 위해 이러한 모든 목표 해상도들로 업샘플링될 수 있다.
메트릭 분석기들(330)은 업샘플링된 시퀀스들을 분석하여 각각의 시퀀스에 대한 객관적 품질 메트릭(QM)을 생성한다. 메트릭 분석기들(330)은, 예를 들어, 다른 가능성들 중에서, 각각의 업샘플링된 시퀀스에 대한 VMAF(video multimethod assessment fusion) 스코어를 생성하기 위해 VMAF 알고리즘을 구현할 수 있다. VMAF 스코어와 같은 다수의 비디오 품질 메트릭이 상이한 목표 해상도들에서 계산될 수 있지만, 상이한 해상도들에서 수행되는 인코딩들 간의 품질들을 비교할 때, 디코딩 후에, 리샘플링을 위해 동일한 목표 해상도를 이용할 필요가 있다는 것이 명백할 것이다. 이하의 논의에서, 업샘플링 및 품질 메트릭 계산을 위한 하나의 이러한 해상도, 예를 들어 1920 × 1080의 공통 HD 해상도를 고려한다.
이어서, 각각의 메트릭 분석기(330)는 리샘플링된 시퀀스(320)의 해상도, 각각의 인코더(400)에 의해 구현된 QP, 및 계산된 QM을 포함하는 상이한 데이터 포인트(440)를 생성한다. 따라서, 각각의 상이한 QP에 대해, 처리 파이프라인(340)은 데이터 포인트(440(0) 내지 440(L))로서 도시된 별개의 데이터 포인트를 생성한다. 중요하게는, 각각의 데이터 포인트(440)는 주어진 샷 시퀀스(220)의 특정 리샘플링된/인코딩된 버전에 대응한다. 이하에서 더 상세히 설명되는 바와 같이, 인코딩 엔진(160)은 연관된 데이터 포인트들(400)에 기반하여 인코딩된 비디오 시퀀스(180)에 포함시키기 위해 각각의 샷 시퀀스(220)의 리샘플링된/인코딩된 버전들을 선택한다. 처리 파이프라인(340)은 도 3에 또한 도시된 바와 같이 모든 이러한 데이터 포인트들(440)을 데이터 포인트들(350)로 수집한다.
이제 도 3을 다시 참조하면, 인코딩 엔진(160)은 각각의 상이한 리샘플링된 시퀀스(320(0) 내지 320(M))에 대해 데이터 포인트들(350(0) 내지 350(M))의 상이한 세트를 생성한 다음, 이들 데이터 포인트들(350)을 데이터 세트(360)로 수집한다. 따라서, 데이터 세트(360)는 M*L 데이터 포인트를 포함하며, 그 이유는 인코더(160)가 M개의 상이한 리샘플링된 시퀀스(320) 및 L개의 상이한 QP의 각각의 조합에 대해 데이터 세트(360)에서 데이터 포인트를 생성하기 때문이다. 각각의 해상도에 대해 동일한 수의 QP들 또는 동일한 QP 값들을 반드시 이용할 필요는 없지만, 대신에 각각의 샷에 적합한 완전히 맞춤화된 수의 QP들 및 QP 값들을 이용한다. 이어서, 인코딩 엔진(160)은 도 5a 및 도 5b와 관련하여 이하에서 논의되는 처리 동작을 수행하여 왜곡 및/또는 비트레이트를 최소화하는 데이터 세트(360) 내의 특정 데이터 포인트들을 식별한다.
볼록 껍질 분석
도 5a는 본 발명의 다양한 실시예들에 따라, 도 3의 데이터 세트에 기반하여 생성되는 비트레이트 대 품질의 그래프이다. 도시된 바와 같이, 그래프(500)는 비트레이트 축(510) 및 품질 메트릭(QM) 축(520)을 포함한다. 그래프(500)는 또한 비트레이트 축(510) 및 QM 축(520)에 대해 플로팅된 품질 곡선들(502, 504 및 506)을 포함한다. 도시된 각각의 곡선은 특정 샷 시퀀스(220)에 대한 상이한 해상도 인코딩에 대응하고, 따라서 데이터 포인트들(350)의 특정 세트로부터 도출될 수 있으며, 주어진 세트 내의 각각의 데이터 포인트(440)는 해상도, QP, 및 QM의 특정 조합에 대응한다. 인코딩 엔진(160)은 각각의 데이터 포인트(440)의 해상도를 주어진 비트레이트로 변환함으로써 곡선들(502, 504, 및 506)에 포함된 데이터 포인트들을 생성한다. 인코딩 엔진(160)은, 예를 들어, 주어진 해상도에 필요한 비트들의 총 수를 연관된 샷 시퀀스(320)의 길이로 나눌 수 있다.
인코딩 엔진(160)은 도 5a에 플로팅된 데이터 세트(160)를 재처리하여 QM을 왜곡 메트릭으로 대체하도록 구성된다. 인코딩 엔진(160)은 QM 값을 뒤집거나, 일정한 값으로부터 QM 값을 감산하거나, 또는 품질을 왜곡으로 변환하기 위해 다른 공지된 기술들을 수행함으로써 주어진 왜곡 메트릭을 계산할 수 있다. 다음으로, 인코딩 엔진(160)은, 도 5b와 관련하여 후술되는 바와 같이, 변환된 값들에 기반하여 볼록 껍질을 생성한다.
도 5b는 본 발명의 다양한 실시예들에 따라, 도 3의 데이터 세트에 기반하여 생성되는 볼록 껍질 데이터 포인트들의 그래프이다. 도시된 바와 같이, 그래프(550)는 비트레이트 축(560) 및 왜곡 축(570)을 포함한다. 인코딩 엔진(160)은 비트레이트 축(560) 및 왜곡 축(570)에 대해 왜곡 곡선들(552, 554 및 556)을 플로팅한다. 이어서, 인코딩 엔진(160)은 경계를 형성하는 모든 곡선들에 걸친 포인트들을 식별함으로써 볼록 껍질 포인트들(580)을 계산하며, 모든 포인트들은 경계의 일 측(이 경우, 경계의 우측) 상에 존재하고, 또한 직선으로 볼록 껍질 상의 임의의 2개의 연속적인 포인트들을 연결하는 것은 동일한 측 상의 모든 나머지 포인트들을 남긴다. 이러한 방식으로, 인코딩 엔진(160)은 각각의 샷 시퀀스(220)에 대한 볼록 껍질 포인트들(580)을 생성할 수 있다. 관련 기술분야의 통상의 기술자는 볼록 껍질들을 생성하기 위한 많은 기술들이 수학 분야에서 잘 알려져 있고, 모든 이러한 기술들이 볼록 껍질(580)을 생성하도록 구현될 수 있다는 것을 이해할 것이다. 일 실시예에서, 인코딩 엔진(160)은 연관된 소스 비디오 시퀀스(170)의 다양한 파라미터들에 기반하여 볼록 껍질 포인트들(580)을 추정하기 위해 기계 학습 기술들을 적용한다. 이러한 방식으로, 지금까지 논의된 계산들 중 일부는 완전히 간소화 및/또는 회피될 수 있다. 인코딩 엔진(160)은 도 6과 관련하여 후술하는 처리 단계들의 시퀀스를 통해 도 5a 및 도 5b와 관련하여 설명된 처리를 수행한다.
도 6은 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 도 5b의 볼록 껍질 데이터 포인트들을 어떻게 생성하는지를 도시한다. 도시된 바와 같이, 왜곡 변환기(600) 및 볼록 껍질 분석기(620)는 협력적으로 데이터 세트(360)를 처리하여 볼록 껍질 포인트들(580)을 생성한다. 동작 시에, 왜곡 변환기(600)는 데이터 세트(360)를 수신하고 그 후 그 데이터 세트에 포함된 QM 값들을 왜곡 값들로 변환한다. 그 후, 볼록 껍질 분석기(620)는 데이터 세트(360)에 대한 볼록 껍질을 계산하여 볼록 껍질 포인트들(580)을 생성한다.
이러한 방식으로, 인코딩 엔진(160)은 연관된 데이터 세트(360)에 기반하여 각각의 샷 시퀀스(320)에 대한 볼록 껍질 포인트들(580)을 계산한다. 따라서, 인코딩 엔진(160)은 P개의 상이한 샷 시퀀스들(320)에 기반하여 P개 세트의 볼록 껍질 포인트들(580)을 생성한다. 다시, 각각의 세트의 볼록 껍질 포인트들(580)은, 하나의 샷 시퀀스에 대해, 샷 시퀀스의 특정한 리샘플링된 인코딩된 버전에 대한 왜곡 및 비트레이트를 설명하는 데이터 포인트들을 포함한다. 이 버전은 주어진 해상도로 리샘플링되고 주어진 QP로 인코딩된다. 인코딩 엔진(160)은 모든 P개의 샷 시퀀스(320)에 대해 생성된 모든 볼록 껍질들(580)을 수집한 다음, 도 7과 관련하여 이하에서 더 상세히 설명되는 바와 같이, 추가 처리를 수행하여 인코딩된 비디오 시퀀스들(180)을 생성한다.
트렐리스 반복을 통한 인코딩된 비디오 시퀀스들의 조립
도 7은 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 복수의 볼록 껍질들을 이용하여 도 2의 비디오 시퀀스의 상이한 버전들을 어떻게 생성하는지를 도시한다. 도시된 바와 같이, 트렐리스 반복기(700)는 볼록 껍질 포인트들(580(0) 내지 580(P))을 수신한 다음, 시퀀스 트렐리스(710)를 반복적으로 업데이트하여 시퀀스 RD 포인트들(720)을 생성한다. 트렐리스 반복기(700)는 인코딩 엔진(160) 내에 포함된 소프트웨어 모듈이다. 시퀀스 트렐리스(710)는 도 8a 내지 도 8d와 관련하여 이하에서 더 상세히 설명되는 데이터 구조이다. 시퀀스 RD 포인트들(720)은 리샘플링된 인코딩된 시퀀스들의 상이한 조합들에 대해 생성된 비트레이트-왜곡(RD) 포인트들을 포함한다.
각각의 시퀀스 RD 포인트(720)는 상이한 인코딩된 비디오 시퀀스(180)에 대응한다. 각각의 인코딩된 비디오 시퀀스(180)는 전술한 리샘플링된 인코딩된 샷 시퀀스들의 상이한 조합을 포함한다. 스트리밍 애플리케이션(730)은 시퀀스 RD 포인트들(720)에 기반하여 인코딩된 비디오 시퀀스들(180)을 엔드포인트 디바이스에 스트리밍하도록 구성된다. 각각의 인코딩된 비디오 시퀀스(180)는, 또한 도 9와 관련하여 이하에서 더 상세히 설명되는 바와 같이, 비디오 시퀀스와 연관된 주어진 평균 비트레이트에 대한 비디오 시퀀스에서의 모든 샷 시퀀스들에 걸친 왜곡을 (평균적으로) 최소화한다. 트렐리스 반복기(700)는 아래에 더 상세히 설명되는 기술을 이용하여 이들 상이한 시퀀스들을 생성한다.
도 8a 내지 도 8d는 본 발명의 다양한 실시예들에 따라, 도 1b의 인코딩 엔진들이 비디오 콘텐츠의 청크들을 인코딩된 비디오 시퀀스로 어떻게 조립하는지를 더 상세히 도시한다. 도 8a 내지 도 8d에 도시된 바와 같이, 시퀀스 트렐리스(710)는 샷 축(800) 및 비트레이트 축(810)을 포함한다. 시퀀스 트렐리스(710)는 또한 볼록 껍질 포인트들(580)의 열들을 포함하며, 여기서 각각의 열은 특정 샷 시퀀스에 대응한다. 예를 들어, 시퀀스 트렐리스(710)에 포함된 0번째 열은 볼록 껍질 포인트들(580(0))에 대응한다. 임의의 열 내의 껍질 포인트들은 상승 비트레이트(그리고, 구성에 의해, 하강 왜곡)에 따라 순위화된다. 껍질 포인트들은 또한 크기가 비트레이트의 함수로서 감소하는 음의 기울기들을 갖도록 보장된다.
편의상, 볼록 껍질 포인트들(580)은 다음의 시스템에 따라 개별적으로 인덱싱된다. 주어진 포인트에 대해, 제1 숫자는 샷 시퀀스의 인덱스이고, 제2 숫자는 그 껍질 포인트들의 비트레이트 순위로의 인덱스이다. 예를 들어, 볼록 껍질 포인트(00)는 0번째 샷 시퀀스 및 0번째 순위의 비트레이트(이 경우, 가장 낮은 비트레이트)에 대응한다. 유사하게, 볼록 껍질 포인트(43)는 4번째 샷 시퀀스 및 3번째 순위의 비트레이트(이 경우, 가장 높은 순위의 비트레이트)에 대응한다.
트렐리스(710) 내에 포함된 각각의 볼록 껍질 포인트는 설명된 바와 같이, 샷 시퀀스(220)의 상이한 리샘플링된 인코딩된 버전에 대응한다. 인코딩 엔진(160)은, 샷 시퀀스들(220)의 이들 리샘플링된 인코딩된 버전들을 결합함으로써, 도 2b에 도시된 인코딩된 비디오 시퀀스들(180)을 생성한다. 인코딩 엔진(160)은 이 결합 기술을 반복적으로 수행하기 위해 시퀀스 트렐리스(710)를 구현한다.
도 8a 내지 도 8d 각각은 상이한 반복에서 트렐리스 반복기(700)에 의해 생성된 시퀀스 트렐리스(710)의 상이한 버전을 나타낸다. 도 8a는 초기 상태에서의 시퀀스 트렐리스(710(0))를 나타낸다. 여기서, 트렐리스 반복기(700)는 껍질 포인트들(00, 10, 20, 30 및 40)을 포함하는 볼록 껍질 포인트들의 시퀀스(820(0))를 생성한다. 이들 초기에 선택된 껍질 포인트들은 가장 낮은 비트레이트 인코딩 및 가장 높은 왜곡을 가지며, 따라서 각각의 열들의 하부에 존재한다. 시퀀스(820(0))에 기반하여, 트렐리스 반복기(700)는 볼록 껍질 포인트들(00, 10, 20, 30 및 40) 각각과 연관된 리샘플링된 인코딩된 샷 시퀀스들(220)을 포함하는 인코딩된 비디오 시퀀스(180)를 생성한다. 트렐리스 반복기(700)는 또한 그 인코딩된 비디오 시퀀스(180)에 기반하여 시퀀스 RD 포인트(720(0))를 생성한다.
이어서, 트렐리스 반복기(710)는 시퀀스(820(0)) 내의 각각의 볼록 껍질 포인트에 대해, 볼록 껍질 포인트와 그 볼록 껍질 포인트 위의 이웃 사이의 비트레이트에 대한 왜곡의 변화율을 계산한다. 예를 들어, 트렐리스 반복기(710)는 노드들(00 및 01, 10 및 11, 20 및 21, 30 및 31, 및 40 및 41) 사이의 비트레이트에 대한 왜곡의 변화율을 계산할 수 있다. 주어진 리샘플링된 인코딩된 샷 시퀀스(220)와 연관된 볼록 껍질 포인트에 대한 계산된 변화율은 볼록 껍질 포인트에서 취해진 그 샷 시퀀스와 연관된 왜곡 곡선의 도함수를 나타낸다.
트렐리스 반복기(710)는 가장 큰 크기를 갖는 도함수를 선택하고, 이어서 후속 시퀀스(820)에 포함시키기 위해 그 도함수와 연관된 위의 이웃을 선택한다. 예를 들어, 도 8b에서, 트렐리스 반복기(700)는 볼록 껍질 포인트(30)와 연관된 도함수가 가장 크다고 결정하고, 따라서 시퀀스(820(1))에 볼록 껍질 포인트(31)(볼록 껍질 포인트(30) 위의 이웃)를 포함시킨다. 시퀀스(820(1))에 기반하여, 트렐리스 반복기(700)는 볼록 껍질 포인트들(00, 10, 20, 31 및 40) 각각과 연관된 리샘플링된 인코딩된 샷 시퀀스들(220)을 포함하는 인코딩된 비디오 시퀀스(180)를 생성한다. 이어서, 트렐리스 반복기(710)는 그 인코딩된 비디오 시퀀스(180)에 기반하여 시퀀스 RD 포인트(720(1))를 생성한다. 트렐리스 반복기(710)는 이 기술을 반복적으로 수행하고, 이에 의해 도 8c 및 도 8d에 도시된 바와 같이, 트렐리스(710)를 상승시킨다.
도 8c에서, 트렐리스 반복기(700)는 볼록 껍질 포인트(10)와 연관된 도함수가 다른 도함수들에 비해 가장 크다고 결정하고, 이어서 시퀀스(820(2))에 포함시키기 위해 볼록 껍질 포인트(11)를 선택한다. 시퀀스(820(2))에 기반하여, 트렐리스 반복기(700)는 볼록 껍질 포인트들(11, 10, 20, 31, 및 40) 각각과 연관된 리샘플링된 인코딩된 샷 시퀀스들(220)을 포함하는 인코딩된 비디오 시퀀스(180)를 생성한다. 트렐리스 반복기(700)는 또한 그 인코딩된 비디오 시퀀스(180)에 기반하여 시퀀스 RD 포인트(720(2))를 생성한다. 트렐리스 반복기(700)는, 도 8d에 도시된 바와 같이, 트렐리스 반복(710(T))과 연관된 시퀀스(820(T))를 생성할 때까지 이 프로세스를 계속한다. 이러한 방식으로, 트렐리스 반복기(700)는 비트레이트가 증가하고, 왜곡이 감소하는 단일 껍질 포인트를 선택함으로써 시퀀스들(820)을 증분적으로 개선하고, 이에 의해 비트레이트가 증가하고, 왜곡이 감소하는 인코딩된 비디오 시퀀스들(180)의 집합을 생성한다.
일 실시예에서, 트렐리스 반복기(700)는 종결 조건을 생성하기 위해 트렐리스(710)를 상승시키기 전에 볼록 껍질 포인트들을 추가한다. 그렇게 함에 있어서, 트렐리스 반복기(700)는 가장 큰 비트레이트를 갖는 볼록 껍질 포인트들을 복제하여 마지막에서 두번째와 마지막 볼록 껍질 포인트 사이의 변화율이 0이 되게 할 수 있다. 이 0의 변화율이 모든 샷들에 대해 검출될 때, 즉 변화율의 최대 크기가 정확히 0일 때, 트렐리스 반복기(700)는 종결 조건을 식별하고 반복을 중단한다.
이제 도 7을 다시 참조하면, 트렐리스 반복기(700)는 위에서 설명된 트렐리스 기술을 통해 도 8a 내지 도 8d에 도시된 시퀀스들(820)에 대응하는 인코딩된 비디오 시퀀스들(180)을 생성한다. 트렐리스 반복기(700)가 왜곡을 감소시키고 비트레이트를 증가시키기 위해 상승 방식으로 시퀀스들(820)을 생성하기 때문에, 인코딩된 비디오 시퀀스들(180)은 높은 왜곡 및 낮은 비트레이트로부터 낮은 왜곡 및 높은 비트레이트까지의 범위에 걸친다. 각각의 시퀀스 RD 포인트(720)는 주어진 인코딩된 비디오 시퀀스(180)에 대한 왜곡 및 비트레이트를 제공하고, 이들 시퀀스 RD 포인트들(720)은 도 9와 관련하여 아래에 논의되는 바와 같이, 볼록 껍질을 생성하도록 플로팅될 수 있다.
도 9는 본 발명의 다양한 실시예들에 따라, 도 8a 내지 도 8d에 도시된 비디오 시퀀스의 상이한 버전들에 대해 생성된 볼록 껍질 데이터 포인트들의 그래프이다. 도시된 바와 같이, 그래프(900)는 비트레이트 축(910) 및 왜곡 축(920)을 포함한다. 곡선(930)은 비트레이트 축(910) 및 왜곡 축(920)에 대해 플로팅된다. 곡선(930)은 도 8a 내지 도 8d와 관련하여 전술한 트렐리스 기술을 통해 생성된 인코딩된 비디오 시퀀스들(180)에 대응하는 시퀀스 RD 포인트들(720)의 집합에 기반하여 생성될 수 있다. 따라서, 곡선(930)은 모든 인코딩된 비디오 시퀀스들(180)에 걸친 비트레이트의 함수로서 왜곡을 나타낸다. 비트레이트(912) 및 왜곡(922)에 대응하는 예시적인 시퀀스 RD 포인트(720)가 도시된다.
곡선(930)에 기반하여, 도 7의 스트리밍 애플리케이션(730)은 주어진 이용가능한 비트레이트에 대해, 그 비트레이트에 대한 왜곡을 최소화하는 특정 인코딩된 비디오 시퀀스(180)를 선택할 수 있다. 스트리밍 애플리케이션(730)은 스트리밍 동안 단일 인코딩된 비디오 시퀀스(180)를 선택하거나, 비디오 시퀀스들 사이에서 동적으로 선택할 수 있다. 예를 들어, 스트리밍 애플리케이션(730)은 샷 경계들에서 인코딩된 비디오 시퀀스들(180) 사이에서 전환할 수 있다. 이러한 접근법으로, 스트리밍 애플리케이션(730)은 과도한 대역폭을 요구하지 않고 일관된 품질의 비디오 경험을 최종 사용자에게 전달할 수 있다.
인코딩 엔진(160)은 저장 및 계산 복잡도를 감소시키기 위해 전술한 기술에 대한 변형들을 구현할 수 있다. 일 실시예에서, 인코딩 엔진(160)은 위의 접근법의 "제약된" 버전을 구현한다. 이제 도 3을 참조하면, 제약된 버전을 구현하기 위해, 인코딩 엔진(160)은 단지 제한된 QP 값 범위로 리샘플링된 시퀀스들(320)을 인코딩한다. 따라서, 모든 가능한 QP 값들에 대해 리샘플링된 시퀀스(320)의 버전들을 생성하는 대신에, 인코딩 엔진(160)은 원하는 QP 값 범위를 선택하고, 그 후 단지 그 QP 값 범위에 대해 리샘플링된 시퀀스(320)를 인코딩할 수 있다. 더 높은 QP 값들이 허용가능하지 않게 낮은 품질을 제공하기 때문에, 이러한 더 높은 QP 값들은 인코딩 목적들에 불필요한 것으로 간주될 수 있다. 마찬가지로, 더 낮은 QP 값들이 불합리한 비트레이트를 요구하기 때문에, 이러한 QP 값들은 또한 불필요한 것으로 간주될 수 있다. 따라서, 인코딩 엔진(160)은 최종 사용자에게 실제로 전달되어야 하는 인코딩들을 생성할 가능성이 있는 QP 값들만으로 인코딩을 제약할 수 있다. 추가 실시예에서, 인코딩 엔진(160)은 샷마다 생성되는 상이한 인코딩들의 수를 일정한 값으로 고정한다. 일정한 값보다 주어진 샷에 대해 더 적은 인코딩들이 생성되는 상황들에서, 인코딩 엔진(160)은 일정한 값을 충족시키기 위해 인코딩들을 복제할 수 있다. 다양한 실시예들에서, 인코딩 엔진(160)은 임의의 기술적으로 실현가능한 방식으로 인코딩 목적들에 이용되는 인코딩 파라미터에 대한 값들의 수를 제한할 수 있다.
예를 들어, 인코딩 엔진(160)은 하나 이상의 효율-관련 기준에 기반하여 인코딩 파라미터에 대한 가능한 값들의 서브세트를 선택할 수 있다. 예를 들어, 인코딩 엔진(160)은 더 작은 범위의 QP 값들 내에서 매 다른 QP 값, 매 3번째 QP 값 또는 매 N번째 QP 값(여기서 N은 2 내지 10 범위의 정수임)을 선택할 수 있다. 일부 대안적인 실시예들에서, 다양한 샷 시퀀스들의 복수의 인코딩들로부터 통계치들이 수집되어, 인코딩 엔진(160)에 의해 상이한 QP 값들이 선택될 통계적 확률을 결정할 수 있다. 이어서, 인코딩 엔진(160)이 인코딩 목적들에 이용하는 QP 값들은 통계적 확률들에 기반하여 제한될 수 있다. 더 구체적으로, 인코딩 엔진(160)은 인코딩 엔진(160)이 통계적 확률들에 기반하여 선택할 가능성이 가장 큰 QP 값들을 이용하도록 제약될 수 있다.
다른 실시예에서, 인코딩 엔진(160)은 위의 접근법의 "반복적" 버전을 구현하고, 이에 의해 인코딩 엔진(160)은 목표 비트레이트 또는 목표 왜곡 레벨을 갖는 인코딩을 결정하기 위해 복수의 인코딩 패스를 수행한다. 초기에, 인코딩 엔진(160)은 "제약된" 접근법과 관련하여 앞서 논의된 것과 같은 QP 값들의 제약된 범위를 이용하여 제1 패스를 수행할 수 있다. 일단 인코딩 엔진(160)이 도 9에 도시된 것과 같은 시퀀스 RD 포인트들의 볼록 껍질을 생성하였으면, 인코딩 엔진(160)은 목표 비트레이트 또는 목표 왜곡 레벨에 가장 가까운 시퀀스 RD 포인트를 식별한다. 이어서, 인코딩 엔진(160)은 볼록 껍질 상의 하나 이상의 근처의 포인트를 식별하고, 이들 포인트들과 연관된 QP들의 범위에 기반하여 추가적인 인코딩들을 수행한다. 이러한 방식으로, 인코딩 엔진(160)은 특정 비트레이트 또는 왜곡을 목표로 하기 위해 인코딩에 이용되는 QP들의 범위를 반복적으로 정밀화할 수 있다.
또 다른 실시예에서, 인코딩 엔진(160)은 위의 접근법의 "고정 품질" 버전을 구현하고, 저장되고 후속하여 처리될 필요가 있는 샷 인코딩들의 수를 제한한다. 이러한 접근법으로, 인코딩 엔진(160)은 미리 결정된, 잘 이격된 품질 간격들로 샷 인코딩들을 생성할 수 있다. 이어서, 인코딩 엔진(160)은 이 샷 인코딩들을 전체 시퀀스에 걸쳐 고정 품질을 갖는 완전한 인코딩된 비디오 시퀀스들(180)로 조립할 수 있다. 샷 시퀀스마다 구현되는 샷 인코딩들의 수는 품질과 저장 요구 사이의 절충을 나타내는 구성가능한 파라미터이다. 이 기술을 수행함에 있어서, 인코딩 엔진(160)은 볼록 껍질 포인트들(580)을 처리하고, 이어서 나머지 포인트들이 원하는 샷 인코딩들의 수를 나타낼 때까지 관련 없는 포인트들을 반복적으로 제거한다. 인코딩 엔진(160)은 예를 들어, 인접한 볼록 껍질 포인트들(580)에 대해 가장 작은 갭을 갖는 볼록 껍질 포인트들(580)을 반복적으로 제거할 수 있다. 이 기술은 인코딩 엔진(160)이 샷 인코딩들의 최소 품질을 최대화하는 것을 허용한다.
다른 실시예들에서, 인코딩 엔진(160)은 위의 접근법의 "최소-최대 최적화" 버전을 구현한다. 이러한 구현에서, 인코딩 엔진(160)은 도함수 값들 대신에 왜곡 메트릭들 또는 품질 메트릭들에 기반하여 후속 시퀀스(820)에 포함시키기 위한 볼록 껍질 포인트를 선택한다. 특히, 인코딩 엔진(150)은 최대 왜곡 메트릭(또는 최대 품질 메트릭)을 갖는 시퀀스(820(x))에 포함된 볼록 껍질 포인트를 결정하고, 이어서 후속 시퀀스(820(x+1))에 포함시키기 위해 선택된 볼록 껍질 포인트 위의 이웃을 포함한다.
관련 실시예들에서, 시퀀스 트렐리스(710)를 상승시킬 때, 인코딩 엔진(160)은 볼록 껍질 포인트들(580) 사이의 기울기 변화들을 실제 품질 값과 절충할 수 있다. 그렇게 함에 있어서, 후속 시퀀스에 포함시키기 위해 볼록 껍질 포인트(580)를 선택하기 전에, 인코딩 엔진(160)은 주어진 임계값 미만의 품질 메트릭(또는 주어진 임계값 초과의 왜곡 메트릭)을 갖는 샷 시퀀스들(및 대응하는 볼록 껍질 포인트들(580))을 필터링할 수 있다. 이러한 방식으로 이용가능한 샷 시퀀스들 및 볼록 껍질 포인트들을 제약한 후에만, 인코딩 엔진(160)은 나머지 볼록 껍질 포인트들(580)의 기울기 값들을 비교하는 것에 기반하여 후속하는 인코딩된 비디오 시퀀스(180)를 생성한다. 이 접근법은 평균 품질 및 최소 품질 양자를 최대화할 수 있다.
지금까지 논의된 접근법들 중 임의의 것에 의해, 인코딩 엔진(160)은 인코딩 거동을 제한하는 특정 제약들을 시행하도록 구성될 수 있다. 예를 들어, 인코딩 엔진(160)은 인코딩된 샷 시퀀스들의 왜곡을 최대 허용가능한 왜곡 레벨 아래로 항상 떨어지게 제한하도록 구성될 수 있다. 그러나, 더 복잡한 제약들에 따르게 하기 위해 인코딩 엔진(160)에 대한 조정들이 필요할 수 있다. 복잡한 제약의 예는 관련 기술분야의 통상의 기술자에게 공지된 비디오 버퍼 검증기(VBV) 제약이다. VBV 제약은 일반적으로 데이터가 비교적 일정한 비트레이트로 도달해야 하고 비교적 일정한 크기를 갖는 버퍼에 저장되어야 한다고 적시한다. 이러한 제약은, 다른 잠재적인 문제들 중에서도, 버퍼 오버플로우 및/또는 언더플로우를 피하는 것을 돕는다. VBV 일정 비트레이트(CBR) 제약 및 VBV 가변 비트레이트(VBR) 제약을 포함하는 VBV 제약의 더 구체적인 공식들은 또한 관련 기술분야의 통상의 기술자에게 공지되어 있으며, 이들 특정 버전들의 논의는 간결성을 위해 생략된다.
일 실시예에서, 인코딩 엔진(160)은, 최종 인코딩된 비디오 시퀀스들(180)이 위에서 논의된 VBV 제약을 포함하는 임의의 복잡한 제약들의 세트들을 따르도록 하는 방식으로 도 8a 내지 도 8d와 관련하여 이전에 논의된 트렐리스 상승을 수행하도록 구성될 수 있다. 그렇게 함에 있어서, 인코딩 엔진(160)은 이웃하는 볼록 껍질 포인트들(580) 사이의 기울기 값들을 분석하여 후속 시퀀스에 포함시키기 위한 새로운 껍질 포인트를 선택할 뿐만 아니라, 하나 이상의 제약(예를 들어, VBV CBR, VBV VBR 등)을 갖는 각각의 가능한 후속 시퀀스의 준수를 분석한다. 따라서, 잠재적으로 후속 시퀀스에 포함될 수 있는 각각의 볼록 껍질 포인트(580)에 대해, 인코딩 엔진(160)은 그 시퀀스가 제약들을 따르는 정도를 결정한다. 이어서, 인코딩 엔진(160)은 후속 시퀀스들이 그 준수를 유지하게 하는 볼록 껍질 포인트들(580)을 선택한다. 이러한 형태의 트렐리스 상승은 "동적 프로그래밍" 접근법을 구성하고, 또한 비트레이트 대 왜곡을 최적화하는 특정 문제에 대한 비터비(Viterbi) 솔루션의 형태를 나타낼 수 있다.
대안적인 실시예들에서, 인코딩 엔진(180) 및 스트리밍 애플리케이션(730)은 인코딩된 비디오 시퀀스들(180)이 임의의 기술적으로 실현가능한 방식으로 엔드포인트 디바이스들에 전달되게 할 수 있다. 동일한 또는 다른 실시예들에서, 인코딩 엔진(180) 및 스트리밍 애플리케이션(730)과 연관된 기능의 임의의 양 및 유형은 임의의 기술적으로 실현가능한 방식으로, 임의의 수의 호스트 컴퓨터들(110), 임의의 수의 클라우드 컴퓨터들(140), 임의의 수의 클라이언트 컴퓨터들(도시되지 않음), 및 임의의 수의 엔드포인트 디바이스들에서 구현되거나 이들에 걸쳐 분산될 수 있다.
예를 들어, 일부 실시예들에서, 인코딩 엔진(180)은 메타데이터를 엔드포인트 디바이스들 상에서 실행되는 클라이언트 애플리케이션들에 전달하도록 스트리밍 애플리케이션(730)을 구성한다. 메타데이터는, 제한 없이, 하나 이상의 인코딩된 샷 시퀀스 및/또는 인코딩된 비디오 시퀀스(180)와 연관된 비트레이트들 및 품질 메트릭들과 같은, 임의의 레벨의 입도로 인코딩된 비디오 콘텐츠와 연관된 메트릭들을 포함한다. 클라이언트 애플리케이션들은 임의의 기술적으로 실현가능한 방식으로 메타데이터에 기반하여 임의의 유형 및 양의 적응형 스트리밍 동작들을 수행할 수 있다.
하나의 시나리오에서, 사용자는 영화를 랩톱에 스트리밍하도록 비디오 플레이어 애플리케이션을 구성한다. 스트리밍 애플리케이션(190)은 4개의 상이한 인코딩된 비디오 시퀀스들(180(1-4))과 연관된 메타데이터를 비디오 플레이어 애플리케이션에 전송한다. 메타데이터는 인코딩된 비디오 시퀀스(180(4))가 가장 높은 비트레이트 및 가장 높은 시각적 품질과 연관되는 반면, 인코딩된 비디오 시퀀스(180(1))가 가장 낮은 비트레이트 및 가장 낮은 시각적 품질과 연관된다는 것을 나타낸다. 임의의 주어진 시간에, 비디오 플레이어 애플리케이션은 리버퍼링으로 인한 재생 중단들을 피하면서 영화의 재생 동안 가장 높은 이용가능한 시각적 품질을 제공하는 인코딩된 비디오 시퀀스(180)를 선택한다.
초기의 이용가능한 대역폭 및 메타데이터에 기반하여, 비디오 플레이어 애플리케이션은 비디오 플레이어 애플리케이션에 인코딩된 비디오 시퀀스(180(4))를 스트리밍하기 시작하도록 스트리밍 애플리케이션(730)을 구성한다. 이러한 방식으로, 비디오 플레이어 애플리케이션은 영화의 재생 동안 가장 높은 이용가능한 시각적 품질을 제공한다. 일반적으로, 인터넷 트래픽 때문에, 특히 하루 중의 피크 시간들 동안, 접속 조건들은 빠르게 변할 수 있고 매우 가변적일 수 있다. 설명된 시나리오에서, 10분의 재생 후에, 이용가능한 대역폭이 급격히 감소한다. 감소된 대역폭 및 메타데이터에 기반하여, 비디오 플레이어 애플리케이션은 인코딩된 비디오 시퀀스(180(4))와 인코딩된 비디오 시퀀스(180(1)) 사이에서 동적으로 전환하도록 스트리밍 애플리케이션(730)을 구성한다. 다음 샷 경계에서, 스트리밍 애플리케이션(730)은 인코딩된 비디오 시퀀스(180(4)) 대신에 인코딩된 비디오 시퀀스(180(1))를 비디오 플레이어 애플리케이션에 스트리밍하기 시작한다. 비디오 플레이어 애플리케이션이 더 이상 영화의 재생 동안 가장 높은 이용가능한 시각적 품질을 제공할 수 없지만, 비디오 플레이어 애플리케이션은 리버퍼링으로 인한 재생 중단들을 성공적으로 피한다.
관련 기술분야의 통상의 기술자는 지금까지 설명된 기술들이 또한 비디오에서 오디오로도 적용가능하다는 것을 이해할 것이다. 예를 들어, 위에서 논의된 객관적 품질 메트릭은 오디오 품질의 척도를 제공할 수 있다. 위의 기술들의 나머지 부분들은 달리 유사한 방식으로 진행할 것이다.
인코딩된 비디오 시퀀스들을 생성하기 위한 절차들
도 10은 본 발명의 다양한 실시예들에 따라, 비디오 콘텐츠의 청크들을 인코딩된 비디오 시퀀스로 조립하기 위한 방법의 단계들의 흐름도이다. 이 방법의 단계들이 도 1 내지 도 9의 시스템과 관련하여 설명되지만, 관련 기술분야의 통상의 기술자는 이 방법의 단계들을 임의의 순서로 수행하도록 구성된 임의의 시스템이 본 발명의 범위 내에 있다는 것을 이해할 것이다.
도시된 바와 같이, 방법(1000)은 단계(1002)에서 시작하고, 여기서 인코딩 엔진(160)은 소스 비디오 시퀀스(170)를 수신한다. 소스 비디오 시퀀스(170)는 고유한 또는 "배포" 포맷으로 인코딩된 프레임 시퀀스를 포함한다. 단계(1004)에서, 인코딩 엔진(160)은 소스 비디오 시퀀스(170)를 처리하여 필요치 않는 픽셀들을 제거한다. 이러한 픽셀들은 비디오 시퀀스의 실제 콘텐츠에 인접하여 존재하는 수평 또는 수직 블랙 바들에 존재할 수 있다. 단계(1006)에서, 인코딩 엔진(160)은 소스 비디오 시퀀스(170)를 샷 시퀀스들(220)로 절단한다. 각각의 샷 시퀀스(220)는 (컴퓨터 애니메이팅된 시퀀스들의 경우에) 특정 카메라 또는 시뮬레이팅된 카메라로부터 캡처된 프레임들의 서브시퀀스를 포함한다.
이 방법은 이어서 단계(1008)로 진행한다. 단계(1008)에서, 각각의 샷 시퀀스(220)에 대해, 인코딩 엔진(160)은 도 3에 도시된 바와 같이, 샷 시퀀스를 M번 리샘플링하여 리샘플링된 시퀀스들(320)의 해상도 래더(330)를 생성한다. 각각의 리샘플링된 시퀀스(320)는 상이한 해상도를 갖는다. 하나의 리샘플링된 시퀀스(320)는 원래의 비디오 시퀀스와 동일한 해상도를 갖는다.
이 방법은 이어서 단계(1010)로 진행한다. 해상도 래더(330) 내의 각각의 리샘플링된 시퀀스(320)에 대해, 인코딩 엔진(160)은 처리 파이프라인(340)을 통해 리샘플링된 시퀀스(320)를 처리하여 데이터 포인트들(350)을 생성한다. 처리 파이프라인(340)에 의해 실행되는 특정 처리 단계들은 도 11과 관련하여 아래에서 더 상세히 설명된다. 각각의 데이터 포인트(350)는, 도 11과 관련하여 이하에서 더 상세히 논의되는 바와 같이, 주어진 리샘플링된 시퀀스(320)에 대해, 시퀀스의 인코딩 해상도, 시퀀스에 대한 품질 메트릭, 및 시퀀스를 인코딩하는데 이용되는 QP 값을 나타낸다.
단계(1012)에서, 인코딩 엔진(160)은 해상도 래더(330) 내의 모든 리샘플링된 시퀀스들(320)에 대한 모든 데이터 포인트들(350)을 수집하여 데이터 세트(360)를 생성한다. 데이터 세트(360)는 하나의 샷 시퀀스(220)에 대응한다. 데이터 세트(360) 내의 각각의 데이터 포인트는 샷 시퀀스의 상이한 인코딩 및 상이한 해상도에 대응한다. 단계(1014)에서, 인코딩 엔진(160)은 이들 데이터 포인트들과 연관된 품질 메트릭을 왜곡 메트릭으로 변환하고, 그 후 도 5b에 도시된 바와 같이, 데이터 세트에 대한 볼록 껍질 포인트들(580)을 생성한다. 볼록 껍질 포인트들(580)은 모든 리샘플링된/인코딩된 샷 시퀀스들에 걸쳐 왜곡 또는 비트레이트를 최소화한다.
단계(1016)에서, 인코딩 엔진(160)은 모든 해상도 래더들에 걸쳐 모든 볼록 껍질 포인트들(580)을 수집하여 시퀀스 트렐리스(710)를 생성한다. 예시적인 시퀀스 트렐리스(710)의 구성은 도 8a 내지 도 8d와 관련하여 상세히 논의된다. 단계(1018)에서, 인코딩 엔진(160)은 시퀀스 트렐리스를 반복적으로 상승시켜서 인코딩된 비디오 시퀀스들(180) 및 대응하는 시퀀스 RD 포인트들(720)의 집합을 생성한다. 시퀀스 트렐리스(710)를 상승시키기 위한 접근법은 도 12와 관련하여 논의된다.
단계(1020)에서, 스트리밍 애플리케이션(730)은 연관된 시퀀스 RD 포인트(720)에 기반하여 스트리밍을 위한 인코딩된 비디오 시퀀스(180)를 선택한다. 그렇게 함에 있어서, 스트리밍 애플리케이션은 주어진 이용가능한 비트레이트에 대한 왜곡을 최소화하는 특정 시퀀스 RD 포인트(720)를 선택하고, 그 후 그 시퀀스 RD 포인트(720)와 연관된 인코딩된 비디오 시퀀스(180)를 엔드포인트 디바이스에 스트리밍할 수 있다.
도 11은 본 발명의 다양한 실시예들에 따라, 리샘플링된 샷 시퀀스를 처리하여 데이터 포인트들의 세트를 생성하기 위한 방법의 단계들의 흐름도이다. 이 방법의 단계들이 도 1 내지 도 9의 시스템들과 관련하여 설명되지만, 관련 기술분야의 통상의 기술자는 이 방법의 단계들을 임의의 순서로 수행하도록 구성된 임의의 시스템이 본 발명의 범위 내에 있다는 것을 이해할 것이다.
인코딩 엔진(160)은 처리 파이프라인(340) 내에서 주어진 서브 파이프라인(450)과 연관된 처리를 수행하도록 방법(1100)을 구현한다. 인코딩 엔진(160)은 주어진 처리 파이프라인(340)을 구현하기 위해 복수의 서브 파이프라인(450)을 병렬로 실행할 수 있고, 따라서 방법(1100)을 여러 번 수행할 수 있다.
도시된 바와 같이, 방법(1100)은 단계(1102)에서 시작하고, 여기서 인코딩 엔진(160)은 리샘플링된 시퀀스(320)를 선택된 양자화 파라미터(QP)로 인코딩한다. 단계(1104)에서, 인코딩 엔진(160)은 이어서 인코딩된 시퀀스를 디코딩하고, 단계(1106)에서, 디코딩된 시퀀스를 소스 비디오 시퀀스(170)와 연관된 해상도로 업샘플링한다. 단계(1108)에서, 인코딩 엔진(160)은 업샘플링된 시퀀스에 대한 하나 이상의 품질 메트릭(QM)을 생성한다. 단계(1110)에서, 인코딩 엔진(160)은 리샘플링된 시퀀스 해상도, 양자화 파라미터(QP)의 선택, 및 인코딩된 리샘플링된 비디오 시퀀스에 대해 생성된 품질 메트릭(QM)을 포함하는 데이터 포인트(440)를 생성한다.
도 12는 본 발명의 다양한 실시예들에 따라, 인코딩된 비디오 시퀀스들의 세트를 생성하기 위한 방법의 단계들의 흐름도이다. 이 방법의 단계들이 도 1 내지 도 9의 시스템들과 관련하여 설명되지만, 관련 기술분야의 통상의 기술자는 이 방법의 단계들을 임의의 순서로 수행하도록 구성된 임의의 시스템이 본 발명의 범위 내에 있다는 것을 이해할 것이다.
도시된 바와 같이, 방법(1200)은 단계(1202)에서 시작하고, 여기서 인코딩 엔진(160)은 모든 샷 시퀀스들(220)에 대한 볼록 껍질 포인트들(580)에 기반하여 시퀀스 트렐리스(710)를 생성한다. 도 8a 내지 도 8d와 관련하여 앞서 논의된 바와 같이, 시퀀스 트렐리스(710)는 볼록 껍질 포인트들(580)의 개별 열들을 포함하고, 각각의 열은 특정 샷 시퀀스에 대응한다. 따라서, 소스 비디오 시퀀스(170)의 인코딩된 버전은 각각의 이러한 열로부터 하나의 인코딩된 리샘플링된 샷 시퀀스(220)를 수집함으로써 구성될 수 있다.
단계(1204)에서, 인코딩 엔진(160)은 가장 낮은 비트레이트를 갖는 볼록 껍질 포인트들(580)의 시퀀스를 결정한다. 단계(1206)에서, 인코딩 엔진(160)은 결정된 시퀀스를 "현재 시퀀스"로 지정한다. 단계(1208)에서, 인코딩 엔진은 현재 시퀀스에 기반하여 인코딩된 비디오 시퀀스를 생성한다. 그렇게 함에 있어서, 인코딩 엔진(160)은 볼록 껍질 포인트들(580)의 시퀀스와 연관된 각각의 리샘플링된 인코딩된 샷 시퀀스(220)를 수집하여 소스 비디오 시퀀스(170)의 인코딩된 버전을 구성한다. 단계(1210)에서, 인코딩 엔진(160)은 그 인코딩된 비디오 시퀀스에 기반하여 시퀀스 RD 포인트(720)를 생성한다.
단계(1212)에서, 인코딩 엔진(160)은 현재 시퀀스 내의 각각의 볼록 껍질 포인트와 위의 이웃 볼록 껍질 포인트 사이의 기울기의 크기를 계산한다. 주어진 볼록 껍질 포인트의 "위의 이웃"은 볼록 껍질 포인트 바로 위에 그리고 동일한 열 내에 존재한다. 단계(1214)에서, 인코딩 엔진(160)은 서로에 대해 가장 큰 기울기 크기를 갖는 볼록 껍질 포인트 및 위의 이웃 볼록 껍질 포인트를 식별한다. 단계(1216)에서, 인코딩 엔진(160)은 볼록 껍질 포인트를 위의 이웃 볼록 껍질 포인트로 대체하는 볼록 껍질 포인트들의 새로운 시퀀스를 생성한다. 마지막으로, 단계(1218)에서, 인코딩 엔진(160)은 새로운 시퀀스를 "현재 시퀀스"로 지정하고, 단계(1208)로 복귀한다. 인코딩 엔진(160)은 다른 시퀀스들과 비교하여 최대 비트레이트를 갖는 인코딩된 시퀀스(170)를 생성할 때까지, 또는 다른 종결 조건이 충족될 때까지 방법(1200)을 반복할 수 있다.
이러한 방식으로, 인코딩 엔진(160)은 다른 버전들과 비교하여 왜곡 및 비트레이트를 최대로 감소시키는 현재 시퀀스의 후속 버전들을 결정함으로써 시퀀스 트렐리스(710)를 "상승(climb)"시킨다. 이러한 방식으로 시퀀스 트렐리스(710)를 상승시킴으로써, 인코딩 엔진(160)은 모든 리샘플링된 인코딩된 샷 시퀀스들(본 명세서에서는 "청크들"로도 지칭됨)의 모든 가능한 조합들을 고려할 필요가 없다. 따라서, 인코딩 엔진(160)은 비트레이트들의 범위에 대한 왜곡을 최적화하는 인코딩된 비디오 시퀀스들의 스펙트럼을 여전히 결정하면서 상당한 계산 자원들을 보존할 수 있다.
요컨대, 인코딩 엔진은 비디오 시퀀스를 인코딩하여 주어진 비트레이트에 대한 최적의 품질을 제공한다. 인코딩 엔진은 비디오 시퀀스를 샷 시퀀스들의 집합으로 절단한다. 각각의 샷 시퀀스는 특정 캡처 포인트로부터 캡처된 비디오 프레임들을 포함한다. 인코딩 엔진은 상이한 해상도들의 범위에 걸쳐 각각의 샷 시퀀스를 리샘플링하고, 각각의 리샘플링된 시퀀스를 품질 파라미터들의 범위로 인코딩한 다음, 각각의 인코딩된 시퀀스를 비디오 시퀀스의 원래 해상도로 업샘플링한다. 각각의 업샘플링된 시퀀스에 대해, 인코딩 엔진은 품질 메트릭을 계산하고, 품질 메트릭 및 리샘플 해상도를 포함하는 데이터 포인트를 생성한다. 인코딩 엔진은 모든 이러한 데이터 포인트들을 수집하고 이어서 결과적인 데이터 세트의 볼록 껍질을 계산한다. 모든 샷 시퀀스들에 걸친 모든 볼록 껍질들에 기반하여, 인코딩 엔진은 비트레이트들의 범위에 대한 샷 시퀀스들의 최적의 집합을 결정한다.
본 명세서에서 설명된 기술들의 적어도 하나의 장점은, 비디오 시퀀스가 주어진 비트레이트에 대해 최상의 이용가능한 품질로 최종 사용자에게 스트리밍될 수 있다는 것이다. 반대로, 주어진 원하는 품질에 대해, 비디오 시퀀스에는 최소의 가능한 비트레이트가 제공될 수 있다.
1. 본 발명의 일부 실시예들은 컴퓨터에 의해 구현되는 방법을 포함하며, 이 컴퓨터에 의해 구현되는 방법은, 소스 비디오 시퀀스에 대한 제1 세트의 인코딩된 청크들을 생성하는 단계; 제1 세트의 인코딩된 청크들에 기반하여 제1 세트의 데이터 포인트들을 생성하는 단계; 적어도 2개의 메트릭에 걸쳐 최적화되는 제1 서브세트의 데이터 포인트들을 계산하기 위해 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 단계; 제1 서브세트의 데이터 포인트들에 포함된 제1 데이터 포인트와 제1 서브세트의 데이터 포인트들에 포함된 제2 데이터 포인트 사이의 제1 기울기 값을 계산하는 단계; 및 제1 기울기 값에 기반하여, 제1 데이터 포인트와 연관된 제1 인코딩된 청크가 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하는 단계를 포함한다.
2. 1항에 있어서, 제1 세트의 인코딩된 청크들을 생성하는 단계는, 소스 비디오 시퀀스 내에서 제1 캡처 포인트와 연관되는 제1 시퀀스의 프레임들을 식별하는 단계; 복수의 상이한 해상도로 제1 시퀀스의 프레임들을 리샘플링하여 제1 시퀀스의 프레임들의 리샘플링된 버전들의 해상도 래더를 생성하는 단계; 및 상이한 인코딩 파라미터로 제1 시퀀스의 프레임들의 각각의 리샘플링된 버전을 인코딩하여 제1 세트의 인코딩된 청크들을 생성하는 단계를 포함한다.
3. 1항 또는 2항에 있어서, 제1 세트의 데이터 포인트들을 생성하는 단계는, 제1 세트의 인코딩된 청크들 내의 각각의 인코딩된 청크를 디코딩하여 제1 세트의 디코딩된 청크들을 생성하는 단계; 제1 세트의 디코딩된 청크들 내의 각각의 디코딩된 청크를 소스 비디오 시퀀스와 연관된 소스 해상도로 업샘플링하여 제1 세트의 업샘플링된 청크들을 생성하는 단계; 및 제1 세트의 업샘플링된 데이터 청크들 내의 각각의 업샘플링된 청크에 대한 상이한 데이터 포인트를 생성하는 단계를 포함한다.
4. 1항 내지 3항 중 어느 한 항에 있어서, 제1 세트의 데이터 포인트들에서의 특정 데이터 포인트는, 제1 세트의 업샘플링된 청크들 내의 특정 업샘플링된 청크에 대한 특정 객관적 품질 메트릭을 생성하는 단계; 특정 객관적 품질 메트릭을 특정 왜곡 메트릭으로 변환하는 단계; 특정 업샘플링된 청크에 대한 비트레이트를 계산하는 단계; 특정 왜곡 메트릭과 비트레이트를 결합하여 특정 데이터 포인트를 생성하는 단계에 의해 생성된다.
5. 1항 내지 4항 중 어느 한 항에 있어서, 제1 서브세트의 데이터 포인트들을 계산하기 위해 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 단계는, 제1 세트의 데이터 포인트들을 포함하는 제1 영역을 결정하는 단계; 제1 영역의 제1 경계를 식별하는 단계 - 제1 세트의 포인트들 내의 데이터 포인트들은 제1 경계의 제1 측 상에 존재하지 않음 -; 제1 경계를 따라 존재하지 않는 임의의 데이터 포인트들을 폐기하는 단계 - 제1 경계를 따라 존재하는 각각의 데이터 포인트는 제2 메트릭에 대해 제1 메트릭을 최적화함 -를 포함한다.
6. 1항 내지 5항 중 어느 한 항에 있어서, 제1 메트릭은 왜곡을 포함하고, 제2 메트릭은 비트레이트를 포함한다.
7. 1항 내지 6항 중 어느 한 항에 있어서, 소스 비디오 시퀀스에 대한 제2 세트의 인코딩된 청크들을 생성하는 단계; 제2 세트의 인코딩된 청크들에 기반하여 제2 세트의 데이터 포인트들을 생성하는 단계; 적어도 2개의 메트릭에 걸쳐 최적화되는 제2 서브세트의 데이터 포인트들을 계산하기 위해 제2 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 단계; 및 제2 서브세트의 데이터 포인트들에 포함된 제3 데이터 포인트와 제2 서브세트의 데이터 포인트들에 포함된 제4 데이터 포인트 사이의 제2 기울기 값을 계산하는 단계를 더 포함한다.
8. 1항 내지 7항 중 어느 한 항에 있어서, 제1 데이터 포인트와 연관된 제1 인코딩된 청크가 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하는 단계는 제1 기울기가 제2 기울기보다 더 큰 크기를 갖는다고 결정하는 단계를 포함한다.
9. 1항 내지 8항 중 어느 한 항에 있어서, 제2 기울기 값이 다른 서브세트들의 데이터 포인트들과 연관된 다른 기울기 값들보다 더 크다고 결정하는 것에 기반하여, 제4 데이터 포인트와 연관된 제2 인코딩된 청크가 소스 비디오 시퀀스의 다른 인코딩된 버전에 포함되어야 한다고 결정하는 단계를 더 포함한다.
10. 1항 내지 9항 중 어느 한 항에 있어서, 제1 세트의 인코딩된 청크들은 제1 캡처 포인트로부터 연속적으로 캡처된 제1 시퀀스의 비디오 프레임들과 연관되고, 제2 세트의 인코딩된 청크들은 제2 캡처 포인트로부터 연속적으로 캡처된 제2 시퀀스의 비디오 프레임들과 연관된다.
11. 프로그램 명령어들을 저장하는 비일시적 컴퓨터 판독가능한 매체로서, 프로그램 명령어들은, 프로세서에 의해 실행될 때, 프로세서를, 소스 비디오 시퀀스에 대한 제1 세트의 인코딩된 청크들을 생성하는 것; 제1 세트의 인코딩된 청크들에 기반하여 제1 세트의 데이터 포인트들을 생성하는 것; 적어도 2개의 메트릭에 걸쳐 최적화되는 제1 서브세트의 데이터 포인트들을 계산하기 위해 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 것; 제1 서브세트의 데이터 포인트들에 포함된 제1 데이터 포인트와 제1 서브세트의 데이터 포인트들에 포함된 제2 데이터 포인트 사이의 제1 기울기 값을 계산하는 것; 및 제1 기울기 값에 기반하여, 제1 데이터 포인트와 연관된 제1 인코딩된 청크가 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하는 것을 수행하도록 구성한다.
12. 11항에 있어서, 제1 세트의 인코딩된 청크들을 생성하는 것은, 소스 비디오 시퀀스 내에서 제1 캡처 포인트와 연관되는 제1 시퀀스의 프레임들을 식별하는 것; 복수의 상이한 해상도로 제1 시퀀스의 프레임들을 리샘플링하여 제1 시퀀스의 프레임들의 리샘플링된 버전들의 해상도 래더를 생성하는 것; 및 상이한 인코딩 파라미터로 제1 시퀀스의 프레임들의 각각의 리샘플링된 버전을 인코딩하여 제1 세트의 인코딩된 청크들을 생성하는 것을 포함한다.
13. 11항 또는 12항에 있어서, 제1 세트의 인코딩된 청크들을 생성하는 것은, 복수의 가능한 값들 및 인코딩된 청크들의 최대 수에 기반하여 인코딩 파라미터에 대한 복수의 값들을 생성하는 것 - 복수의 값들에 포함된 값들의 총 수는 복수의 가능한 값들에 포함된 가능한 값들의 총 수보다 적음 -; 및 인코딩 파라미터에 대한 복수의 값들에 기반하여 제1 시퀀스의 프레임들의 복수의 리샘플링된 버전을 인코딩하여 제1 세트의 인코딩된 청크들을 생성하는 것을 포함한다.
14. 11항 내지 13항 중 어느 한 항에 있어서, 제1 세트의 데이터 포인트들을 생성하는 것은, 제1 세트의 인코딩된 청크들 내의 각각의 인코딩된 청크를 디코딩하여 제1 세트의 디코딩된 청크들을 생성하는 것; 제1 세트의 디코딩된 청크들 내의 각각의 디코딩된 청크를 소스 비디오 시퀀스와 연관된 소스 해상도로 업샘플링하여 제1 세트의 업샘플링된 청크들을 생성하는 것; 및 제1 세트의 업샘플링된 데이터 청크들 내의 각각의 업샘플링된 청크에 대한 상이한 데이터 포인트를 생성하는 것을 포함한다.
15. 11항 내지 14항 중 어느 한 항에 있어서, 제1 서브세트의 데이터 포인트들을 계산하기 위해 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 것은, 제1 세트의 데이터 포인트들을 포함하는 제1 영역을 결정하는 것; 제1 영역의 제1 경계를 식별하는 것 - 제1 세트의 포인트들 내의 데이터 포인트들은 제1 경계의 제1 측 상에 존재하지 않음 -; 제1 서브세트의 데이터 포인트들에 제1 경계를 따라 존재하는 임의의 데이터 포인트들을 포함시키는 것을 포함한다.
16. 11항 내지 15항 중 어느 한 항에 있어서, 제1 메트릭은 왜곡을 포함하고, 제2 메트릭은 비트레이트를 포함한다.
17. 11항 내지 16항 중 어느 한 항에 있어서, 소스 비디오 시퀀스에 대한 제2 세트의 인코딩된 청크들을 생성하는 것; 제2 세트의 인코딩된 청크들에 기반하여 제2 세트의 데이터 포인트들을 생성하는 것; 적어도 2개의 메트릭에 걸쳐 최적화되는 제2 서브세트의 데이터 포인트들을 계산하기 위해 제2 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 것; 및 제2 서브세트의 데이터 포인트들에 포함된 제3 데이터 포인트와 제2 서브세트의 데이터 포인트들에 포함된 제4 데이터 포인트 사이의 제2 기울기 값을 계산하는 것을 더 포함한다.
18. 11항 내지 17항 중 어느 한 항에 있어서, 제1 데이터 포인트와 연관된 제1 인코딩된 청크가 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하는 것은 제1 기울기가 제2 기울기보다 더 큰 크기를 갖는다고 결정하는 것을 포함한다.
19. 11항 내지 18항 중 어느 한 항에 있어서, 제2 기울기 값이 하나 이상의 다른 서브세트의 데이터 포인트들과 연관된 하나 이상의 다른 기울기 값보다 더 작다고 결정하는 것에 기반하여, 제4 데이터 포인트와 연관된 제2 인코딩된 청크가 소스 비디오 시퀀스의 다른 인코딩된 버전에 포함되지 않아야 한다고 결정하는 것을 더 포함한다.
20. 11항 내지 19항 중 어느 한 항에 있어서, 제1 세트의 인코딩된 청크들은 제1 샷 시퀀스와 연관되고, 제2 세트의 인코딩된 청크들은 제2 샷 시퀀스와 연관된다.
21. 일부 실시예들은 시스템을 포함하며, 이 시스템은 소프트웨어 애플리케이션을 저장하는 메모리; 및 메모리에 결합되는 프로세서를 포함하고, 프로세서는 소프트웨어 애플리케이션을 실행할 때, 소스 비디오 시퀀스에 대한 제1 세트의 인코딩된 청크들을 생성하고, 제1 세트의 인코딩된 청크들에 기반하여 제1 세트의 데이터 포인트들을 생성하고, 적어도 2개의 메트릭에 걸쳐 최적화되는 제1 서브세트의 데이터 포인트들을 계산하기 위해 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하고, 제1 서브세트의 데이터 포인트들에 포함된 제1 데이터 포인트와 제1 서브세트의 데이터 포인트들에 포함된 제2 데이터 포인트 사이의 제1 기울기 값을 계산하며, 제1 기울기 값에 기반하여, 제1 데이터 포인트와 연관된 제1 인코딩된 청크가 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하도록 구성된다.
22. 21항에 있어서, 소프트웨어 애플리케이션을 실행할 때, 프로세서는 추가로, 제1 세트의 인코딩된 청크들을 생성하고, 제1 세트의 데이터 포인트들을 생성하고, 하나 이상의 볼록 껍질 연산을 수행하고, 제1 기울기 값을 계산하며, 제1 데이터 포인트와 연관된 제1 인코딩된 청크가 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하도록 구성된다.
임의의 청구항에 기재된 임의의 청구항 요소 및/또는 본 출원에서 설명된 임의의 요소들의 임의의 조합 및 모든 조합들은 임의의 방식으로 본 발명 및 보호의 고려 범위 내에 속한다.
다양한 실시예들에 대한 설명들은 예시의 목적들로 제시되었지만, 포괄적인 것으로 의도되거나 개시된 실시예들로 제한되지는 않는다. 설명된 실시예들의 범위 및 사상을 벗어나지 않고 관련 기술분야의 통상의 기술자에게 많은 수정들 및 변형들이 명백할 것이다.
본 실시예들의 양태들은 시스템, 방법 또는 컴퓨터 프로그램 제품으로서 구현될 수 있다. 따라서, 본 개시내용의 양태들은 전적으로 하드웨어 실시예, 전적으로 소프트웨어 실시예(펌웨어, 상주 소프트웨어, 마이크로코드 등을 포함함) 또는 본 명세서에서 모두 일반적으로 "모듈" 또는 "시스템"으로 지칭될 수 있는 소프트웨어 및 하드웨어 양태들을 조합한 실시예의 형태를 취할 수 있다. 또한, 본 개시내용에서 설명된 임의의 하드웨어 및/또는 소프트웨어 기술, 프로세스, 기능, 구성요소, 엔진, 모듈, 또는 시스템은 회로 또는 회로들의 세트로서 구현될 수 있다. 또한, 본 개시내용의 양태들은 컴퓨터 판독가능한 프로그램 코드가 구현된 하나 이상의 컴퓨터 판독가능한 매체(들)에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
하나 이상의 컴퓨터 판독가능한 매체(들)의 임의의 조합이 이용될 수 있다. 컴퓨터 판독가능한 매체는 컴퓨터 판독가능한 신호 매체 또는 컴퓨터 판독가능한 저장 매체일 수 있다. 컴퓨터 판독가능한 저장 매체는 예를 들어 전자, 자기, 광학, 전자기, 적외선 또는 반도체 시스템, 장치 또는 디바이스, 또는 이들의 임의의 적절한 조합일 수 있지만, 이에 제한되는 것은 아니다. 컴퓨터 판독가능한 저장 매체의 보다 구체적인 예들(비-포괄적인 리스트)은 하나 이상의 와이어를 갖는 전기적 접속, 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 소거 및 프로그램 가능 판독 전용 메모리(EPROM 또는 플래시 메모리), 광섬유, 휴대용 컴팩트 디스크 판독 전용 메모리(CD-ROM), 광학 저장 디바이스, 자기 저장 디바이스 또는 이들의 임의의 적절한 조합을 포함할 것이다. 본 문헌과 관련하여, 컴퓨터 판독가능한 저장 매체는 명령어 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 이용하기 위한 프로그램을 포함하거나 저장할 수 있는 임의의 유형적인 매체일 수 있다.
본 개시내용의 양태들은 본 개시내용의 실시예들에 따른 방법들, 장치들(시스템들) 및 컴퓨터 프로그램 제품들의 흐름도들 및/또는 블록도들을 참조하여 위에서 설명되었다. 흐름도들 및/또는 블록도들의 각각의 블록, 및 흐름도들 및/또는 블록도들 내의 블록들의 조합들은 컴퓨터 프로그램 명령어들에 의해 구현될 수 있다는 것을 이해할 것이다. 이들 컴퓨터 프로그램 명령어들은 범용 컴퓨터, 특수 목적 컴퓨터 또는 다른 프로그램 가능 데이터 처리 장치의 프로세서에 제공되어 기계를 생성할 수 있다. 명령어들은, 컴퓨터 또는 다른 프로그램 가능 데이터 처리 장치의 프로세서를 통해 실행될 때, 흐름도 및/또는 블록도의 블록 또는 블록들에서 지정된 기능들/동작들의 구현을 가능하게 한다. 이러한 프로세서들은 범용 프로세서들, 특수 목적 프로세서들, 주문형 프로세서들, 또는 필드 프로그램 가능 게이트 어레이들일 수 있지만, 이에 제한되지는 않는다.
도면들 내의 흐름도들 및 블록도들은 본 개시내용의 다양한 실시예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능 및 동작을 도시한다. 이와 관련하여, 흐름도들 또는 블록도들 내의 각각의 블록은 지정된 논리적 기능(들)을 구현하기 위한 하나 이상의 실행가능한 명령어를 포함하는 모듈, 세그먼트 또는 코드 부분을 나타낼 수 있다. 또한, 일부 대안 구현들에서, 그 블록에서 언급된 기능들이 도면들에서 언급된 순서와 다르게 발생할 수 있음에 유의해야 한다. 예를 들어, 연속적으로 도시된 2개의 블록은 사실상 실질적으로 동시에 실행될 수 있거나, 또는 그 블록들은 관련된 기능에 따라 때때로 역순으로 실행될 수 있다. 또한, 블록도들 및/또는 흐름도의 각각의 블록, 및 블록도들 및/또는 흐름도 내의 블록들의 조합들은 지정된 기능들 또는 동작들을 수행하는 특수 목적 하드웨어 기반 시스템들, 또는 특수 목적 하드웨어 및 컴퓨터 명령어들의 조합들에 의해 구현될 수 있다는 점에 유의할 것이다.
전술한 내용은 본 개시내용의 실시예들에 관한 것이지만, 본 개시내용의 다른 실시예들 및 추가 실시예들은 본 개시내용의 기본 범위를 벗어나지 않고 안출될 수 있으며, 그 범위는 다음의 청구항들에 의해 결정된다.

Claims (22)

  1. 컴퓨터에 의해 구현되는 방법으로서,
    소스 비디오 시퀀스에 대한 인코딩된 청크들의 복수의 세트들을 생성하는 단계 - 인코딩된 청크들의 각각의 세트는 상기 소스 비디오 시퀀스에 포함된 상이한 샷 시퀀스에 대응함 -;
    제1 세트의 인코딩된 청크들에 대해 상기 제1 세트의 인코딩된 청크들에 기반하여 제1 세트의 데이터 포인트들을 생성하는 단계;
    상기 제1 세트의 데이터 포인트들에 대해 적어도 2개의 메트릭에 걸쳐 최적화되는 제1 서브세트의 데이터 포인트들을 계산하기 위해 상기 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산(convex hull operation)을 수행하는 단계;
    상기 제1 서브세트의 데이터 포인트들에 포함된 제1 데이터 포인트와 상기 제1 서브세트의 데이터 포인트들에 포함된 제2 데이터 포인트 사이의 제1 기울기 값을 계산하는 단계;
    최종 기울기 값을 선택하기 위해 상기 제1 기울기 값과 하나 이상의 다른 기울기 값들을 비교하는 단계 - 상기 하나 이상의 다른 기울기 값들 각각은 인코딩된 청크들의 상이한 세트와 연관되어 계산됨 -; 및
    상기 최종 기울기 값과 연관된 상기 제1 세트의 인코딩된 청크들에 포함된 제1 인코딩된 청크가 상기 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하는 단계
    를 포함하는, 컴퓨터에 의해 구현되는 방법.
  2. 제1항에 있어서,
    상기 인코딩된 청크들의 복수의 세트들을 생성하는 단계는,
    상기 소스 비디오 시퀀스 내에서 제1 캡처 포인트와 연관되는 제1 시퀀스의 프레임들을 식별하는 단계;
    복수의 상이한 해상도로 상기 제1 시퀀스의 프레임들을 리샘플링하여 상기 제1 시퀀스의 프레임들의 리샘플링된 버전들의 해상도 래더를 생성하는 단계; 및
    상이한 인코딩 파라미터로 상기 제1 시퀀스의 프레임들의 각각의 리샘플링된 버전을 인코딩하여 상기 제1 세트의 인코딩된 청크들을 생성하는 단계
    를 포함하는, 컴퓨터에 의해 구현되는 방법.
  3. 제1항에 있어서,
    상기 제1 세트의 데이터 포인트들을 생성하는 단계는,
    상기 제1 세트의 인코딩된 청크들 내의 각각의 인코딩된 청크를 디코딩하여 제1 세트의 디코딩된 청크들을 생성하는 단계;
    상기 제1 세트의 디코딩된 청크들 내의 각각의 디코딩된 청크를 상기 소스 비디오 시퀀스와 연관된 소스 해상도로 업샘플링하여 제1 세트의 업샘플링된 청크들을 생성하는 단계; 및
    상기 제1 세트의 업샘플링된 청크들 내의 각각의 업샘플링된 청크에 대한 상이한 데이터 포인트를 생성하는 단계
    를 포함하는, 컴퓨터에 의해 구현되는 방법.
  4. 제3항에 있어서,
    상기 제1 세트의 데이터 포인트들에서의 특정 데이터 포인트는,
    상기 제1 세트의 업샘플링된 청크들 내의 특정 업샘플링된 청크에 대한 특정 객관적 품질 메트릭을 생성하는 단계;
    상기 특정 객관적 품질 메트릭을 특정 왜곡 메트릭으로 변환하는 단계;
    상기 특정 업샘플링된 청크에 대한 비트레이트를 계산하는 단계; 및
    상기 특정 왜곡 메트릭과 상기 비트레이트를 결합하여 상기 특정 데이터 포인트를 생성하는 단계
    에 의해 생성되는, 컴퓨터에 의해 구현되는 방법.
  5. 제1항에 있어서,
    상기 제1 서브세트의 데이터 포인트들을 계산하기 위해 상기 제1 세트의 데이터 포인트들에 대해 상기 하나 이상의 볼록 껍질 연산을 수행하는 단계는,
    상기 제1 세트의 데이터 포인트들을 포함하는 제1 영역을 결정하는 단계;
    상기 제1 영역의 제1 경계를 식별하는 단계 - 상기 제1 세트의 포인트들 내의 데이터 포인트들은 상기 제1 경계의 제1 측 상에 존재하지 않음 -; 및
    상기 제1 경계를 따라 존재하지 않는 임의의 데이터 포인트들을 폐기하는 단계 - 상기 제1 경계를 따라 존재하는 각각의 데이터 포인트는 상기 적어도 2개의 메트릭에 포함된 제2 메트릭에 대해 상기 적어도 2개의 메트릭에 포함된 제1 메트릭을 최적화함 -
    를 포함하는, 컴퓨터에 의해 구현되는 방법.
  6. 제5항에 있어서,
    상기 제1 메트릭은 왜곡을 포함하고, 상기 제2 메트릭은 비트레이트를 포함하는, 컴퓨터에 의해 구현되는 방법.
  7. 제1항에 있어서,
    상기 인코딩된 청크들의 복수의 세트들에 포함된 제2 세트의 인코딩된 청크들에 기반하여 제2 세트의 데이터 포인트들을 생성하는 단계;
    상기 적어도 2개의 메트릭에 걸쳐 최적화되는 제2 서브세트의 데이터 포인트들을 계산하기 위해 상기 제2 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 단계; 및
    상기 제2 서브세트의 데이터 포인트들에 포함된 제3 데이터 포인트와 상기 제2 서브세트의 데이터 포인트들에 포함된 제4 데이터 포인트 사이의 제2 기울기 값을 계산하는 단계
    를 더 포함하는, 컴퓨터에 의해 구현되는 방법.
  8. 제7항에 있어서,
    상기 최종 기울기 값과 연관된 상기 제1 인코딩된 청크가 상기 소스 비디오 시퀀스의 상기 최종 인코딩된 버전에 포함되어야 한다고 결정하는 단계는 상기 제1 기울기가 상기 제2 기울기보다 더 큰 크기를 갖는다고 결정하는 단계를 포함하는, 컴퓨터에 의해 구현되는 방법.
  9. 제7항에 있어서,
    상기 제2 기울기 값이 인코딩된 청크들의 다른 세트들과 연관되어 계산된 다른 기울기 값들보다 더 큰 크기를 갖는다고 결정하는 것에 기반하여, 상기 제4 데이터 포인트와 연관된 제2 인코딩된 청크가 상기 소스 비디오 시퀀스의 다른 인코딩된 버전에 포함되어야 한다고 결정하는 단계를 더 포함하는, 컴퓨터에 의해 구현되는 방법.
  10. 제1항에 있어서,
    상기 제1 세트의 인코딩된 청크들은 제1 캡처 포인트로부터 연속적으로 캡처된 제1 시퀀스의 비디오 프레임들과 연관되고, 제2 세트의 인코딩된 청크들은 제2 캡처 포인트로부터 연속적으로 캡처된 제2 시퀀스의 비디오 프레임들과 연관되는, 컴퓨터에 의해 구현되는 방법.
  11. 프로그램 명령어들을 저장하는 하나 이상의 비일시적 컴퓨터 판독가능한 매체로서,
    상기 프로그램 명령어들은, 하나 이상의 프로세서에 의해 실행될 때, 상기 하나 이상의 프로세서를,
    소스 비디오 시퀀스에 대한 인코딩된 청크들의 복수의 세트들을 생성하는 단계 - 인코딩된 청크들의 각각의 세트는 상기 소스 비디오 시퀀스에 포함된 상이한 샷 시퀀스에 대응함 -;
    제1 세트의 인코딩된 청크들에 대해 상기 제1 세트의 인코딩된 청크들에 기반하여 제1 세트의 데이터 포인트들을 생성하는 단계;
    상기 제1 세트의 데이터 포인트들에 대해 적어도 2개의 메트릭에 걸쳐 최적화되는 제1 서브세트의 데이터 포인트들을 계산하기 위해 상기 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하는 단계;
    상기 제1 서브세트의 데이터 포인트들에 포함된 제1 데이터 포인트와 상기 제1 서브세트의 데이터 포인트들에 포함된 제2 데이터 포인트 사이의 제1 기울기 값을 계산하는 단계;
    최종 기울기 값을 선택하기 위해 상기 제1 기울기 값과 하나 이상의 다른 기울기 값들을 비교하는 단계 - 상기 하나 이상의 다른 기울기 값들 각각은 인코딩된 청크들의 상이한 세트와 연관되어 계산됨 -; 및
    상기 최종 기울기 값과 연관된 상기 제1 세트의 인코딩된 청크들에 포함된 제1 인코딩된 청크가 상기 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하는 단계
    를 수행하도록 구성하는, 비일시적 컴퓨터 판독가능한 매체.
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 시스템으로서,
    소프트웨어 애플리케이션을 저장하는 하나 이상의 메모리; 및
    상기 하나 이상의 메모리에 결합되는 하나 이상의 프로세서
    를 포함하며, 상기 프로세서는 상기 소프트웨어 애플리케이션을 실행할 때,
    소스 비디오 시퀀스에 대한 인코딩된 청크들의 복수의 세트들을 생성하고 - 인코딩된 청크들의 각각의 세트는 상기 소스 비디오 시퀀스에 포함된 상이한 샷 시퀀스에 대응함 -,
    제1 세트의 인코딩된 청크들에 대해 상기 제1 세트의 인코딩된 청크들에 기반하여 제1 세트의 데이터 포인트들을 생성하고,
    상기 제1 세트의 데이터 포인트들에 대해 적어도 2개의 메트릭에 걸쳐 최적화되는 제1 서브세트의 데이터 포인트들을 계산하기 위해 상기 제1 세트의 데이터 포인트들에 대해 하나 이상의 볼록 껍질 연산을 수행하고,
    상기 제1 서브세트의 데이터 포인트들에 포함된 제1 데이터 포인트와 상기 제1 서브세트의 데이터 포인트들에 포함된 제2 데이터 포인트 사이의 제1 기울기 값을 계산하며,
    최종 기울기 값을 선택하기 위해 상기 제1 기울기 값과 하나 이상의 다른 기울기 값들을 비교하고 - 상기 하나 이상의 다른 기울기 값들 각각은 인코딩된 청크들의 상이한 세트와 연관되어 계산됨 -,
    상기 최종 기울기 값과 연관된 상기 제1 세트의 인코딩된 청크들에 포함된 제1 인코딩된 청크가 상기 소스 비디오 시퀀스의 최종 인코딩된 버전에 포함되어야 한다고 결정하도록 구성되는, 시스템.
  22. 삭제
KR1020207004274A 2017-07-18 2018-07-16 왜곡 및 비트레이트를 최적화하기 위한 인코딩 기술들 KR102304143B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762534170P 2017-07-18 2017-07-18
US62/534,170 2017-07-18
US16/034,303 US10666992B2 (en) 2017-07-18 2018-07-12 Encoding techniques for optimizing distortion and bitrate
US16/034,303 2018-07-12
PCT/US2018/042338 WO2019018311A1 (en) 2017-07-18 2018-07-16 ENCODING TECHNIQUES FOR OPTIMIZING DISTORTION AND BIT RATE

Publications (2)

Publication Number Publication Date
KR20200024325A KR20200024325A (ko) 2020-03-06
KR102304143B1 true KR102304143B1 (ko) 2021-09-23

Family

ID=65015840

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207004274A KR102304143B1 (ko) 2017-07-18 2018-07-16 왜곡 및 비트레이트를 최적화하기 위한 인코딩 기술들

Country Status (10)

Country Link
US (2) US10666992B2 (ko)
EP (1) EP3656129A1 (ko)
JP (1) JP6953613B2 (ko)
KR (1) KR102304143B1 (ko)
CN (1) CN111066327B (ko)
AU (2) AU2018303643B2 (ko)
BR (1) BR112020000998A2 (ko)
CA (1) CA3069875C (ko)
SG (1) SG11202000395WA (ko)
WO (1) WO2019018311A1 (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10715814B2 (en) 2017-02-23 2020-07-14 Netflix, Inc. Techniques for optimizing encoding parameters for different shot sequences
US11166034B2 (en) 2017-02-23 2021-11-02 Netflix, Inc. Comparing video encoders/decoders using shot-based encoding and a perceptual visual quality metric
US10742708B2 (en) 2017-02-23 2020-08-11 Netflix, Inc. Iterative techniques for generating multiple encoded versions of a media title
US11153585B2 (en) 2017-02-23 2021-10-19 Netflix, Inc. Optimizing encoding operations when generating encoded versions of a media title
US10666992B2 (en) 2017-07-18 2020-05-26 Netflix, Inc. Encoding techniques for optimizing distortion and bitrate
FR3078798B1 (fr) * 2018-03-12 2021-04-30 Ateme Procede de selection de profils d'encodage d'un contenu multimedia pour une diffusion a la demande
US10616590B1 (en) * 2018-05-16 2020-04-07 Amazon Technologies, Inc. Optimizing streaming video encoding profiles
US11128869B1 (en) * 2018-10-22 2021-09-21 Bitmovin, Inc. Video encoding based on customized bitrate table
US10965945B2 (en) * 2019-03-29 2021-03-30 Bitmovin, Inc. Optimized multipass encoding
US10897654B1 (en) 2019-09-30 2021-01-19 Amazon Technologies, Inc. Content delivery of live streams with event-adaptive encoding
KR20210067788A (ko) * 2019-11-29 2021-06-08 삼성전자주식회사 전자 장치, 시스템 및 그 제어 방법
US11115697B1 (en) * 2019-12-06 2021-09-07 Amazon Technologies, Inc. Resolution-based manifest generator for adaptive bitrate video streaming
US10958947B1 (en) 2020-03-12 2021-03-23 Amazon Technologies, Inc. Content delivery of live streams with playback-conditions-adaptive encoding
US11190826B1 (en) * 2020-06-25 2021-11-30 Disney Enterprises, Inc. Segment quality-guided adaptive stream creation
US11729438B1 (en) * 2021-01-28 2023-08-15 Amazon Technologies, Inc. Optimizing streaming video encoding profiles
CN112995672B (zh) * 2021-02-04 2022-11-18 杭州电子科技大学 一种基于参数选择的视频编码算法优化方法
US11871061B1 (en) 2021-03-31 2024-01-09 Amazon Technologies, Inc. Automated adaptive bitrate encoding
US11778211B2 (en) * 2021-09-16 2023-10-03 Apple Inc. Parallel video parsing for video decoder processing
WO2023048464A1 (ko) * 2021-09-23 2023-03-30 엘지전자 주식회사 영상 부호화/복호화 방법, 비트스트림을 전송하는 방법 및 비트스트림을 저장한 기록 매체
US11700376B1 (en) 2021-09-28 2023-07-11 Amazon Technologies, Inc. Optimizing and assigning video encoding ladders
CN113810629B (zh) * 2021-11-19 2022-02-08 南京好先生智慧科技有限公司 一种融合平台多媒体信号的视频帧处理方法及装置
CN117221547B (zh) * 2023-11-07 2024-01-23 四川新视创伟超高清科技有限公司 一种基于ctu级下采样的8k视频编码方法及装置
JP7490163B1 (ja) 2023-11-22 2024-05-24 三菱電機株式会社 検査画像保存システム及び検査画像保存方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070047639A1 (en) * 2003-09-23 2007-03-01 Koninklijke Philips Electronics N.V. Rate-distortion video data partitioning using convex hull search
US20080232466A1 (en) * 2005-09-05 2008-09-25 Fraunhofer-Gesellschaft Zur Forderung Der Angewandten Forschung E.V Encoding Parameter Determination For a Hybrid Encoding Scheme
US20130329781A1 (en) * 2012-06-08 2013-12-12 Apple Inc. Techniques for adaptive video streaming

Family Cites Families (69)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5612742A (en) 1994-10-19 1997-03-18 Imedia Corporation Method and apparatus for encoding and formatting data representing a video program to provide multiple overlapping presentations of the video program
US6625322B1 (en) 1999-06-08 2003-09-23 Matsushita Electric Industrial Co., Ltd. Image coding apparatus
EP1329109A2 (en) * 2000-10-10 2003-07-23 Koninklijke Philips Electronics N.V. Video bitrate control method and device for digital video recording
US7103669B2 (en) 2001-02-16 2006-09-05 Hewlett-Packard Development Company, L.P. Video communication method and system employing multiple state encoding and path diversity
US7400774B2 (en) 2002-09-06 2008-07-15 The Regents Of The University Of California Encoding and decoding of digital data using cues derivable at a decoder
CN1778117A (zh) * 2003-04-18 2006-05-24 皇家飞利浦电子股份有限公司 使用参变速率失真模型对视频编码进行数率失真优化数据划分的系统和方法
US7242809B2 (en) 2003-06-25 2007-07-10 Microsoft Corporation Digital video segmentation and dynamic segment labeling
US7394410B1 (en) 2004-02-13 2008-07-01 Samplify Systems, Inc. Enhanced data converters using compression and decompression
JP4037839B2 (ja) * 2004-03-11 2008-01-23 株式会社東芝 画像符号化方法及び装置
CN102833539B (zh) 2004-06-27 2015-03-25 苹果公司 多通路视频编码
AU2006330074B2 (en) 2005-09-07 2009-12-24 Vidyo, Inc. System and method for a high reliability base layer trunk
US7876819B2 (en) * 2005-09-22 2011-01-25 Qualcomm Incorporated Two pass rate control techniques for video coding using rate-distortion characteristics
US9036712B1 (en) 2006-05-08 2015-05-19 Geo Semiconductor Inc. Methods and/or apparatus for controlling zero-residual coding in predictive image/video coding
US20080043832A1 (en) 2006-08-16 2008-02-21 Microsoft Corporation Techniques for variable resolution encoding and decoding of digital video
WO2009011661A1 (en) 2007-07-18 2009-01-22 Agency For Science, Technology And Research Method and device for determining a similarity value between minutiae templates
JP5369893B2 (ja) 2008-05-30 2013-12-18 株式会社Jvcケンウッド 動画像符号化装置、動画像符号化方法、動画像符号化プログラム、動画像復号装置、動画像復号方法、動画像復号プログラム、動画像再符号化装置、動画像再符号化方法、動画像再符号化プログラム
CN101365125B (zh) * 2008-09-27 2012-03-21 腾讯科技(深圳)有限公司 多路视频通信方法与系统
US8396114B2 (en) 2009-01-29 2013-03-12 Microsoft Corporation Multiple bit rate video encoding using variable bit rate and dynamic resolution for adaptive video streaming
US8509309B2 (en) 2009-05-14 2013-08-13 Massachusetts Institute Of Technology Selecting transforms for compressing visual data
US8451903B2 (en) 2009-05-14 2013-05-28 Massachusetts Institute Of Technology Selecting transforms for compressing visual data
US20110052087A1 (en) 2009-08-27 2011-03-03 Debargha Mukherjee Method and system for coding images
KR20110032610A (ko) 2009-09-23 2011-03-30 삼성전자주식회사 장면 분할 장치 및 방법
US8171154B2 (en) * 2009-09-29 2012-05-01 Net Power And Light, Inc. Method and system for low-latency transfer protocol
US9584700B2 (en) 2009-10-26 2017-02-28 Hewlett-Packard Development Company, L.P. Color separation table optimized for a printing process according to a print attribute by selecting particular Neugebauer primaries and Neugebauer primary area coverages
FR2963189B1 (fr) 2010-07-20 2013-06-21 Freebox Procede d'encodage adaptatif d'un flux video numerique, notamment pour diffusion sur ligne xdsl.
US8837601B2 (en) 2010-12-10 2014-09-16 Netflix, Inc. Parallel video encoding based on complexity analysis
BR112013020068A2 (pt) 2011-01-28 2018-03-06 Eye Io Llc métodos e parelhos para controle adaptativo da taxa de bits baseado em cenas
US8982942B2 (en) 2011-06-17 2015-03-17 Microsoft Technology Licensing, Llc Adaptive codec selection
US9009009B2 (en) 2011-06-27 2015-04-14 The Research Foundation For The State University Of New York Method for predicting optimized crystal structures
US8818171B2 (en) 2011-08-30 2014-08-26 Kourosh Soroushian Systems and methods for encoding alternative streams of video for playback on playback devices having predetermined display aspect ratios and network connection maximum data rates
US9451284B2 (en) 2011-10-10 2016-09-20 Qualcomm Incorporated Efficient signaling of reference picture sets
WO2013067674A1 (en) 2011-11-07 2013-05-16 Thomson Licensing Predictive position encoding
IN2014KN00934A (ko) 2011-11-09 2015-10-09 Fraunhofer Ges Forschung
JP6009578B2 (ja) 2011-12-09 2016-10-19 テレフオンアクチーボラゲット エルエム エリクソン(パブル) 映像ビットストリーム内の品質欠陥を検知するための方法及び装置
US10694258B2 (en) 2011-12-14 2020-06-23 Netflix, Inc. Startup times of streaming digital media playback
US9392304B2 (en) 2012-02-29 2016-07-12 Hulu, LLC Encoding optimization using quality level of encoded segments
US9125073B2 (en) 2012-08-03 2015-09-01 Intel Corporation Quality-aware adaptive streaming over hypertext transfer protocol using quality attributes in manifest file
WO2014106692A1 (en) 2013-01-07 2014-07-10 Nokia Corporation Method and apparatus for video coding and decoding
WO2014113486A1 (en) 2013-01-15 2014-07-24 Futurewei Technologies, Inc. Using quality information for adaptive streaming of media content
CN104346613B (zh) 2013-08-08 2018-06-15 卡西欧计算机株式会社 图像处理装置以及图像处理方法
CN103501446B (zh) 2013-10-12 2016-05-18 青岛旲天下智能科技有限公司 基于手势人机交互技术的互联网电视系统及其实现方法
CN103501445B (zh) 2013-10-12 2017-02-22 青岛旲天下智能科技有限公司 一种手势交互的双向互动数字电视盒系统及实现方法
US10019985B2 (en) 2013-11-04 2018-07-10 Google Llc Asynchronous optimization for sequence training of neural networks
WO2015082298A1 (en) 2013-12-02 2015-06-11 Dolby International Ab Method for bitrate signaling and bitstream format enabling such method
US9520155B2 (en) 2013-12-24 2016-12-13 JBF Interlude 2009 LTD Methods and systems for seeking to non-key frames
WO2015183194A1 (en) 2014-05-30 2015-12-03 Paofit Technology Pte Ltd Systems and methods for motion-vector-aided video interpolation using real-time smooth video playback speed variation
US9767101B2 (en) 2014-06-20 2017-09-19 Google Inc. Media store with a canonical layer for content
US20160073106A1 (en) * 2014-09-08 2016-03-10 Apple Inc. Techniques for adaptive video streaming
CN104185024B (zh) 2014-09-16 2017-09-15 福州大学 一种基于总码率与信息熵模型的hevc量化参数优化方法
US20160094802A1 (en) 2014-09-25 2016-03-31 Nagravision S.A. Receiver-side marking of content for unique identification
EP3041233A1 (en) 2014-12-31 2016-07-06 Thomson Licensing High frame rate-low frame rate transmission technique
US9749646B2 (en) 2015-01-16 2017-08-29 Microsoft Technology Licensing, Llc Encoding/decoding of high chroma resolution details
CN107211193B (zh) 2015-02-07 2021-04-13 视觉波公司 感知体验质量估计驱动的智能适应视频流传输方法和系统
CN104767999B (zh) * 2015-04-22 2017-11-17 福州大学 一种基于失真测量的hevc码率控制模型参数更新算法
US9734409B2 (en) 2015-06-24 2017-08-15 Netflix, Inc. Determining native resolutions of video sequences
US10375156B2 (en) 2015-09-11 2019-08-06 Facebook, Inc. Using worker nodes in a distributed video encoding system
US10602153B2 (en) 2015-09-11 2020-03-24 Facebook, Inc. Ultra-high video compression
US10255667B2 (en) 2015-12-23 2019-04-09 Vmware, Inc. Quantitative visual perception quality measurement for virtual desktops
US9942557B2 (en) 2016-01-26 2018-04-10 Beamr Imaging Ltd. Method and system of video encoding optimization
CN105868700A (zh) 2016-03-25 2016-08-17 哈尔滨工业大学深圳研究生院 一种基于监控视频的车型识别与跟踪方法及系统
US20180063549A1 (en) * 2016-08-24 2018-03-01 Ati Technologies Ulc System and method for dynamically changing resolution based on content
GB2600040B8 (en) 2016-12-01 2023-01-11 Brightcove Inc Optimization of encoding profiles for media streaming
US10097339B1 (en) * 2016-12-22 2018-10-09 Amazon Technologies, Inc. Time synchronization using timestamp exchanges
US11153585B2 (en) 2017-02-23 2021-10-19 Netflix, Inc. Optimizing encoding operations when generating encoded versions of a media title
US10715814B2 (en) 2017-02-23 2020-07-14 Netflix, Inc. Techniques for optimizing encoding parameters for different shot sequences
US10742708B2 (en) 2017-02-23 2020-08-11 Netflix, Inc. Iterative techniques for generating multiple encoded versions of a media title
US10666992B2 (en) 2017-07-18 2020-05-26 Netflix, Inc. Encoding techniques for optimizing distortion and bitrate
US20190028529A1 (en) 2017-07-18 2019-01-24 Netflix, Inc. Encoding techniques for optimizing distortion and bitrate
US11153581B1 (en) 2020-05-19 2021-10-19 Twitch Interactive, Inc. Intra-segment video upswitching with dual decoding

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070047639A1 (en) * 2003-09-23 2007-03-01 Koninklijke Philips Electronics N.V. Rate-distortion video data partitioning using convex hull search
US20080232466A1 (en) * 2005-09-05 2008-09-25 Fraunhofer-Gesellschaft Zur Forderung Der Angewandten Forschung E.V Encoding Parameter Determination For a Hybrid Encoding Scheme
US20130329781A1 (en) * 2012-06-08 2013-12-12 Apple Inc. Techniques for adaptive video streaming

Also Published As

Publication number Publication date
KR20200024325A (ko) 2020-03-06
JP6953613B2 (ja) 2021-10-27
AU2018303643A1 (en) 2020-02-06
BR112020000998A2 (pt) 2020-07-14
EP3656129A1 (en) 2020-05-27
WO2019018311A1 (en) 2019-01-24
SG11202000395WA (en) 2020-02-27
CN111066327B (zh) 2022-06-07
US20190028745A1 (en) 2019-01-24
US10666992B2 (en) 2020-05-26
CA3069875C (en) 2022-08-30
AU2021269405A1 (en) 2021-12-16
CA3069875A1 (en) 2019-01-24
US20200288187A1 (en) 2020-09-10
AU2018303643B2 (en) 2021-08-19
JP2020530955A (ja) 2020-10-29
US11910039B2 (en) 2024-02-20
CN111066327A (zh) 2020-04-24

Similar Documents

Publication Publication Date Title
KR102304143B1 (ko) 왜곡 및 비트레이트를 최적화하기 위한 인코딩 기술들
US11871002B2 (en) Iterative techniques for encoding video content
US11444999B2 (en) Iterative techniques for generating multiple encoded versions of a media title
US20190028529A1 (en) Encoding techniques for optimizing distortion and bitrate
US11818375B2 (en) Optimizing encoding operations when generating encoded versions of a media title
US11425432B2 (en) Techniques for efficiently performing subsequence-based encoding for a media title
US11196791B2 (en) Techniques for encoding a media title while constraining quality variations

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant