KR20220006546A - 인터럽트 가능한 비디오 트랜스코딩 - Google Patents

인터럽트 가능한 비디오 트랜스코딩 Download PDF

Info

Publication number
KR20220006546A
KR20220006546A KR1020217038327A KR20217038327A KR20220006546A KR 20220006546 A KR20220006546 A KR 20220006546A KR 1020217038327 A KR1020217038327 A KR 1020217038327A KR 20217038327 A KR20217038327 A KR 20217038327A KR 20220006546 A KR20220006546 A KR 20220006546A
Authority
KR
South Korea
Prior art keywords
video
tracks
transcoded file
output
partially
Prior art date
Application number
KR1020217038327A
Other languages
English (en)
Other versions
KR102612528B1 (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 구글 엘엘씨
Priority to KR1020237042008A priority Critical patent/KR20230171479A/ko
Publication of KR20220006546A publication Critical patent/KR20220006546A/ko
Application granted granted Critical
Publication of KR102612528B1 publication Critical patent/KR102612528B1/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/234309Processing 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 by transcoding between formats or standards, e.g. from MPEG-2 to MPEG-4 or from Quicktime to Realvideo
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/40Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video transcoding, i.e. partial or full decoding of a coded input stream followed by re-encoding of the decoded output stream
    • 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/231Content storage operation, e.g. caching movies for short term storage, replicating data over plural servers, prioritizing data for deletion
    • 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/23424Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving splicing one content stream with another content stream, e.g. for inserting or substituting an advertisement
    • 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/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/234363Processing 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 by altering the spatial resolution, e.g. for clients with a lower screen 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/234381Processing 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 by altering the temporal resolution, e.g. decreasing the frame rate by frame skipping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44016Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving splicing one content stream with another content stream, e.g. for substituting a video clip
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/4402Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
    • H04N21/440218Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display by transcoding between formats or standards, e.g. from MPEG-2 to MPEG-4
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/4402Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
    • H04N21/440245Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display 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/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/4402Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
    • H04N21/440263Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display by altering the spatial resolution, e.g. for displaying on a connected PDA
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/4402Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
    • H04N21/440281Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display by altering the temporal resolution, e.g. by frame skipping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/442Monitoring of processes or resources, e.g. detecting the failure of a recording device, monitoring the downstream bandwidth, the number of times a movie has been viewed, the storage space available from the internal hard disk
    • H04N21/44213Monitoring of end-user related data
    • H04N21/44218Detecting physical presence or behaviour of the user, e.g. using sensors to detect if the user is leaving the room or changes his face expression during a TV program
    • 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/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8547Content authoring involving timestamps for synchronizing content

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Business, Economics & Management (AREA)
  • Marketing (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Social Psychology (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Databases & Information Systems (AREA)
  • Television Signal Processing For Recording (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

본 명세서에 설명된 구현은 비디오를 트랜스코딩하기 위한 방법, 디바이스 및 컴퓨터 판독 가능 매체에 관한 것이다. 일부 구현에서, 컴퓨터 구현 방법은 복수의 트랙을 포함하는 비디오를 획득하는 단계를 포함한다. 방법은 비디오에 대응하는 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계를 더 포함한다. 방법은 부분 트랜스코딩된 파일이 이용 가능한 경우, 부분 트랜스코딩된 파일과 관련된 타임스탬프를 획득하는 단계와, 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작하는 비디오의 일부를 트랜스코딩하는 단계와, 그리고 출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일과 트랜스코딩된 파일을 결합하는 단계를 더 포함한다. 방법은 부분 트랜스코딩된 파일이 이용가능하지 않은 경우, 을 획득하기 위해 트랜스코더를 사용하여 비디오의 시작 부분부터 비디오를 트랜스코딩하는 단계 및 출력 비디오를 획득하기 위해 복수의 출력 트랙을 결합하는 단계를 더 포함한다.

Description

인터럽트 가능한 비디오 트랜스코딩
사용자들은 스마트폰, 태블릿, 컴퓨터, 웨어러블 디바이스, 카메라 등과 같은 다양한 디바이스를 사용하여 비디오을 캡처한다. 비디오 파일은 비디오 길이, 비디오에 사용되는 인코딩 유형, 비디오의 해상도 및/또는 비트 레이트에 기초하여 크기가 몇 메가바이트 또는 기가바이트와 같이 클 수 있다. 캡처된 비디오는 디바이스 또는 서버, 예를 들어 사용자의 이미지 또는 비디오 라이브러리에 로컬로 저장될 수 있다. 예를 들어, 사용자들은 다른 사용자와 비디오를 공유하기 위해 백업용 서버에 비디오를 저장할 수 있다. 사용자들은 메시징 또는 소셜 네트워킹 서비스를 통해 다른 사용자와 직접 비디오를 공유할 수 있다.
대용량 비디오 파일을 저장하기 위해서는 많은 저장 공간이 필요하다. 대용량 비디오 파일을 서버로 전송하려면 대역폭과 같은 상당한 네트워크 리소스가 필요하다. 비디오 트랜스코딩 또는 압축은 비디오를 더 낮은 해상도의 더 낮은 비트 레이트로 다시 인코딩하여 디비오를 저장하는데 필요한 저장 공간 및 비디오를 서버 또는 다른 사용자의 사용자 디바이스로 전송하는데 사용되는 네트워크 리소스가 오리지널 비디오보다 낮도록 할 수 있다.
본 명세서에 제공된 배경 설명은 본 개시의 맥락을 일반적으로 제시하기 위한 것이다. 현재 명명된 발명자의 작업은 이 배경 섹션에 설명되어 있는 한도내에서 출원 당시 선행 기술로 인정되지 않을 수 있는 설명의 양태는 명시적으로나 묵시적으로 본 개시의 선행 기술로 인정되지 않는다.
본 명세서에 설명된 구현들은 비디오를 트랜스코딩하기 위한 방법, 디바이스 및 컴퓨터 판독가능 매체에 관한 것이다.
일부 구현에서, 컴퓨터 구현 방법은 복수의 트랙을 포함하는 비디오를 획득하는 단계를 포함한다. 방법은 비디오에 대응하는 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계를 더 포함할 수 있다. 부분 트랜스코딩된 파일이 이용가능하다는 결정에 응답하여, 방법은 부분 트랜스코딩된 파일과 관련된 타임스탬프를 획득하는 단계와; 트랜스코더를 이용하여 비디오의 일부를 트랜스코딩하는 단계와, 상기 비디오의 일부는 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작하고; 그리고 출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일 및 비디오의 트랜스코딩된 일부를 결합하는 단계를 더 포함할 수 있다.
부분 트랜스코딩된 파일이 이용가능하지 않다는 결정에 응답하여, 방법은 복수의 출력 트랙을 획득하기 위해 트랜스코더를 사용하여 비디오를 트랜스코딩하는 단계와, 상기 트랜스코딩은 비디오의 시작 부분부터 수행되고; 그리고 출력 비디오를 획득하기 위해 복수의 출력 트랙을 결합하는 단계를 더 포함할 수 있다. 일부 구현에서, 출력 비디오는 비디오의 해상도보다 낮은 해상도 또는 비디오의 비트레이트보다 낮은 비트레이트를 가질 수 있다.
일부 구현에서, 방법은 트랜스코더에 의한 비디오의 트랜스코딩 동안 인터럽트를 수신하는 단계; 및 인터럽트에 응답하여, 트랜스코더의 출력을 부분 트랜스코딩된 파일로서 저장하는 단계를 더 포함할 수 있다. 일부 구현에서, 트랜스코더의 출력은 복수의 부분 출력 트랙을 포함할 수 있고, 각각의 부분 출력 트랙은 비디오의 복수의 트랙 중 특정 트랙에 대응한다. 이러한 구현에서, 방법은 인터럽트에 응답하여, 부분 트랜스코딩된 파일과 관련된 구성 설정을 저장하는 단계를 더 포함할 수 있다. 일부 구현에서, 구성 설정은 복수의 부분 출력 트랙 각각의 포맷을 포함할 수 있다. 일부 구현에서, 구성 설정은 비트 레이트 파라미터, 폭 파라미터 또는 높이 파라미터를 포함할 수 있다.
일부 구현에서, 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계는 부분 트랜스코딩된 파일이 저장 디바이스에 저장되어 있는지 결정하기 위해 저장 디바이스에 액세스하는 단계를 포함할 수 있다. 부분 트랜스코딩된 파일이 저장 디바이스에 저장되어 있지 않은 경우, 부분 트랜스코딩된 파일이 이용가능하지 않은 것으로 결정된다. 부분 트랜스코딩된 파일이 저장 디바이스에 저장되어 있으면, 방법은 트랜스코더의 현재 구성 설정이 부분 트랜스코딩된 파일과 관련된 구성 설정과 일치하는지 결정하는 단계를 포함할 수 있다. 현재 구성 설정이 일치하는 경우, 방법은 부분 트랜스코딩된 파일이 이용가능하다고 결정하는 단계를 포함할 수 있다. 현재 구성 설정이 일치하지 않는 경우, 방법은 부분 트랜스코딩된 파일이 이용가능하지 않다고 결정하는 단계를 포함할 수 있다. 일부 구현에서, 방법은 저장 디바이스로부터 부분 트랜스코딩된 파일을 삭제하는 단계를 포함할 수 있다.
일부 구현에서, 방법은 트랜스코더에 의해 비디오의 일부를 트랜스코딩하는 동안 인터럽트를 수신하는 단계; 및 인터럽트에 응답하여, 트랜스코더의 부분 출력을 포함하도록 부분 트랜스코딩된 파일을 업데이트하는 더 단계를 포함할 수 있다.
일부 구현에서, 비디오를 트랜스코딩하는 단계는 대응하는 원시 데이터를 획득하기 위해 비디오의 복수의 트랙 중 하나 이상을 디코딩하는 단계; 및 복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함할 수 있다. 일부 구현에서, 복수의 트랙은 적어도 하나의 오디오 트랙 및 적어도 하나의 비디오 트랙을 포함할 수 있다. 일부 구현에서, 복수의 트랙은 메타데이터 트랙을 더 포함할 수 있다.
일부 구현에서, 적어도 하나의 비디오 트랙은 복수의 키 프레임 및 복수의 비(non)-키 프레임을 포함할 수 있다. 각각의 키 프레임 및 각각의 비-키 프레임은 대응하는 타임스탬프와 관련될 수 있다. 일부 구현에서, 부분 트랜스코딩된 파일과 관련된 타임스탬프는 복수의 키 프레임 중 특정 키 프레임에 대응할 수 있다.
일부 구현에서, 부분 트랜스코딩된 파일과 관련된 타임스탬프는 복수의 시간값을 포함할 수 있다. 각각의 시간값은 복수의 트랙의 개별 트랙에 대응할 수 있다. 이러한 구현에서, 비디오의 일부를 트랜스코딩하는 단계는 대응하는 원시 데이터를 획득하기 위해 복수의 시간값의 개별 시간값에서 시작하는 복수의 트랙 각각을 디코딩하는 단계; 및 복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함할 수 있다.
일부 구현은 프로세서 및 그 프로세서에 연결되고 저장된 명령들을 갖는 메모리를 포함하는 컴퓨팅 디바이스를 포함한다. 명령들은 프로세서에 의해 실행될 때 프로세서로 하여금 복수의 트랙을 포함하는 비디오를 획득하는 단계 및 비디오에 대응하는 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계를 포함하는 동작들을 수행하게 한다.
부분 트랜스코딩된 파일이 이용가능하다는 결정에 응답하여, 프로세서는 부분 트랜스코딩된 파일과 관련된 타임스탬프를 획득하는 단계; 트랜스코더를 이용하여 비디오의 일부를 트랜스코딩하는 단계; 및 출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일 및 비디오의 트랜스코딩된 일부를 결합하는 단계를 포함하는 동작들을 수행할 수 있다. 비디오의 일부는 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작할 수 있다.
부분 트랜스코딩된 파일이 이용가능하지 않다는 결정에 응답하여, 프로세서는 복수의 출력 트랙을 획득하기 위해 트랜스코더를 사용하여 비디오를 트랜스코딩하는 단계와; 그리고 출력 비디오를 획득하기 위해 복수의 출력 트랙을 결합하는 단계를 포함하는 동작들을 수행할 수 있다. 트랜스코딩은 비디오의 시작 부분부터 수행될 수 있다.
일부 구현에서, 메모리는 프로세서로 하여금 트랜스코더에 의한 비디오의 트랜스코딩 동안 인터럽트를 수신하는 단계; 및 인터럽트에 응답하여, 트랜스코더의 출력을 부분 트랜스코딩된 파일로서 저장하는 단계를 포함하는 추가 동작들을 수행하게 하는 저장된 추가 명령을 가질 수 있다.
트랜스코더의 출력은 복수의 부분 출력 트랙을 포함할 수 있다. 각각의 부분 출력 트랙은 비디오의 복수의 트랙 중 특정 트랙에 대응할 수 있다. 일부 구현에서, 동작들은 인터럽트에 응답하여, 부분 트랜스코딩된 파일과 관련된 구성 설정을 저장하는 단계를 더 포함할 수 있다. 일부 구현에서, 구성 설정은 복수의 부분 출력 트랙 각각의 포맷을 포함할 수 있다. 일부 구현에서, 구성 설정은 비트 레이트 파라미터, 폭 파라미터 또는 높이 파라미터 중 하나 이상을 포함할 수 있다.
일부 구현에서, 메모리는 프로세서로 하여금 트랜스코더에 의해 비디오의 일부를 트랜스코딩하는 동안 인터럽트를 수신하는 단계; 및 인터럽트에 응답하여, 트랜스코더의 부분 출력을 포함하도록 부분 트랜스코딩된 파일을 업데이트하는 단계를 포함하는 추가 동작을 수행하게 하는 저장된 추가 명령들을 가질 수 있다.
일부 구현은 프로세서에 의해 실행될 때 프로세서로 하여금 복수의 트랙을 포함하는 비디오를 획득하는 단계와; 비디오에 대응하는 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계를 포함하는 동작들을 수행하게 하는 명령들이 저장된 비-일시적 컴퓨터 판독 가능 매체를 포함한다.
부분 트랜스코딩된 파일이 이용가능하다는 결정에 응답하여, 동작들은 부분 트랜스코딩된 파일과 관련된 타임스탬프를 획득하는 단계; 트랜스코더를 이용하여 비디오의 일부를 트랜스코딩하는 단계; 및 출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일 및 트랜스코딩된 비디오의 일부를 결합하는 단계를 더 포함한다. 비디오의 일부는 부분 트랜스코딩된 파일과 관된 타임스탬프에서 시작할 수 있다.
부분 트랜스코딩된 파일이 이용가능하지 않다는 결정에 응답하여, 동작들은 복수의 출력 트랙을 획득하기 위해 트랜스코더를 사용하여 비디오를 트랜스코딩하는 단계, 상기 트랜스코딩은 비디오의 시작 부분부터 수행되고; 및 출력 비디오를 획득하기 위해 복수의 출력 트랙을 결합하는 단계를 더 포함한다.
일부 구현에서, 비-일시적 컴퓨터 판독 가능 매체는 프로세서로 하여금 트랜스코더에 의한 비디오의 트랜스코딩 동안 인터럽트를 수신하는 단계; 및 인터럽트에 응답하여, 트랜스코더의 출력을 부분 트랜스코딩된 파일로서 저장하는 단계를 포함할 수 있는 추가 동작을 수행하게 하는 저장된 추가 명령들을 포함할 수 있다.
일부 구현에서, 부분 트랜스코딩된 파일과 관련된 타임스탬프는 복수의 시간값을 포함할 수 있다. 각각의 시간값은 복수의 트랙의 개별 트랙에 대응할 수 있다. 이러한 구현에서, 비디오의 일부를 트랜스코딩하는 단계의 동작은 대응하는 원시 데이터를 획득하기 위해 복수의 시간값의 개별 시간값에서 시작하는 복수의 트랙 각각을 디코딩하는 단계; 및 복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함할 수 있다.
일부 구현에서, 컴퓨터 구현 방법은 복수의 트랙을 포함하는 비디오를 획득하는 단계를 포함한다. 방법은 비디오에 대응하는 부분 트랜스코딩된 파일을 획득하는 단계와, 여기서 타임스탬프는 부분 트랜스코딩된 파일과 관련된다. 방법은 트랜스코더를 이용하여 비디오의 일부를 트랜스코딩하는 단계를 ㄷ 포함하고, 비디오의 일부는 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작한다. 방법은 출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일 및 비디오의 트랜스코딩된 부분을 결합하는 단계를 더 포함한다. 일부 구현에서, 출력 비디오는 비디오의 해상도보다 낮은 해상도 또는 비디오의 비트 레이트보다 낮은 비트 레이트 중 적어도 하나를 갖는다.
일부 구현에서, 방법은 트랜스코더에 의해 비디오의 일부를 트랜스코딩하는 동안 인터럽트를 수신하는 단계; 및 인터럽트에 응답하여, 트랜스코더의 부분 출력을 포함하도록 부분 트랜스코딩된 파일을 업데이트하는 단계를 더 포함할 수 있다.
일부 구현에서, 트랜스코더의 부분 출력은 복수의 부분 출력 트랙을 포함한다. 일부 구현에서, 각각의 부분 출력 트랙은 비디오의 복수의 트랙 중 특정 트랙에 대응한다. 일부 구현에서, 방법은 인터럽트에 응답하여, 부분 트랜스코딩된 파일과 관련된 구성 설정을 저장하는 단계를 더 포함할 수 있다. 일부 구현에서, 구성 설정은 복수의 부분 출력 트랙 각각의 포맷의 포멧 중 하나 이상, 또는 비트 레이트 파라미터, 폭 파라미터 또는 높이 파라미터 중 하나 이상을 포함한다.
일부 구현에서, 복수의 트랙은 복수의 키 프레임 및 복수의 비-키 프레임을 포함하는 적어도 하나의 비디오 트랙을 포함한다. 일부 구현에서, 각각의 키 프레임 및 각각의 비-키 프레임은 대응하는 타임스탬프와 관련된다. 일부 구현에서, 부분 트랜스코딩된 파일과 관련된 타임스탬프는 복수의 키 프레임 중 특정 키 프레임에 대응한다.
일부 구현에서, 타임스탬프는 복수의 시간값을 포함한다. 일부 구현에서, 각각의 시간값은 복수의 트랙의 개별 트랙에 대응한다. 일부 구현에서, 비디오의 일부를 트랜스코딩하는 단계는 대응하는 원시 데이터를 획득하기 위해 복수의 시간값의 개별 시간값에서 시작하는 복수의 트랙 각각을 디코딩하는 단계; 및 복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함할 수 있다.
도 1은 본 명세서에 설명된 하나 이상의 구현을 위해 사용될 수 있는 예시적인 네트워크 환경의 블록도이다.
도 2는 일부 구현에 따른, 비디오를 트랜스코딩하는 예시적인 방법을 도시하는 블록도이다.
도 3은 일부 구현에 따른, 비디오를 트랜스코딩하기 위한 예시적인 프로세싱 파이프라인을 도시한다.
도 4는 본 명세서에 설명된 하나 이상의 구현을 위해 사용될 수 있는 예시적인 디바이스의 블록도이다.
비디오 트랜스코딩 또는 압축은 자원 집약적이고 느린 프로세스이다. 비디오를 트랜스코딩하는 것은, 예를 들어, 사용된 처리 용량, 사용된 메모리, 및 트랜스코딩에 사용되는 에너지 측면에서 계산 비용이 많이 드는 동작일 수 있다. 예를 들어, 스마트폰이나 태블릿과 같은 클라이언트 디바이스에서 4K 비디오 또는 고화질(HD) 비디오와 같은 고품질 비디오를 압축하는데는 상당한 시간, 예를 들어, 압축을 수행하는 디바이스의 구성에 따라 비디오 길이와 같거나 비디오 길이의 2배 이상이 걸린다. 또한, 압축은 계산 비용이 많이 드는 동작이기 때문에, 사용자가 클라이언트 디바이스를 적극적으로 사용하는 동안에는 압축을 수행할 수 없는데, 그 이유는 이러한 동작이 사용자 작업에 대한 클라이언트 디바이스의 가용성 및/또는 응답성에 영향을 미칠 수 있기 때문이다.
이러한 상황을 피하기 위한 한 가지 기술은 사용자가 클라이언트 디바이스를 적극적으로 사용하지 않는 시간, 예를 들어 클라이언트 디바이스가 유휴 상태일 때 비디오 압축을 수행하는 것이다. 그러나, 예를 들어 사용자 액션, 운영 체제 인터럽트 등으로 인해 압축이 인터럽트(중단)된 경우에는 압축을 다시 시작해야 하므로 계산 리소스가 낭비된다.
또한, 비디오를 압축하는데 필요한 시간은 비디오의 길이에 따라 증가하므로 그러한 비디오에 대한 압축 프로세스 동안 인터럽트의 가능성도 증가한다. 예를 들어, 압축 동작의 일부가 인터럽트되면(예를 들어, 10%) 이러한 압축은 처음부터 다시 시작해야 한다. 또한, 스마트폰, 태블릿, 랩탑 등과 같이 배터리 제약이 있는 디바이스에서, 이러한 낭비되는 계산은 제한된 양이 온-디바이스에서 이용가능한 경우 에너지 낭비이기도 한다.
본 명세서에 설명된 구현들은 이러한 문제 중 일부에 비추어 고려되었다. 본 명세서에 설명된 구현마다, 트랜스코딩 동작이 인터럽트된 지점으로부터 비디오 트랜스코딩 동작이 재개될 수 있게 하는 비디오 트랜스코딩 기술들이 설명된다. 부분(partial) 트랜스코딩된 파일은 인터럽트 시점에 저장되고 후속 트랜스코딩 동작 중에 사용되므로 계산 리소스 및 에너지 낭비를 제거하거나 줄일 수 있다. 설명된 구현들은 단일 트랙이 있는 비디오, 다중 트랙이 있는 비디오 등을 비롯하여 모든 유형의 비디오를 처리할 수 있다.
도 1은 본 명세서에 설명된 일부 구현에서 사용될 수 있는 예시적인 네트워크 환경(100)의 블록도를 도시한다. 일부 구현에서, 네트워크 환경(100)은 하나 이상의 서버 시스템, 예를 들어, 도 1의 예에서 서버 시스템(102) 및 제2 서버 시스템(140)을 포함한다. 서버 시스템(102, 140)은 예를 들어 네트워크(130)와 통신할 수 있다. 서버 시스템(102)은 서버 디바이스(104) 및 데이터베이스(106) 또는 다른 저장 디바이스를 포함할 수 있다. 일부 구현에서, 서버 디바이스(104)는 이미지 애플리케이션(156b)을 제공할 수 있다. 제2 서버 시스템(140)은 하나 이상의 애플리케이션, 예를 들어, 애플리케이션 A(144), 애플리케이션 B(146) 및 애플리케이션 C(148)를 제공하도록 구성된 제2 서버 디바이스(142)를 포함할 수 있다. 도 1 및 나머지 도면에서, 참조 번호 뒤의 문자, 예를 들어 "156a"는 특정 참조 번호를 갖는 엘리먼트에 대한 참조를 나타낸다. 이어지는 문자가 없는 텍스트의 참조 번호(예를 들어, "156")는 해당 참조 번호를 포함하는 엘리먼트의 실시예에 대한 일반적인 참조를 나타낸다.
네트워크 환경(100)은 또한 네트워크(130)를 통해 서로 및/또는 서버 시스템(102) 및/또는 제2 서버 시스템(140)과 통신할 수 있는 하나 이상의 클라이언트 디바이스, 예를 들어 클라이언트 디바이스(120, 122, 124, 126)를 포함할 수 있다. 네트워크(130)는 인터넷, 근거리 통신망(LAN), 무선 네트워크, 스위치 또는 허브 연결 중 하나 이상을 포함하는 임의의 유형의 통신 네트워크일 수 있다. 일부 구현에서, 네트워크(130)는 예를 들어, 피어-투-피어 무선 프로토콜(예를 들어, 블루투스, Wi-Fi 다이렉트 등) 등을 사용하여 디바이스들 사이의 피어-투-피어 통신을 포함할 수 있다. 2개의 클라이언트 디바이스(120, 122) 사이의 피어-투-피어 통신의 일 예가 화살표(132)로 도시되어 있다.
예시의 편의를 위해, 도 1은 서버 시스템(102), 서버 디바이스(104), 데이터베이스(106), 제2 서버 시스템(140) 및 제2 서버 디바이스(142)에 대한 하나의 블록을 도시하고 클라이언트 디바이스(120, 122, 124, 126)에 대한 4개의 블록을 도시한다. 서버 블록(102, 104, 106, 140, 142)은 다중 시스템, 서버 디바이스 및 네트워크 데이터베이스를 나타낼 수 있고, 블록들은 도시된 것과 상이한 구성으로 제공될 수 있다. 예를 들어, 서버 시스템(102) 및/또는 제2 서버 시스템(140)은 네트워크(130)를 통해 다른 서버 시스템과 통신할 수 있는 다중 서버 시스템을 나타낼 수 있다. 일부 구현에서, 서버 시스템(102) 및/또는 제2 서버 시스템(140)은 예를 들어 클라우드 호스팅 서버를 포함할 수 있다. 일부 예에서, 데이터베이스(106) 및/또는 다른 저장 디바이스는 서버 디바이스(104)와 별개이고 네트워크(130)를 통해 서버 디바이스(104) 및 다른 서버 시스템과 통신할 수 있는 서버 시스템 블록(들)에 제공될 수 있다.
또한, 임의의 수의 클라이언트 디바이스가 있을 수 있다. 각 클라이언트 디바이스는 데스크탑 컴퓨터, 랩탑 컴퓨터, 휴대용 또는 모바일 디바이스, 셀 폰, 스마트폰, 태블릿 컴퓨터, 텔레비전, TV 셋탑 박스 또는 엔터테인먼트 디바이스, 웨어러블 디바이스(예를 들어, 디스플레이 안경 또는 고글, 손목시계, 헤드셋, 완장, 장신구 등), 개인 휴대 정보 단말기(PDA), 미디어 플레이어, 게임 디바이스 등과 같은 임의의 유형의 전자 디바이스일 수 있다. 일부 클라이언트 디바이스는 또한 데이터베이스(106) 또는 다른 저장소와 유사한 로컬 데이터베이스를 가질 수 있다. 일부 구현에서, 네트워크 환경(100)은 도시된 구성요소 모두를 갖지 않을 수 있고 및/또는 본 명세서에 설명된 구성요소 대신에 또는 이에 추가하여 다른 유형의 엘리먼트를 포함하는 다른 엘리먼트를 가질 수 있다.
다양한 구현에서, 최종 사용자(U1, U2, U3, U4)는 개별 클라이언트 디바이스(120, 122, 124, 126)를 사용하여 서버 시스템(102)과 및/또는 서로 통신할 수 있다. 일부 예에서, 사용자(U1, U2, U3 및 U4)는 개별 클라이언트 디바이스 및/또는 서버 시스템(102) 또는 제2 서버 시스템(140)에서 실행되는 애플리케이션을 통해, 및/또는 네트워크 서비스, 예를 들어, 소셜 네트워크 서비스 또는 서버 시스템(102) 또는 제2 서버 시스템(140)에서 구현되는 다른 유형의 네트워크 서비스를 통해 서로 사호작용할 수 있다. 예를 들어, 개별 클라이언트 디바이스(120, 122, 124, 126)는 하나 이상의 서버 시스템(예를 들어, 시스템(102), 제2 서버 시스템(140))과 데이터를 송수신할 수 있다.
일부 구현에서, 서버 시스템(102) 및/또는 제2 서버 시스템(140)은 각 클라이언트 디바이스가 서버 시스템(102) 또는 제2 서버 시스템(140) 및/또는 네트워크 서비스에 업로드된 통신(된) 컨텐츠 또는 공유 컨텐츠를 수신할 수 있도록 데이터를 클라이언트 디바이스에 제공할 수 있다. 일부 예에서, 사용자(U1-U4)는 오디오 또는 비디오 회의, 오디오, 비디오 또는 텍스트 채팅, 또는 다른 통신 모드 또는 애플리케이션을 통해 상호작용할 수 있다.
서버 시스템(102) 또는 제2 서버 시스템(140)에 의해 구현된 네트워크 서비스는 사용자가 다양한 통신을 수행하고, 링크 및 연결을 형성하고, 이미지, 텍스트, 비디오, 오디오 및 다른 유형의 컨텐츠 및/또는 다른 기능을 수행할 수 있게 하는 시스템을 포함할 수 있다. 예를 들어, 클라이언트 디바이스는 클라이언트 디바이스로 전송 또는 스트리밍되고 서버 및/또는 네트워크 서비스를 통해 다른 클라이언트 디바이스에서(또는 다른 클라이언트 디바이스에서 직접) 발생하거나 서버 시스템 및/또는 네트워크 서비스에서 발생하는 컨텐츠 게시물과 같은 수신된 데이터를 디스플레이할 수 있다. 일부 구현에서, 클라이언트 디바이스들은 예를 들어, 위에서 설명된 바와 같이 클라이언트 디바이스들 사이의 피어-투-피어 통신을 사용하여 서로 직접 통신할 수 있다. 일부 구현에서, "사용자"는 시스템 또는 네트워크와 인터페이스하는 사람뿐만 아니라 하나 이상의 프로그램 또는 가상 엔티티를 포함할 수 있다.
일부 구현에서, 클라이언트 디바이스(120, 122, 124, 및/또는 126) 중 임의의 것은 하나 이상의 애플리케이션을 제공할 수 있다. 예를 들어, 도 1에 도시된 바와 같이, 클라이언트 디바이스(120)는 이미지 애플리케이션(156a) 및 하나 이상의 다른 애플리케이션(154)을 제공할 수 있다. 클라이언트 디바이스(122-126)도 유사한 애플리케이션을 제공할 수 있다. 이미지 애플리케이션(156a)은 클라이언트 디바이스(120)의 하드웨어 및/또는 소프트웨어를 사용하여 구현될 수 있다. 상이한 구현들에서, 이미지 애플리케이션(156a)은 예를 들어, 클라이언트 디바이스들(120-124) 중 임의의 것에서 실행되는 독립형 클라이언트 애플리케이션일 수 있거나, 서버 시스템(102)에 제공된 이미지 애플리케이션(156b)과 함께 작동할 수 있다. 이미지 애플리케이션(156a)과 이미지 애플리케이션(156b)은 이미지 및/또는 비디오와 관련된 다양한 기능을 제공할 수 있다. 예를 들어, 이러한 기능에는 카메라를 사용하여 이미지 또는 비디오 캡처, 하나 이상의 태그를 연결하기 위해 이미지 또는 비디오 분석, 이미지 또는 비디오 수정, 라이브러리 또는 데이터베이스에 이미지 또는 비디오 저장 중 하나 이상이 포함될 수 있다.
일부 구현에서, 이미지 애플리케이션(156)은 사용자가 이미지 및/또는 비디오를 저장하는 라이브러리 또는 데이터베이스를 관리하는 것을 가능하게 할 수 있다. 예를 들어, 사용자는 클라이언트 디바이스(예를 들어, 클라이언트 디바이스들(120-126) 중 임의의 것) 상의 이미지 애플리케이션(156a)의 백업 기능을 사용하여 클라이언트 디바이스 상의 로컬 이미지 또는 비디오를 서버 디바이스, 예를 들어, 서버 디바이스(104)에 백업할 수 있다. 예를 들어, 사용자는 백업될 하나 이상의 이미지 또는 비디오를 수동으로 선택하거나 백업될 이미지 또는 비디오를 식별하는 백업 설정을 지정할 수 있다. 이미지 또는 비디오를 서버 디바이스에 백업하는 것은 예를 들어 서버 디바이스(104) 상의 이미지 애플리케이션(156b)과 협력하여 서버에 의한 저장을 위해 서버에 이미지 또는 비디오를 전송하는 것을 포함할 수 있다.
일부 구현에서, 비디오는 백업을 위해 비디오를 서버로 전송하기 전에 비디오의 파일 크기를 줄이기 위해 압축될 수 있다. 예를 들어, 그러한 압축은 비디오의 비트 레이트, 비디오의 해상도, 또는 비디오의 프레임 레이트 중 하나 이상을 감소시키기 위해 비디오를 트랜스코딩하는 것을 포함할 수 있다. 트랜스코딩에는 비디오의 파일 포멧을 변경하는 것이 포함될 수도 있다. 비디오의 파일 크기를 줄이면 클라이언트 디바이스에서 서버로 비디오를 전송하는데 사용되는 네트워크 양이 줄어든다. 또한, 파일 크기가 작을수록 오리지널 포멧으로 비디오를 저장하는 것에 비해 서버에 비디오를 저장하는데 필요한 저장 공간의 양이 줄어든다. 일부 구현에서, 이미지 애플리케이션(156)은 예를 들어 수신되는 인터럽트에 응답하여 트랜스코딩 동작을 일시 중지하고 나중에 그 트랜스코딩 동작을 재개하는 것을 지원하는 비디오 트랜스코딩을 구현할 수 있다.
일부 구현에서, 클라이언트 디바이스(120)는 하나 이상의 다른 애플리케이션(154)을 포함할 수 있다. 예를 들어, 다른 애플리케이션(154)은 다양한 유형의 기능, 예를 들어 캘린더, 주소록, 이메일, 웹 브라우저, 쇼핑, 교통(예를 들어, 택시, 기차, 항공사 예약 등), 엔터테인먼트(예를 들어, 음악 플레이어, 비디오 플레이어, 게임 애플리케이션 등), 소셜 네트워킹(예를 들어, 메시징 또는 채팅, 오디오/비디오 통화, 이미지/비디오 공유 등) 등을 제공하는 애플리케이션일 수 있다. 일부 구현에서, 다른 애플리케이션(154) 중 하나 이상은 클라이언트 디바이스(120)에서 실행되는 독립형 애플리케이션일 수 있다. 일부 구현에서, 다른 애플리케이션(154) 중 하나 이상은 다른 애플리케이션(154)의 데이터 및/또는 기능을 제공하는 서버 시스템, 예를 들어, 서버 시스템(102) 및/또는 제2 서버 시스템(140)에 액세스할 수 있다. 예를 들어, 제2 서버 시스템(140)에 의해 제공되는 것으로 도시된 애플리케이션(144, 146, 148) 중 임의의 것은 다른 애플리케이션(154) 중 하나 이상에 데이터 및/또는 커맨드를 제공할 수 있다. 일부 구현에서, 서버 애플리케이션(144-148)은 예를 들어 웹 브라우저 또는 다른 클라이언트 측 프로그램을 통해 클라이언트 디바이스에 의해 액세스되는 독립형 애플리케이션일 수 있다.
클라이언트 디바이스(120, 122, 124, 및/또는 126) 상의 사용자 인터페이스는 이미지, 비디오, 데이터 및 기타 컨텐츠는 물론 커뮤니케이션, 프라이버시 설정, 통보 및 기타 데이터를 포함하는 사용자 컨텐츠 및 기타 컨텐츠의 디스플레이를 가능하게 할 수 있다. 이러한 사용자 인터페이스는 클라이언트 디바이스의 소프트웨어, 서버 디바이스의 소프트웨어, 및/또는 서버 디바이스(104) 및/또는 제2 서버 디바이스(142)에서 실행되는 클라이언트 소프트웨어와 서버 소프트웨어의 조합, 예를 들어, 서버 시스템(102) 및/또는 제2 서버 디바이스(142)와 통신하는 애플리케이션 소프트웨어 또는 클라이언트 소프트웨어를 사용하여 디스플레이될 수 있다. 사용자 인터페이스는 클라이언트 디바이스 또는 서버 디바이스의 디스플레이 디바이스, 예를 들어 터치스크린 또는 기타 디스플레이 스크린, 프로젝터 등에 의해 디스플레이될 수 있다. 일부 구현에서, 서버 시스템상에서 실행되는 애플리케이션 프로그램은 클라이언트 디바이스와 통신하여 클라이언트 디바이스에서 사용자 입력을 수신하고 클라이언트 디바이스에서 시각 데이터, 오디오 데이터 등과 같은 데이터를 출력할 수 있다.
본 명세서에 설명된 특징의 다른 구현은 임의의 유형의 시스템 및/또는 서비스를 사용할 수 있다. 예를 들어, 소셜 네트워킹 서비스 대신에 또는 소셜 네트워킹 서비스에 추가하여 (예를 들어, 인터넷에 연결된) 다른 네트워크 서비스를 사용할 수 있다. 임의의 유형의 전자 디바이스는 본 명세서에 설명된 기능을 사용할 수 있다. 일부 구현은 컴퓨터 네트워크로부터 연결이 끊기거나 간헐적으로 연결된 하나 이상의 클라이언트 또는 서버 디바이스에서 본 명세서에 설명된 하나 이상의 기능을 제공할 수 있다. 일부 예에서, 디스플레이 디바이스를 포함하거나 디스플레이 디바이스에 연결된 클라이언트 디바이스는 그 클라이언트 디바이스에 로컬인 저장 디바이스에 저장된, 예를 들어 통신 네트워크를 통해 이전에 수신된 컨텐츠 게시물을 디스플레이할 수 있다.
본 명세서에서 언급되는 이미지는 하나 이상의 픽셀값(예를 들어, 색상값, 밝기값 등)을 갖는 픽셀들을 갖는 디지털 이미지를 포함할 수 있다. 이미지는 스틸 이미지(예를 들어, 스틸 사진, 단일 프레임이 있는 이미지 등), 동적 이미지(예를 들어, 애니메이션, 애니메이션 GIF, 이미지의 일부는 모션을 포함하고 다른 부분은 정적인 시네마그래프 등), 또는 비디오(예를 들어, 오디오를 포함할 수 있는 이미지 또는 이미지 프레임의 시퀀스)일 수 있다. 이 문서의 나머지 부분에서는 이미지를 정적 이미지로 언급하지만, 본 명세서에 설명된 기술은 동적 이미지, 비디오 등에 적용할 수 있음을 알 수 있다. 예를 들어, 본 명세서에 설명된 구현은 스틸 이미지(예를 들어, 사진 또는 기타 이미지), 비디오 또는 동적 이미지와 함께 사용될 수 있다.
도 2는 일부 구현에 따른, 비디오를 트랜스코딩하는 예시적인 방법(200)을 예시하는 흐름도이다. 일부 구현에서, 방법(200)은 예를 들어 도 1에 도시된 바와 같은 서버 시스템(102)에서 구현될 수 있다. 일부 구현에서, 방법(200)의 일부 또는 전부는 도 1에 도시된 바와 같은 하나 이상의 클라이언트 디바이스(120, 122, 124 또는 126), 하나 이상의 서버 디바이스 및/또는 서버 디바이스(들) 및 클라이언트 디바이스(들) 모두에서 구현될 수 있다. 설명된 예에서, 구현 시스템은 하나 이상의 디지털 프로세서 또는 프로세싱 회로("프로세서"), 및 하나 이상의 저장 디바이스(예를 들어, 데이터베이스(106) 또는 다른 저장소)를 포함한다. 일부 구현에서, 하나 이상의 서버 및/또는 클라이언트의 상이한 구성요소는 방법(200)의 상이한 블록 또는 다른 부분을 수행할 수 있다. 일부 예에서, 제 1 디바이스는 방법(200)의 블록들을 수행하는 것으로서 설명된다. 일부 구현은 결과 또는 데이터를 제1 디바이스로 전송할 수 있는 하나 이상의 다른 디바이스(예를 들어, 다른 클라이언트 디바이스 또는 서버 디바이스)에 의해 수행되는 방법(200)의 하나 이상의 블록을 가질 수 있다.
일부 구현에서, 방법(200) 또는 방법의 일부는 시스템에 의해 자동으로 개시될 수 있다. 일부 구현에서, 구현하는 시스템은 제1 디바이스이다. 예를 들어, 방법(또는 그의 일부)은 주기적으로 수행되거나, 하나 이상의 특정 이벤트 또는 조건, 예를 들어 유휴 상태로 진입하는 클라이언트 디바이스, 백업되지 않은 비디오의 임계수(threshold number), 클라이언트 디바이스에 캡처되거나 저장되는 새 비디오, 방법(200)의 마지막 수행 이후 만료된 사전 결정된 시간 기간, 및/또는 방법에 의해 판독된 설정에서 지정될 수 있는 하나 이상의 다른 조건 상태 발생에 기초하여 수행될 수 있다.
방법(200)은 블록(202)에서 시작할 수 있다. 블록(202)에서, 비디오가 획득된다. 예를 들어, 비디오는 클라이언트 디바이스(120-126) 중 임의의 것에 의해 캡처되거나 획득된 비디오일 수 있다. 일부 구현에서, 비디오는 복수의 트랙을 포함할 수 있다. 예를 들어, 복수의 트랙은 하나 이상의 오디오 트랙 및/또는 하나 이상의 비디오 트랙을 포함할 수 있다. 하나 이상의 오디오 트랙은 예를 들어, 단일 오디오 트랙(모노 사운드), 2개의 오디오 트랙(스테레오 사운드), 2개 이상의 오디오 트랙(예를 들어, 서라운드 사운드의 경우, 각 언어에 대한 하나의 트랙 등) 또는 임의의 다른 수의 오디오 트랙을 포함할 수 있다. 하나 이상의 비디오 트랙은 예를 들어, 단일 비디오 트랙, 2개의 비디오 트랙(예를 들어, 3차원 비디오용) 등을 포함할 수 있다. 일부 구현에서, 비디오는 또한 하나 이상의 메타데이터 트랙을 포함할 수 있다. 예를 들어, 메타데이터 트랙은 하나 이상의 언어로 된 텍스트 캡션, 비디오에 관한 정보, 예를 들어 캡처 위치, 캡처 시간, MIME 포멧 등을 포함할 수 있다.
비디오 트랙은 복수의 키 프레임 및 복수의 비-키(non-key) 프레임을 포함하는 복수의 프레임을 포함할 수 있다. 각 비디오 프레임은 대응하는 타임스탬프와 관련될 수 있다. 복수의 프레임은 개별 타임스탬프에 기초하여 시퀀스(순서대)로 배열될 수 있다. 일부 구현에서, 키 프레임은 디코딩하기 위해 다른 비디오 프레임을 필요로 하지 않는 인트라 코딩된 프레임(I-프레임)을 포함할 수 있다. 일부 구현에서, 비-키 프레임은 예측(된) 프레임(P-프레임)을 포함할 수 있다. P-프레임을 디코딩하려면 하나 이상의 이전 프레임의 데이터가 필요할 수 있다. 일부 구현에서, 비-키 프레임은 양방향 예측 프레임(B-프레임)을 포함할 수 있다. B-프레임을 디코딩하려면 하나 이상의 이전 프레임 및 하나 이상의 후속 프레임의 데이터가 필요할 수 있다. 프레임의 디코딩은 관련된 타임스탬프에 기초하여 수행될 수 있다.
일부 구현에서, 비디오는 무손실 압축을 사용하여 압축되거나 압축되지 않은 고품질 비디오일 수 있다. 고품질 비디오는 높은 비트 레이트 및 높은 해상도를 가질 수 있다. 예를 들어, 스마트폰이나 다른 디바이스를 사용하여 캡처된 고품질 비디오는 예를 들어 4096픽셀의 수평 픽셀 해상도를 갖는 4K 비디오; 1080픽셀의 수평 픽셀 해상도를 갖는 고화질(HD) 비디오일 수 있다. 비트 레이크는 비디오의 색상 정보, 예를 들어, 24비트 색상, 16비트 색상 등에 해당할 수 있다. 고품질 비디오에는 많은 양의 저장 공간이 필요할 수 있는데, 예를 들어 1분의 4K 비디오에는 수백 메가바이트(예를 들어, 300MB 이상)의 저장 공간이 필요할 수 있고, 1분의 고화질 비디오에는 100MB 이상의 저장 공간이 필요할 수 있다. 또한, 예를 들어 서버(예를 들어, 서버 디바이스(104))에 저장하기 위해 네트워크를 통해 고품질 비디오를 전송하는 것은 상당한 양의 네트워크 자원을 필요로 할 수 있다.
오디오 트랙은 복수의 오디오 샘플 또는 오디오 프레임을 포함할 수 있다. 각 오디오 샘플 또는 오디오 프레임은 대응하는 타임스탬프와 관련될 수 있다. 일부 구현에서, 비디오에서 오디오 트랙 및 비디오 트랙의 프레임은 동기화될 수 있다. 예를 들어, 각각의 오디오 프레임은 비디오의 특정 프레임, 예를 들어 둘 다 동일한 타임스탬프와 관련되도록 특정 키 프레임(또는 다른 프레임)에 대응할 수 있다. 일부 구현에서, 오디오 트랙과 비디오 트랙은 상호 독립적일 수 있어서, 비디오 프레임과 관련된 타임스탬프는 오디오 프레임과 관련된 타임스탬프와 상이할 수 있다. 예를 들어, 비디오의 비디오 트랙의 프레임 레이트가 30fps(초당 프레임)인 경우, 초당 30개의 타임스탬프가 있을 수 있는 반면 동일한 비디오의 오디오 트랙은 초당 더 적 타임스탬프(예를 들어, 1, 2, 5 등)를 가질 수 있다.
일부 구현에서, 메타데이터 트랙은 또한 타임스탬프와 관련될 수 있다. 예를 들어 캡션 또는 텍스트 메타데이터는 타임스탬프와 관련될 수 있다. 메타데이터 트랙과 관련된 타임스탬프는 비디오 트랙의 타임스탬프와 동기화되거나 독립적일 수 있다.
일부 구현에서, 비디오를 트랜스코딩하는 것은, 예를 들어 비디오를 상이한 비트레이트 및/또는 해상도로 변환하는 것을 포함할 수도 있다. 일부 구현에서, 트랜스코딩은 비디오의 프레임 레이트를 변경하는 것을 포함할 수 있다. 예를 들어, 방법(200)이 클라이언트 디바이스상에서 구현되는 경우, 예를 들어 더 적은 양의 저장 공간을 사용하도록 비디오를 압축하고, 비디오를 서버에 백업하기 전에 비디오를 압축하기 위해, 트랜스코딩은 트랜스코딩 후에 획득된 출력 비디오가 비디오보다 더 작은 파일 크기를 갖도록 비트레이트 감소, 비디오의 해상도 감소, 비디오의 프레임 레이트 감소 중 하나 이상을 포함할 수 있다. 상이한 구현에서, 트랜스코딩 파라미터들은 특정 압축 비율(예를 들어, 4:1), 특정 타겟 해상도(예를 들어, 4K 비디오를 HD 비디오로 변경 등) 등을 타겟으로 선택될 수 있다. 일부 구현에서, 트랜스코딩은 비디오의 파일 유형을 변경할 수 있는데, 예를 들어 비디오가 저장된 오리지널 파일 유형과 상이한 파일 유형으로 비디오를 변환할 수 있다.
일부 예에서, 비디오를 트랜스코딩하는 것은 비디오의 품질을 실질적으로 변경하지 않고 포맷 변환만을 포함할 수도 있다. 예를 들어, 이러한 트랜스코딩은 다양한 디바이스에서 재생이 지원되는 표준 형식으로 비디오를 변환하고, 비디오를 네트워크를 통해 스트리밍에 적합한 형식으로 변환하기 위해 수행될 수 있다. 일부 예에서, 트랜스코딩은, 예를 들어, 업샘플링에 의해, 또는 비디오를 더 높은 품질로 변환함으로써 비디오의 해상도를 증가시키는 것을 포함할 수 있다. 일부 구현에서, 트랜스코딩은 비디오의 다른 속성들을 조정하는 것, 예를 들어 16:9 종횡비의 비디오를 4:3 또는 정사각형 종횡비로 변환하는 것, 비디오를 회전시키는 것 등을 포함할 수 있다.
일부 구현에서, 트랜스코딩은 비디오의 오디오 트랙을 다른 포멧으로 변환하는 것, 다중 오디오 트랙에서 더 적은 수의 트랙으로 병합(merging) 또는 선택하는 것, 예를 들어 모노 오디오 트랙을 얻기 위해 스테레오 오디오 트랙을 병합하는 것 등이 포함될 수 있다. 일부 구현에서, 오디오 트랙을 트랜스코딩하는 것은 오디오 트랙을 다른 포맷으로 변환하는 것을 포함할 수 있다.
일부 구현에서, 트랜스코딩을 위해 복수의 비디오, 예를 들어 고품질 비디오가 획득될 수 있다. 복수의 비디오가 획득된 경우, 그 비디오는 트랜스코딩 전에 정렬(sort)될 수 있다. 예를 들어, 부분 트랜스코딩된 파일이 이용 가능한 비디오가 부분 트랜스코딩된 파일이 이용 가능하지 않은 비디오보다 먼저 처리되도록 비디오가 정렬될 수 있다. 예를 들어, 부분 트랜스코딩된 파일은 방법(200)을 구현하는 디바이스의 로컬 저장 디바이스에 저장될 수 있다.
일부 구현에서, 비디오는 생성 시간, 마지막 수정된 시간, 또는 비디오와 관련된 다른 파라미터에 기초하여 정렬될 수 있다. 일부 구현에서, 예를 들어, 방법(200)의 출력 비디오가 백업을 위해 클라이언트 디바이스에서 서버 디바이스로 전송될 때, 비디오는 백업 큐로부터 획득될 수 있고 그 백업 큐와 동일한 정렬 순서를 가질 수 있다. 일부 구현에서, 비디오는 비디오의 파일 크기, 사용자 선택 등에 기초하여 정렬될 수 있다. 예를 들어, 사용자가 백업할 특정 비디오를 선택하면, 해당 비디오가 정렬된 순서에서 가장 먼저 배치될 수 있다. 다른 구현에서, 파일 크기, 부분 트랜스코딩된 파일의 가용성, 생성 시간, 마지막 수정된 시간, 사용자 선택 등의 다양한 조합이 복수의 비디오를 정렬하는데 사용될 수 있다.
일부 구현에서, 비디오는 비디오에 할당된 스코어에 기초하여 정렬될 수 있다. 예를 들어, 스코어는 트레이닝된 기계 학습 모델에 의해 할당될 수 있다. 예를 들어, 스코어는 비디오의 중요도를 나타낼 수 있다. 기계 학습 모델은 비디오 및/또는 비디오 메타데이터의 분석에 기초하여 비디오의 스코어를 결정할 수 있다. 사용자가 허용하는 경우, 비디오 분석은 비디오에 하나 이상의 사람 또는 객체가 묘사되어 있는지 여부, 객체의 유형, 비디오에 있는 사람 또는 객체의 움직임 특성, 비디오에 묘사된 위치, 영상이 안정적인지 흔들림이 있는지 여부를 결정하는 것을 포함할 수 있다.
일부 구현에서, 방법(200)은 여러 번, 예를 들어 정렬된 복수의 비디오로부터 선택된 각각의 비디오에 대해 한 번 수행될 수 있다. 블록(202) 다음에 블록(204)이 올 수 있다.
블록(204)에서, 비디오에 대응하는 부분 트랜스코딩된 파일이 이용가능한지 여부가 결정된다. 예를 들어, 저장 디바이스(예를 들어, 방법(200)를 구현하는 컴퓨팅 디바이스의 로컬 저장 디바이스)가 부분 트랜스코딩된 파일이 저장 디바이스에 저장되어 있는지를 결정하기 위해 액세스될 수 있다. 만약 부분 트랜스코딩된 파일이 저장 디바이스에 저장되어 있지 않으면, 부분 트랜스코딩된 파일이 이용 가능하지 않은 것으로 결정한다.
만약 부분 트랜스코딩된 파일이 저장 디바이스에 저장되어 있으면, 부분 트랜스코딩된 파일과 관련된 구성 설정이 결정될 수 있다. 예를 들어, 구성 설정은 부분 트랜스코딩된 파일 내의 메타데이터로 저장되거나, 별도의 구성 파일로 저장되거나 또는 데이터베이스에 저장될 수 있다. 예를 들어, 구성 설정은 부분 트랜스코딩된 파일의 하나 이상의 트랙의 포멧, 예를 들어 MIME(Multipurpose Internet Mail Extensions) 포멧을 포함할 수 있다. 포맷은 예를 들어, AVC(Advanced Video Coding) 포맷, HEVC(High Efficiency Video Coding) 포맷 등과 같은 표준 포맷일 수 있다. 다른 예에서, 구성 설정은 부분 트랜스코딩된 파일이 트랜스코더에 의해 생성되었을 때 트랜스코더의 구성으로서 사용된 비트레이트 파라미터, 폭 파라미터, 또는 높이 파라미터를 포함할 수 있다. 일부 구현에서, 구성 설정은 비트레이트 모드 파라미터를 포함할 수 있다.
부분 트랜스코딩된 파일과 관련된 구성 설정은 구성 설정이 일치(match)하는지 결정하기 위해 비디오를 트랜스코딩하는데 사용되는 트랜스코더의 현재 구성 설정과 비교될 수 있다. 만약 구성 설정이 일치하면, 부분 트랜스코딩된 파일이 이용가능한 것으로 결정된다.
구성 설정이 일치하지 않으면, 부분 트랜스코딩된 파일이 이용가능하지 않은 것으로 결정된다. 이 경우, 부분 트랜스코딩된 파일이 존재하더라도, 부분 트랜스코딩된 파일은 트랜스코더의 추가 출력과 결합될 수 없도록 다른 트랜스코더 설정으로 인코딩된 것으로 식별되므로 부분 트랜스코딩된 파일은 출력 비디오를 생성하는데 사용하지 못할 수 있다. 일부 구현에서, 구성 설정이 일치하지 않으면, 부분 트랜스코딩된 파일은 저장 디바이스에서 삭제될 수 있다. 부분 트랜스코딩된 파일과 관련된 구성 파일이 별도로 저장되는 경우, 해당 구성 파일도 삭제될 수 있다.
부분 트랜스코딩된 파일이 이용가능한 것으로 결정되면, 블록(204) 다음에 블록(220)이 올 수 있다. 부분 트랜스코딩된 파일이 이용가능하지 않은 것으로 결정되면, 블록(204) 다음에 블록(206)이 올 수 있다.
블록(220)에서, 부분 트랜스코딩된 파일이 검색되어 멀티플렉서에 제공된다. 예를 들어, 부분 트랜스코딩된 파일은 비디오의 복수의 트랙의 개별 트랙에 각각 대응하는 복수의 트랜스코딩된 트랙을 포함할 수 있다. 멀티플렉서는 복수의 트랜스코딩된 트랙을 단일 출력 파일로 결합할 수 있다. 예를 들어, 출력 파일은 MPEG-4 비디오 파일일 수 있다.
일부 구현에서, 타임스탬프는 부분 트랜스코딩된 파일과 관련될 수 있고 검색될 수 있다. 타임스탬프는 부분 트랜스코딩된 파일에 포함된 비디오의 비디오 트랙의 마지막 프레임, 예를 들어 특정 키 프레임에 대응할 수 있다. 예를 들어, 부분 트랜스코딩된 파일이 비디오의 시작(예를 들어, 시간 0초)에서 중간 지점(예를 들어, 시간 t초)에 해당하는 데이터를 포함하는 경우, 타임스탬프는 중간 지점(t)를 나타낼 수 있다. 일부 구현에서, 단일 타임스탬프가 부분 트랜스코딩된 파일과 관련될 수 있다.
일부 구현에서, 타임스탬프는 복수의 시간값을 포함할 수 있다. 예를 들어, 복수의 시간값 각각은 복수의 트랙의 개별 트랙에 대응할 수 있다. 일부 구현에서, 하나 이상의 트랙, 예를 들어 메타데이터 트랙은 예를 들어 트랙의 데이터가 비디오의 순차 재생에 사용되는 데이터가 아닌 경우 타임스탬프와 관련되지 않을 수 있다. 이들 구현에서, 복수의 시간값이 검색될 수 있다. 블록(220) 다음에 블록(206)이 올 수 있다.
블록(206)에서, 비디오는 트랜스코딩된다. 일부 구현에서, 트랜스코딩은 2개의 스테이지(단계), 즉 디코더 스테이지 다음에 인코더 스테이지로 수행될 수 있다. 디코더 스테이지에서, 비디오는 디코딩될 수도 있는데, 예를 들어 저장된 포맷으로부터 인코더 스테이지에 적합한 포맷으로 변환될 수 있다. 예를 들어, 비디오가 특정 코덱을 사용하여 인코딩된 경우, 디코더 스테이지는 비디오를 원시 또는 비압축된 데이터 스트림으로 디코딩할 수 있다. 일부 구현에서, 디코딩은 비디오를 압축 해제하는 것을 포함할 수 있다. 일부 구현에서, 디코더 스테이지는 복수의 디코더를 포함할 수 있다. 예를 들어, 비디오 디코더는 비디오의 하나 이상의 비디오 트랙을 디코딩하는데 사용될 수 있고 디코딩된 오디오는 비디오의 하나 이상의 오디오 트랙을 디코딩하는데 사용될 수 있다. 일부 구현에서, 비디오의 오디오 트랙은 예를 들어 타겟 오디오 포맷이 비디오의 오디오 트랙의 포맷과 동일하거나 오디오 트랙이 멀티플렉서에 의해 지원되는 포맷인 경우, 디코딩되지 않을 수 있다. 디코더 스테이지의 출력은 인코더 스테이지에 제공될 수 있다.
인코더 스테이지에서, 비디오의 원시 또는 비압축된 데이터 스트림은 예를 들어 인코더의 구성 설정에 지정된 바와 같이 인코더의 타겟 포맷으로 인코딩될 수 있다. 일부 구현에서, 인코딩은 비디오를 압축하는 것을 포함할 수 있다. 압축은 비디오의 비트 레이트를 낮추는 것, 비디오의 해상도를 낮추는 것, 비디오의 프레임 레이트를 낮추는 것 중 하나 이상 포함할 수 있다. 일부 구현에서, 비디오의 오디오 부분을 인코딩하는 것은 품질의 변경(또는 최소 변경) 없이 오디오를 타겟 오디오 포맷으로 인코딩하는 것을 포함할 수 있다.
비디오 트랜스코딩하는 것은 부분 트랜스코딩된 파일이 이용가능한지 여부에 기초하여 전체 비디오 또는 비디오의 일부에 대해 수행될 수 있다. 예를 들어, 부분 트랜스코딩된 파일이 이용가능하지 않은 경우, 비디오는 비디오의 시작부터, 예를 들어 0초에서 비디오 끝까지 트랜스코딩될 수 있다.
부분 트랜스코딩된 파일이 이용가능하다면, 비디오의 일부가 트랜스코딩될 수 있다. 예를 들어, 트랜스코딩된 비디오의 일부는 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작할 수 있다. 이전에 트랜스코딩되지 않았고 부분 트랜스코딩된 파일에 저장된 비디오의 일부를 선택적으로 트랜스코딩하는 것은 예를 들어 비디오의 일부만 디코딩 및 타겟 포멧으로의 후속 인코딩을 위해 메모리에 로드해야 하기 때문에 트랜스코딩의 계산 부하를 줄인다.
일부 구현에서, 타임스탬프가 비디오의 복수의 트랙의 개별 트랙에 각각 대응하는 복수의 시간값을 포함하는 경우, 트랜스코딩은 각 트랙에 대해 별도로 수행될 수 있다. 이러한 구현에서, 복수의 트랙 각각은 대응하는 원시 데이터를 획득하기 위해 복수의 시간값의 개별 시간값에서 시작하여 디코딩될 수 있다. 그런 다음, 원시 데이터는 대응하는 출력 트랙을 획득하기 위해 인코딩될 수 있다. 블록(206) 다음에 블록(208)이 올 수 있다.
블록(208)에서, 인터럽트가 트랜스코딩 동안 수신되었는지 여부가 결정될 수 있다. 예를 들어, 방법(200)이 클라이언트 디바이스에서 구현될 때, 인터럽트는 클라이언트 디바이스의 사용자가 클라이언트 디바이스를 활성화할 때, 예를 들어 스마트폰의 잠금을 해제하거나, 음성 또는 터치 입력을 제공하거나, 그렇지 않으면 클라이언트 디바이스에 액세스할 때 수신될 수 있다. 인터럽트는 또한 예를 들어 클라이언트 디바이스가 네트워크에 액세스하기 위해 깨어나 알림을 표시할 때, 시스템 이벤트로서 수신될 수 있다. 인터럽트가 수신되면 블록(208) 다음에 블록(210)이 올 수 있다. 인터럽트가 수신되지 않으면 블록(208) 다음에 블록(212)이 올 수 있다.
블록(210)에서, 부분 트랜스코딩된 파일이 저장된다. 예를 들어, 트랜스코딩 중에 비디오의 끝에 도달하기 전에 인터럽트가 수신되면, 트랜스코딩이 완료된 비디오의 부분은 부분 트랜스코딩된 파일로서 저장될 수 있다. 일부 구현에서, 부분 트랜스코딩된 파일의 파일명 및 저장 위치는 사전 결정된 방식을 사용하여 선택될 수 있다. 예를 들어, 파일명은 파일이 비디오에 해당하는 부분 트랜스코딩된 파일(예를 들어, "video1_partial")임을 나타내는 문구(예를 들어, "partial")이 추가된 비디오의 비디오 파일의 파일명(예를 들어, "video1.extension")을 포함하도록 선택될 수 있다. 하나의 비디오에 대해 다수의 부분 트랜스코딩된 파일이 저장된 경우, "video1_partial_1", "video1_partial_2" 등과 같은 시퀀스 번호가 사용될 수 있다. 파일명 및 저장 위치는, 예를 들어 블록(204)을 참조하여 위에서 설명된 바와 같이 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하기 위해 이용될 수 있다. 일부 구현에서, 데이터베이스는 비디오의 파일명 및 대응하는 부분 트랜스코딩된 파일의 파일명을 저장할 수 있다.
인터럽트 수신 시의 트랜스코더의 출력은 복수의 부분 출력 트랙을 포함할 수 있다. 각각의 부분 출력 트랙은 비디오의 특정 트랙에 해당할 수 있다. 예를 들어, 부분 트랜스코딩된 파일은 표준 포멧, 예를 들어 MP4 포멧과 같은 트랜스코딩의 타겟 포멧의 비디오 파일일 수 있다. 일부 구현에서, 비디오의 트랜스코딩 동안 다중 인터럽트가 수신되면, 다수의 부분 트랜스코딩된 파일, 예를 들어 이전 인터럽트(또는 비디오의 시작)와 현재 인터럽트 사이에 트랜스코딩되었던 비디오의 특정 부분에 대응하는 각각의 부분 트랜스코딩된 파일이 저장될 수 있다. 이들 구현에서, 각각의 부분 트랜스코딩된 파일은 각각의 관련된 타임스탬프를 가질 수 있고 비디오가 다음에, 예를 들어 블록(202)에서 시작하여 처리될 때 순서대로 처리될 수 있다.
일부 구현에서, (예를 들어, 시간 0 내지 t1에 대한 데이터를 포함하는) 제1 인터럽트 후에 획득된 부분 트랜스코딩된 파일은 트랜스코딩의 부분 출력, 예를 들어 비디오의 후속 트랜스코딩된 부분을 다음 인터럽트까지(예를 들어, 시간 t1에서 t2까지) 추가하도록 업데이트될 수 있으며, 여기서 0<t1<t2)에는 대응하는 타임스탬프(t2)가 있다. 구현들에서, 비디오가 다음에 처리될 때(예를 들어 블록(202)에서 시작), 트랜스코딩은 타임스탬프(t2)에서 시작할 수 있다. 일부 구현에서, 타임스탬프는 부분 트랜스코딩된 파일, 별도의 파일 또는 데이터베이스에 메타데이터로서 저장될 수 있다. 블록(210)에 저장된 부분 트랜스코딩된 파일은 방법(200)의 후속 반복, 예를 들어 블록(202)의 다음 수행에서 처리될 수 있다.
블록(208)에서 트랜스코딩이 인터럽트되지 않은 것으로 결정되면, 블록(208) 다음에 블록(212)이 올 수 있다. 블록(212)에서, 트랜스코딩이 완료되었는지 여부, 예를 들어 비디오의 끝에 도달했는지 여부가 결정된다. 트랜스코딩이 완료되지 않은 경우, 비디오 인코딩을 계속하기 위해 블록(212) 다음에 블록(206)이 이어진다. 트랜스코딩이 완료되면 블록(212) 다음에 블록(214)이 이어진다.
블록(214)에서, 트랜스코딩된 출력 데이터는 멀티플렉서에 제공되고 출력 비디오는 멀티플렉서로부터 획득된다. 멀티플렉서는 복수의 트랜스코딩된 트랙을 단일 출력 파일로 결합할 수 있다. 또한, 비디오의 일부(예를 들어, 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작하는 부분)에 대해 트랜스코딩이 수행될 때, 멀티플렉서는 트랜스코딩된 출력 데이터를 부분 트랜스코딩된 파일과 결합한다. 멀티플렉서의 출력은 타겟 비디오 포멧의 출력 비디오 파일이다. 예를 들어, 출력 파일은 MPEG-4 비디오 파일일 수 있다. 블록(214) 다음에 블록(216)이 올 수 있다.
블록(216)에서, 출력 비디오는 예를 들어 방법(200)을 구현하는 디바이스의 저장 디바이스에 저장된다. 예를 들어, 방법(200)이 클라이언트 디바이스(120-126) 상에서 구현되는 경우, 출력 비디오는 클라이언트 디바이스의 로컬 저장 디바이스에 저장된다. 일부 구현에서, 출력 비디오는 비디오의 해상도보다 낮은 해상도 및/또는 비디오의 비트레이트보다 낮은 비트레이트를 가질 수 있다. 블록(216) 다음에 블록(218)이 올 수 있다.
블록(218)에서, 부분 트랜스코딩된 파일이 삭제될 수 있다. 부분 트랜스코딩된 파일은 인터럽트 후 트랜스코딩을 재개하는데 사용되기 때문에, 일단 출력 비디오가 획득되면 부분 트랜스코딩된 파일은 저장 공간을 회수하기 위해 저장 디바이스에서 삭제될 수 있다. 부분 트랜스코딩된 파일과 관련된 구성 파일이 별도로 저장된 경우, 해당 구성 파일도 삭제될 수 있다.
방법(200)의 다양한 블록은 결합되거나, 다수의 블록으로 분할되거나, 병렬로 수행될 수 있다. 예를 들어, 블록(204-220)은 다수의 비디오를 동시에 처리하여 대응하는 출력 비디오를 얻도록 병렬로 수행될 수 있다. 다른 예에서, 블록(220)은 멀티플렉서가 부분 트랜스코딩된 파일을 처리하는 동안 추가의 트랜스코딩된 비디오가 병렬로 획득되도록 블록(206)과 병렬로 수행될 수 있다. 또한, 비디오의 복수의 트랙은 블록(206)에서 병렬로 처리될 수 있다.
일부 구현에서, 방법(200)의 하나 이상의 블록은 방법(200)을 구현하는 디바이스의 중앙 처리 디바이스(CPU) 또는 그래픽 처리 디바이스(GPU) 또는 가속기 상에서 수행될 수 있다. 예를 들어, 블록(206)은 비디오 디코딩 및 인코딩에 적합할 수 있는 GPU 또는 가속기에서 수행될 수 있는 반면, 다른 블록 방법(200)은 CPU에서 수행될 수 있다.
전술한 논의가 입력 비디오보다 크기가 더 작은 출력 비디오에 관한 것이지만, 방법(200)은 다른 목적을 위해 비디오를 트랜스코딩하기 위해, 예를 들어, 압축 없이 포멧 변환을 수행하기 위해, 비디오를 다른 종횡비로 재타게팅하기 위해, 더 낮은 해상도 또는 비트 레이트로부터 더 높은 해상도 또는 비트 레이트로 비디오를 상향 변환하기 위해, 비디오를 트리밍하기 위해, 비디오 회전하기 위해, 비디오에 필터를 적용하기 위해, 비디오에 트랙을 추가하기 위해, 비디오로부터 트랙 제거하기 위해 수행될 수 있다.
방법(200) 또는 그의 일부는 추가 입력을 사용하여 여러 번 반복될 수 있다. 예를 들어, 방법(200)은 블록(202)에서 획득된 모든 비디오가 대응하는 출력 비디오를 획득하기 위해 처리될 때까지 반복될 수 있다.
도 3은 일부 구현에 따른 비디오를 트랜스코딩하기 위한 예시적인 처리 파이프라인(300)을 도시한다. 처리 파이프라인(300)은 추출기(306), 트랜스코더(308) 및 멀티플렉서(310)를 포함할 수 있다. 일부 구현에서, 트랜스코딩된 파일을 획득하기 위한 처리(프로세싱)는 부분 트랜스코딩된 파일이 이용가능한 경우 2 스테이지로 수행될 수 있다.
제1 스테이지에서, 부분 트랜스코딩된 파일(302)이 멀티플렉서(310)의 입력으로 제공된다. 부분 트랜스코딩된 파일(302)은 복수의 트랙을 포함할 수 있고, 각각의 트랙은 비디오(304)의 특정 트랙에 대응한다. 예를 들어, 부분 트랜스코딩된 파일(302)은 비디오(304)가 전체적으로 처리되기 전에 트랜스코딩이 인터럽트될 때 트랜스코더(308)의 부분 출력으로서 획득될 수 있다. 멀티플렉서(310)는 부분 트랜스코딩된 파일(302)의 복수의 트랙을 결합하여 출력 비디오(312)를 획득할 수 있다. 예를 들어, 멀티플렉서(310)는 부분 트랜스코딩된 파일(302)로부터 획득된 개별 인코딩된 트랙을 파일 컨테이너, 예를 들어 MP4 파일로 패키징할 수 있다. 부분 트랜스코딩된 파일(302)은 어떠한 트랜스코딩 동작도 수행하지 않고 멀티플렉서(310)에 제공된다. 이 스테이지에서, 출력 비디오(312)는 부분 트랜스코딩된 파일(302)과 관련된 타임스탬프까지 비디오(304)의 시작을 위한 트랙을 포함할 수 있다.
제2 스테이지에서, 비디오(304)는 추출기(306)의 입력으로 제공된다. 추출기(306)는 부분 트랜스코딩된 파일(302)과 관련된 타임스탬프로부터 시작하여 비디오(304)의 트랙을 추출할 수 있다. 일부 구현에서, 추출기(306)는 타임스탬프 이전의 가장 가까운 키 프레임에서 시작하는 비디오(304)의 비디오 트랙과 연관된 프레임, 예를 들어 부분 트랜스코딩된 파일(302)과 관련된 타임스탬프와 일치하는 타임스탬프와 연관된 키 프레임, 또는 타임스탬프가 일치하지 않는 경우 바로 이전 키 프레임을 획득할 수 있다. 추출기(306)는 비디오(304)의 끝에 도달할 때까지, 예를 들어 순차적인 순서로 프레임을 계속 추출할 수 있다. 유사하게, 추출기(306)는 비디오(304)의 다른 트랙, 예를 들어, 다른 비디오 트랙, 오디오 트랙, 메타데이터 트랙 등에 대한 프레임을 추출할 수 있다. 추출기(306)는 획득된 프레임을 트랜스코더(308)에 제공할 수 있다.
트랜스코더(308)는 디코더 스테이지 및 인코더 스테이지를 포함할 수 있다. 트랜스코더(308)는 추출기(306)에 의해 제공된 프레임을 디코딩하고 디코딩된 프레임을, 예를 들어 트랜스코더(308)의 구성 설정에 지정된 바와 같이 타겟 포맷으로 인코딩할 수 있다. 트랜스코더(308)는 비디오(304)의 각 트랙에 대응하는 복수의 출력 프레임을 생성할 수 있다. 트랜스코더(308)는 추출기(306)에 의해 제공되는 비디오의 하나 이상의 트랙에 대한 출력 프레임을 생성할 수 있다. 트랜스코더(308)는 비디오(304)의 복수의 트랙에 대한 출력 프레임을 멀티플렉서(310)에 제공할 수 있다. 멀티플렉서(310)는 트랜스코더 출력으로부터의 복수의 트랙을 결합하여 출력 비디오(312)를 획득할 수 있다. 예를 들어, 멀티플렉서(310)는 트랜스코더(308)로부터 획득된 개별 인코딩된 트랙을 파일 컨테이너, 예를 들어 MP4 파일로 패키징할 수 있다.
일부 구현에서, 처리 파이프라인(300)의 상이한 동작들은 순서대로 수행될 수 있는데, 예를 들어, 제1 스테이지는 제2 스테이지가 개시되기 전에 완료될 수 있다. 예를 들어, 이러한 구현에서, 멀티플렉서(310)는 먼저 부분 트랜스코딩된 파일(302)로부터 획득된 개별 인코딩된 트랙을 파일 컨테이너로 패키징한 다음, 트랜스코더(308)로부터 획득된 개별 인코딩된 트랙을 파일 컨테이너에 추가할 수 있다.
일부 구현에서, 예를 들어 트랜스코더(308) 및/또는 멀티플렉서(310)가 충분한 버퍼 용량을 가지는 경우, 제1 스테이지 및 제2 스테이지는 병렬로 수행될 수 있다. 예를 들어, 멀티플렉서(310)는 트랜스코더(308)가 트랜스코딩을 수행함과 동시에 부분 트랜스코딩된 파일(302)로부터 획득된 개별 인코딩된 트랙을 처리할 수 있으며, 트랜스코더(308)의 출력은 멀티플렉서(310)에 의한 처리로부터 큐잉되거나 버퍼링된다. 따라서 멀티플렉서(310)는 프레임의 순차적인 순서로 비디오를 처리한다. 일부 구현에서, 처리 파이프라인(300)이 인터럽트될 때, 인터럽트 시점의 출력 비디오(312)가 부분 트랜스코딩된 파일(302)을 대체할 수 있다.
일부 구현에서, 추출기(306)는 부분 트랜스코딩된 파일(302)과 관련된 타임스탬프에 의해 표시된 바와 같이, 대응하는 시간값(재개 지점)에서 비디오(304)의 트랙을 추출하는 것을 지원할 수 있다. 이들 구현에서, 각각의 트랙은 대응하는 시간값으로부터 시작하여 추출되고 트랜스코더(308)에 제공된다. 또한, 추출기(306)에 의해 추출된 프레임이 트랜스코더(308)에 의해 성공적으로 디코딩될 수 있도록 각각의 트랙에 대한 시간값은 시간값이 해당 트랙에 대한 키 프레임에 대응하도록 선택될 수 있다. 예를 들어, 비디오(304)가 I-프레임, P-프레임 및 B-프레임을 포함하는 비디오 트랙을 포함하는 경우, 부분 트랜스코딩된 파일(302)에 대한 시간값은 I-프레임에 대응할 수 있다.
일부 구현에서, 추출기(306)는 비디오(304)의 모든 트랙이 동일한 시작점, 예를 들어 부분 트랜스코딩된 파일(302)과 관련된 타임스탬프에서 추출되도록 단일 타임스탬프로부터 시작하는 트랙 추출을 지원할 수 있다. 일부 경우, 타임스탬프는하나 이상의 트랙에 대한 키 프레임에 대응하지 않을 수 있다. 이러한 구현에서, 추출된 트랙이 트랜스코더(308)에 의해 디코딩될 수 있음을 보장하기 위해, 출력 비디오(312)는 처리 파이프라인(300)이 인터럽트되면, 출력 비디오(312)(이는 부분 트랜스코딩된 파일(302)로서 사용되거나 이전의 부분 트랜스코딩된 파일(302)를 대체함)는 복수의 트랙에 걸친 키 프레임에 대응하는 시간에 종료되도록 키 프레임 청크(chunks)에 키 프레임으로 기록된다. 예를 들어, 멀티플렉서(310)는 상이한 트랙에 걸쳐 동기화되는 키 프레임에 도달할 때까지 상이한 트랙으로부터 트랜스코딩된 프레임을 버퍼링할 수 있다. 이들 구현에서, 트랜스코더(308)에 의해 추가 프레임이 생성된 경우, 멀티플렉서(310)는 이러한 프레임을 폐기한다. 이러한 구현은 부분 트랜스코딩된 파일이 동일한 길이의 다중 트랙을 지원하는 모든 포멧으로 저장될 수 있다는 점에서 유용할 수도 있다.
처리 파이프라인(300)은 출력 비디오(312)의 생성에서, 예를 들어 인터럽트된 트랜스코딩 동작 동안 생성된 부분 트랜스코딩된 파일(302)을 이용한다. 부분 트랜스코딩된 파일의 재사용은 예를 들어 이전에 트랜스코딩된 프레임은 인터럽트 수신 시 폐기되는 것이 아니라 저장되고 재사용되기 때문에 계산 비용이 절감된다. 이러한 방식으로 계산 비용을 절감하면 프로세서 사용량과 에너지 사용량을 줄일 수 있다. 처리 파이프라인(300)은 처리 파이프라인(300)이 배터리로 구동되는 디바이스에서 수행될 때 개선된 배터리 수명을 가능하게 할 수 있다. 처리 파이프라인(300)은 또한 비디오(304)의 이전에 처리된 부분이 추출기(306) 및 트랜스코더(308)에 의해 다시 처리될 필요가 없기 때문에 트랜스코딩의 속도를 향상시킬 수 있다.
도 4는 본 명세서에 설명된 하나 이상의 특징을 구현하는데 사용될 수 있는 예시적인 디바이스(400)의 블록도이다. 일 예에서, 디바이스(400)는 클라이언트 디바이스, 예를 들어 도 1에 도시된 클라이언트 디바이스들(115) 중 임의의 것을 구현하는데 사용될 수 있다. 대안적으로, 디바이스(400)는 서버 디바이스, 예를 들어 서버(101)를 구현할 수 있다. 일부 구현에서, 디바이스(400)는 클라이언트 디바이스, 서버 디바이스, 또는 클라이언트와 서버 디바이스 둘 다를 구현하는데 사용될 수 있다. 디바이스(400)는 임의의 적절한 컴퓨터 시스템, 서버, 또는 전술한 바와 같은 기타 전자 또는 하드웨어 디바이스일 수 있다.
본 명세서에 설명된 하나 이상의 방법은 임의의 유형의 컴퓨팅 디바이스에서 실행될 수 있는 독립형 프로그램, 웹 브라우저에서 실행되는 프로그램, 모바일 컴퓨팅 디바이스(예를 들어, 휴대폰, 스마트폰, 태블릿 컴퓨터, 웨어러블 디바이스(손목시계, 팔 밴드, 보석, 모자, 가상 현실 고글 또는 안경, 증강 현실 고글 또는 안경, 헤드 마운트 디스플레이 등), 랩탑 컴퓨터 등)에서 실행되는 모바일 애플리케이션("앱")에서 실행될 수 있다. 일 예에서, 예를 들어, (클라이언트 디바이스로서) 모바일 컴퓨팅 디바이스는 사용자 입력 데이터를 서버 디바이스로 전송하고 서버로부터 출력(예를 들어, 디스플레이용)을 위한 최종 출력 데이터를 수신하는데 클라이언트/서버 아키텍처가 사용될 수 있다. 다른 예에서, 모든 계산은 모바일 컴퓨팅 디바이스의 모바일 앱(및/또는 다른 앱) 내에서 수행될 수 있다. 다른 예에서, 계산은 모바일 컴퓨팅 디바이스와 하나 이상의 서버 디바이스 사이에서 분할될 수 있다.
일부 구현에서, 디바이스(400)는 프로세서(402), 메모리(404) 및 입/출력(I/O) 인터페이스(406)를 포함한다. 프로세서(402)는 프로그램 코드를 실행하고 디바이스(400)의 기본 동작을 제어하기 위한 하나 이상의 프로세서 및/또는 처리 회로일 수 있다. "프로세서"에는 데이터, 신호 또는 기타 정보를 처리하는 임의의 적절한 하드웨어 시스템, 메커니즘 또는 구성 요소가 포함된다. 프로세서는 하나 이상의 코어(예를 들어, 단일 코어, 이중 코어 또는 다중 코어 구성)가 있는 범용 중앙 처리 장치(CPU), 다중 처리 장치(예를 들어, 다중 프로세서 구성), 그래픽 처리 장치(GPU), FPGA, ASIC, 복합 프로그래밍 가능 논리 장치(CPLD, 기능을 구현하기 위한 전용 회로, 신경망 모델 기반 처리, 신경 회로, 행렬 계산(예를 들어, 행렬 곱셈)에 최적화된 프로세서 또는 기타 시스템을 구현하기 위한 특수 목적 프로세서가 있는 시스템을 포함할 수 있다. 일부 구현에서, 프로세서(402)는 신경망 처리를 구현하는 하나 이상의 코프로세서를 포함할 수 있다. 일부 구현에서, 프로세서(402)는 확률적 출력을 생성하기 위해 데이터를 처리하는 프로세서일 수 있으며, 예를 들어, 프로세서(402)에 의해 생성된 출력은 정확하지 않거나 예상된 출력의 범위 내에서 정확할 수 있다. 처리가 특정 지리적 위치에 제한되거나 시간적 제한이 있을 필요는 없다. 예를 들어, 프로세서는 "실시간", "오프라인", "배치(batch) 모드" 등에서 기능을 수행할 수 있다. 처리의 일부는 상이한(또는 동일한) 프로세싱 시스템에 의해 상이한 시간 및 상이한 위치에서 수행될 수 있다. 컴퓨터는 메모리와 통신하는 임의의 프로세서일 수 있다.
메모리(404)는 일반적으로 프로세서(402)에 의한 액세스를 위해 디바이스(400)에 제공되며, 프로세서에 의한 실행을 위한 명령들을 저장하기에 적합하고 프로세서(402)와 분리 및/또는 통합된 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 전기적으로 소거 가능한 판독 전용 메모리(EEPROM), 플래시 메모리 등과 같은 임의의 적절한 프로세서 판독 가능 저장 매체일 수 있다. 메모리(404)는 운영 체제(408), 애플리케이션(412) 및 애플리케이션 데이터(414)를 포함하여 프로세서(402)에 의해 서버 디바이스(400) 상에서 동작하는 소프트웨어를 저장할 수 있다. 애플리케이션(412)은 이미지 애플리케이션, 데이터 디스플레이 엔진, 웹 호스팅 엔진, 이미지 디스플레이 엔진, 알림 엔진, 소셜 네트워킹 엔진 등과 같은 애플리케이션을 포함할 수 있다. 일부 구현에서, 애플리케이션(412)은 프로세서(402)가 본 명세서에 설명된 기능, 예를 들어, 도 2의 방법 중 일부 또는 전부를 수행할 수 있게 하는 명령들을 각각 포함할 수 있다.
다른 애플리케이션(412)은 예를 들어, 이미지 애플리케이션, 미디어 디스플레이 애플리케이션, 통신 애플리케이션, 웹 호스팅 엔진 또는 애플리케이션, 매핑 애플리케이션, 미디어 공유 애플리케이션 등을 포함할 수 있다. 본 명세서에 개시된 하나 이상의 방법은 예를 들어 임의의 유형의 컴퓨팅 디바이스에서 실행할 수 있는 독립 실행형 컴퓨터 프로그램, 웹 페이지가 있는 웹 애플리케이션, 모바일 컴퓨팅 디바이스에서 실행되는 모바일 애플리케이션("앱") 등과 같은 여러 환경 및 플랫폼에서 동작할 수 있다.
메모리(404)의 임의의 소프트웨어는 대안적으로 임의의 다른 적절한 저장 위치 또는 컴퓨터 판독가능 매체에 저장될 수 있다. 또한, 메모리(404)(및/또는 다른 연결된 저장 디바이스(들))는 하나 이상의 메시지, 하나 이상의 분류법, 전자 백과사전, 사전, 동의어 사전, 지식 기반(knowledge bases), 메시지 데이터, 문법, 사용자 선호도 및/또는 본 명세서에 설명된 기능에 사용된 기타 명령 및 데이터를 저장할 수 있다. 메모리(404) 및 임의의 다른 유형의 저장 장치(자기 디스크, 광 디스크, 자기 테이프 또는 기타 유형 매체)는 "저장소" 또는 "저장 디바이스"로 간주될 수 있다.
I/O 인터페이스(406)는 서버 디바이스(400)를 다른 시스템 및 디바이스와 인터페이스할 수 있도록 하는 기능을 제공할 수 있다. 인터페이스된 디바이스들은 디바이스(400)의 일부로 포함될 수 있거나 분리되어 디바이스(400)와 통신할 수 있다. 예를 들어, 네트워크 통신 디바이스, 저장 디바이스(예를 들어, 메모리 및/또는 데이터베이스(106)) 및 입/출력 디바이스는 I/O 인터페이스(406)를 통해 통신할 수 있다. 일부 구현에서 I/O 인터페이스는 입력 디바이스(키보드, 포인팅 디바이스, 터치스크린, 마이크로폰, 카메라, 스캐너, 센서 등) 및/또는 출력 디바이스(디스플레이 디바이스, 스피커 디바이스, 프린터, 모터 등)와 같은 인터페이스 디바이스에 연결할 수 있다.
I/O 인터페이스(406)에 연결할 수 있는 인터페이스 디바이스의 일부 예는 컨텐츠(예를 들어, 이미지, 비디오 및/또는 본 명세서에 설명된 바와 같은 출력 애플리케이션의 사용자 인터페이스)를 디스플레이하는데 사용될 수 있는 하나 이상의 디스플레이 디바이스(420)를 포함할 수 있다. 디스플레이 디바이스(420)는 로컬 연결(예를 들어, 디스플레이 버스) 및/또는 네트워크 연결을 통해 디바이스(400)에 연결될 수 있고 임의의 적절한 디스플레이 디바이스일 수 있다. 디스플레이 디바이스(420)는 LCD, LED, 또는 플라즈마 디스플레이 스크린, CRT, 텔레비전, 모니터, 터치스크린, 3-D 디스플레이 스크린 또는 다른 시각적 디스플레이 디바이스와 같은 임의의 적절한 디스플레이 디바이스를 포함할 수 있다. 예를 들어, 디스플레이 디바이스(420)는 모바일 디바이스에 제공된 평면 디스플레이 스크린, 고글 또는 헤드셋 디바이스에 제공된 다중 디스플레이 스크린, 또는 컴퓨터 디바이스용 모니터 스크린일 수 있다.
I/O 인터페이스(406)는 다른 입력 및 출력 디바이스에 인터페이스할 수 있다. 일부 예에는 이미지를 캡처할 수 있는 하나 이상의 카메라가 포함된다. 일부 구현은 (예를 들어, 캡처된 이미지, 음성 커맨드 등의 일부로서) 사운드를 캡처하기 위한 마이크로폰, 사운드를 출력하기 위한 오디오 스피커 디바이스, 또는 기타 입력 및 출력 디바이스를 제공할 수 있다.
예시의 편의를 위해, 도 4는 프로세서(402), 메모리(404), I/O 인터페이스(406) 및 소프트웨어 블록(408, 412) 각각에 대한 하나의 블록을 도시한다. 이러한 블록은 하나 이상의 프로세서 또는 처리 회로, 운영 체제, 메모리, I/O 인터페이스, 애플리케이션 및/또는 소프트웨어 모듈을 나타낼 수 있다. 다른 구현에서, 디바이스(400)는 도시된 구성요소들 모두를 갖지 않을 수 있고 및/또는 본 명세서에 도시된 것들 대신에 또는 이에 추가하여 다른 유형의 엘리먼트를 비롯하여 다른 엘리먼트를 가질 수 있다. 일부 구성요소는 본 명세서의 일부 구현에서 설명된 바와 같이 블록들 및 동작들을 수행하는 것으로 설명되지만, 환경(100), 디바이스(400), 유사한 시스템의 임의의 적절한 구성요소 또는 구성요소의 조합, 또는 이러한 시스템과 관련된 임의의 적절한 프로세서(들)는 설명된 블록들 및 동작들을 수행할 수 있다.
본 명세서에 설명된 방법은 컴퓨터에서 실행될 수 있는 컴퓨터 프로그램 명령 또는 코드에 의해 구현될 수 있다. 예를 들어, 코드는 하나 이상의 디지털 프로세서(예를 들어, 마이크로프로세서 또는 다른 처리 회로)에 의해 구현될 수 있고, 반도체 또는 솔리드 스테이트 메모리, 자기 테이프, 이동식 컴퓨터 디스켓, RAM, ROM, 플래시 메모리, 고정 자기 디스크, 광 디스크, 솔리드 스테이트 메모리 드라이브 등을 포함하여, 자기, 광학, 전자기 또는 반도체 저장 매체와 같은 비-일시적 컴퓨터 판독 가능 매체(예를 들어, 저장 매체)를 포함하는 컴퓨터 프로그램 제품에 저장될 수 있다. 프로그램 명령들은 또한 예를 들어 서버(예를 들어, 분산 시스템 및/또는 클라우드 컴퓨팅 시스템)에서 제공되는 서비스형 소프트웨어(SaaS)의 형태로 전자 신호에 포함되어 제공될 수 있다. 대안적으로, 하나 이상의 방법은 하드웨어(논리 게이트 등) 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있다. 예시적인 하드웨어는 프로그래머블 프로세서(예를 들어, FPGA, CPLD), 범용 프로세서, 그래픽 프로세서, ASIC 등일 수 있다. 하나 이상의 방법은 시스템에서 실행되는 애플리케이션의 일부 또는 구성 요소로 수행되거나 다른 애플리케이션 및 운영 체제와 함께 실행되는 애플리케이션 또는 소프트웨어로 수행될 수 있다.
설명이 그것의 특정 구현과 관련하여 설명되었지만, 이러한 특정 구현은 단지 예시적이며 제한적이지 않다. 예시에 도시된 개념은 다른 예시 및 구현에 적용될 수 있다.
본 명세서에 논의된 특정 구현이 사용자에 관한 개인 정보(예를 들어, 사용자 데이터, 사용자의 소셜 네트워크에 관한 정보, 사용자의 위치 및 해당 위치에서의 시간, 사용자의 생체 정보, 사용자의 활동 및 인구 통계 정보)를 수집하거나 사용할 수 있는 상황에서, 사용자에게는 정보 수집 여부, 개인 정보 저장 여부, 개인 정보 사용 여부, 및 사용자에 관한 정보가 수집, 저장 및 사용되는 방법을 제어할 수 있는 하나 이상의 기회가 제공된다. 즉, 본 명세서에서 논의된 시스템 및 방법은 관련 사용자로부터 명시적인 승인을 받은 후 사용자 개인 정보를 수집, 저장 및/또는 사용한다. 예를 들어, 사용자는 프로그램 또는 기능이 해당 특정 사용자 또는 프로그램 또는 기능과 관련된 다른 사용자에 관한 사용자 정보를 수집하는지 여부를 제어할 수 있다. 개인 정보가 수집되어야 하는 각 사용자에게는 해당 사용자와 관련된 정보 수집을 제어할 수 있는 하나 이상의 옵션이 제공되어 정보 수집 여부와 정보의 어느 부분을 수집할지에 대한 허가 또는 승인을 제공한다. 예를 들어, 사용자는 통신 네트워크를 통해 하나 이상의 이러한 제어 옵션을 제공받을 수 있다. 또한, 특정 데이터는 개인 식별 정보가 제거되도록 저장 또는 사용되기 전에 하나 이상의 방식으로 처리될 수 있다. 예를 들어, 사용자의 신원은 개인 식별 정보가 확인될 수 없도록 처리될 수 있다. 다른 예로서, 사용자 디바이스의 지리적 위치는 사용자의 특정 위치가 확인될 수 없도록 더 큰 지역으로 일반화될 수 있다.
본 개시에 설명된 기능 블록, 동작, 특징, 방법, 디바이스 및 시스템은 당업자에게 공지된 바와 같이 시스템, 디바이스 및 기능 블록의 상이한 조합으로 통합되거나 분할될 수 있음을 조목한다. 특정 구현의 루틴을 구현하기 위해 임의의 적절한 프로그래밍 언어 및 프로그래밍 기술이 사용될 수 있다. 다른 프로그래밍 기술, 예를 들어 절차적 또는 객체 지향적 프로그램밍 기술이 사용될 수 있다. 루틴은 단일 처리 디바이스 또는 다중 프로세서에서 실행할 수 있다. 단계, 동작 또는 계산이 특정 순서로 제시될 수 있지만, 그 순서는 다른 특정 구현에서 변경될 수 있다. 일부 구현에서, 본 명세서에서 순차적으로 도시된 다수의 단계 또는 동작은 동시에 수행될 수 있다.

Claims (26)

  1. 비디오를 트랜스코딩하기 위한 컴퓨터 구현 방법으로서, 상기 방법은,
    복수의 트랙을 포함하는 비디오를 획득하는 단계와;
    비디오에 대응하는 부분(partial) 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계와;
    부분 트랜스코딩된 파일이 이용가능하다는 결정에 응답하여:
    부분 트랜스코딩된 파일과 관련된 타임스탬프를 획득하는 단계;
    트랜스코더로 비디오의 일부를 트랜스코딩하는 단계, 상기 비디오의 일부는 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작하고; 및
    출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일 및 비디오의 트랜스코딩된 일부를 결합하는 단계와; 그리고
    부분 트랜스코딩된 파일이 이용가능하지 않다는 결정에 응답하여:
    복수의 출력 트랙을 획득하기 위해 트랜스코더를 사용하여 비디오를 트랜스코딩하는 단계, 상기 트랜스코딩은 비디오의 시작부터 수행되고; 및
    출력 비디오를 획득하기 위해 복수의 출력 트랙을 결합하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  2. 제1항에 있어서,
    상기 출력 비디오는 비디오의 해상도보다 낮은 해상도 또는 비디오의 비트레이트보다 낮은 비트레이트 중 적어도 하나를 갖는 것을 특징으로 하는 컴퓨터 구현 방법.
  3. 제1항에 있어서,
    트랜스코더에 의한 비디오의 트랜스코딩 동안 인터럽트를 수신하는 단계와; 그리고
    인터럽트에 응답하여, 트랜스코더의 출력을 부분 트랜스코딩된 파일로서 저장하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  4. 제3항에 있어서,
    상기 트랜스코더의 출력은 복수의 부분 출력 트랙을 포함하고, 각각의 부분 출력 트랙은 비디오의 복수의 트랙의 특정 트랙에 대응하고,
    상기 방법은,
    인터럽트에 응답하여, 부분 트랜스코딩된 파일과 관련된 구성 설정을 저장하는 단계를 더 포함하고, 상기 구성 설정은,
    복수의 부분 출력 트랙 각각의 포맷 중 하나 이상, 또는
    비트 레이트 파라미터, 폭 파라미터 또는 높이 파라미터 중 하나 이상을 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  5. 제1항에 있어서,
    상기 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계는,
    부분 트랜스코딩된 파일이 저장 디바이스에 저장되어 있는지 결정하기 위해 저장 디바이스에 액세스하는 단계와;
    부분 트랜스코딩된 파일이 저장 디바이스에 저장되지 않은 경우, 부분 트랜스코딩된 파일이 이용가능하지 않다고 결정하는 단계와; 그리고
    부분 트랜스코딩된 파일이 저장 디바이스에 저장된 경우,
    트랜스코더의 현재 구성 설정이 부분 트랜스코딩된 파일과 관련된 구성 설정과 일치하는지 결정하는 단계;
    현재 구성 설정이 일치하는 것으로 결정되는 경우, 부분 트랜스코딩된 파일이 이용가능하다고 결정하는 단계; 및
    현재 구성 설정이 일치하지 않는다고 결정되는 경우,
    부분 트랜스코딩된 파일이 이용가능하지 않다고 결정하는 단계; 및
    저장 디바이스로부터 부분 트랜스코딩된 파일을 삭제하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  6. 제1항에 있어서,
    트랜스코더에 의해 비디오의 일부를 트랜스코딩하는 동안 인터럽트를 수신하는 단계와; 그리고
    인터럽트에 응답하여, 트랜스코더의 부분 출력을 포함하도록 부분 트랜스코딩된 파일을 업데이트하는 더 단계를 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  7. 제1항에 있어서,
    상기 비디오를 트랜스코딩하는 단계는,
    대응하는 원시 데이터를 획득하기 위해 비디오의 복수의 트랙 중 하나 이상을 디코딩하는 단계와; 그리고
    복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  8. 제7항에 있어서,
    상기 복수의 트랙은 적어도 하나의 오디오 트랙 및 적어도 하나의 비디오 트랙을 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  9. 제8항에 있어서,
    상기 복수의 트랙은 메타데이터 트랙을 더 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  10. 제8항에 있어서,
    상기 적어도 하나의 비디오 트랙은 복수의 키 프레임 및 복수의 비-키 프레임을 포함하고, 각각의 키 프레임 및 각각의 비-키 프레임은 대응하는 타임스탬프와 관련되고, 그리고 상기 부분 트랜스코딩된 파일과 관련된 타임스탬프는 복수의 키 프레임의 특정 키 프레임에 대응하는 것을 특징으로 하는 컴퓨터 구현 방법.
  11. 제1항에 있어서,
    상기 타임스탬프는 복수의 시간값을 포함하고, 각각의 시간값은 복수의 트랙의 개별 트랙에 대응하고, 그리고
    상기 비디오의 일부를 트랜스코딩하는 단계는,
    대응하는 원시 데이터를 획득하기 위해 복수의 시간값의 개별 시간값에서 시작하는 복수의 트랙 각각을 디코딩하는 단계와; 그리고
    복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  12. 컴퓨팅 디바이스로서,
    프로세서; 그리고
    프로세서에 결합되고 프로세서에 의해 실행될 때 프로세서로 하여금 동작들을 수행하게 하는 명령들이 저장된 메모리를 포함하고, 상기 동작들은:
    복수의 트랙을 포함하는 비디오를 획득하는 단계와;
    비디오에 대응하는 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계와;
    부분 트랜스코딩된 파일이 이용가능하다는 결정에 응답하여:
    부분 트랜스코딩된 파일과 관련된 타임스탬프를 획득하는 단계;
    트랜스코더로 비디오의 일부를 트랜스코딩하는 단계, 상기 비디오의 일부는 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작하고; 및
    출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일 및 비디오의 트랜스코딩된 일부를 결합하는 단계와; 그리고
    부분 트랜스코딩된 파일이 이용가능하지 않다는 결정에 응답하여:
    복수의 출력 트랙을 획득하기 위해 트랜스코더를 사용하여 비디오를 트랜스코딩하는 단계, 상기 트랜스코딩은 비디오의 시작부터 수행되고; 및
    출력 비디오를 획득하기 위해 복수의 출력 트랙을 결합하는 단계를 포함하는 것을 특징으로 하는 위한 컴퓨팅 디바이스.
  13. 제12항에 있어서,
    상기 메모리는 프로세서로 하여금 추가 동작을 수행하게 하는 추가 명령들을 저장하며, 상기 추가 동작은,
    트랜스코더에 의한 비디오의 트랜스코딩 동안 인터럽트를 수신하는 단계와; 그리고
    인터럽트에 응답하여, 트랜스코더의 출력을 부분 트랜스코딩된 파일로서 저장하는 단계를 포함하는 것을 특징으로 하는 컴퓨팅 디바이스.
  14. 제13항에 있어서,
    상기 트랜스코더의 출력은 복수의 부분 출력 트랙을 포함하고, 각각의 부분 출력 트랙은 비디오의 복수의 트랙의 특정 트랙에 대응하고, 그리고
    상기 동작들은,
    인터럽트에 응답하여, 부분 트랜스코딩된 파일과 관련된 구성 설정을 저장하는 단계를 더 포함하고, 상기 구성 설정은,
    복수의 부분 출력 트랙 각각의 포맷 중 하나 이상, 또는
    비트 레이트 파라미터, 폭 파라미터 또는 높이 파라미터 중 하나 이상을 포함하는 것을 특징으로 하는 컴퓨팅 디바이스.
  15. 제12항에 있어서,
    상기 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계는,
    부분 트랜스코딩된 파일이 저장 디바이스에 저장되어 있는지 결정하기 위해 저장 디바이스에 액세스하는 단계;
    부분 트랜스코딩된 파일이 저장 디바이스에 저장되지 않은 경우, 부분 트랜스코딩된 파일이 이용가능하지 않다고 결정하는 단계;
    부분 트랜스코딩된 파일이 저장 디바이스에 저장된 경우,
    트랜스코더의 현재 구성 설정이 부분 트랜스코딩된 파일과 관련된 구성 설정과 일치하는지 결정하는 단계와;
    현재 구성 설정이 일치하는 것으로 결정되는 경우, 부분 트랜스코딩된 파일이 이용가능하다고 결정하는 단계와; 그리고
    현재 구성 설정이 일치하지 않는다고 결정되는 경우, 부분 트랜스코딩된 파일이 이용가능하지 않다고 결정하는 단계를 포함하는 것을 특징으로 하는 컴퓨팅 디바이스.
  16. 제12항에 있어서,
    상기 메모리는 프로세서로 하여금 추가 동작을 수행하게 하는 추가 명령들을 저장하며, 상기 추가 동작은,
    트랜스코더에 의해 비디오의 일부를 트랜스코딩하는 동안 인터럽트를 수신하는 단계와; 그리고
    인터럽트에 응답하여, 트랜스코더의 부분 출력을 포함하도록 부분 트랜스코딩된 파일을 업데이트하는 단계를 포함하는 것을 특징으로 하는 컴퓨팅 디바이스.
  17. 제12항에 있어서,
    상기 타임스탬프는 복수의 시간값을 포함하고, 각각의 시간값은 복수의 트랙의 개별 트랙에 대응하고, 그리고
    상기 비디오의 일부를 트랜스코딩하는 단계는,
    대응하는 원시 데이터를 획득하기 위해 복수의 시간값의 개별 시간값에서 시작하는 복수의 트랙 각각을 디코딩하는 단계; 및
    복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함하는 것을 특징으로 하는 컴퓨팅 디바이스.
  18. 프로세서에 의해 실행될 때 프로세서로 하여금 동작들을 수행하게 하는 명령들이 저장된 비-일시적 컴퓨터 판독 가능 매체로서, 상기 동작들은:
    복수의 트랙을 포함하는 비디오를 획득하는 단계와;
    비디오에 대응하는 부분 트랜스코딩된 파일이 이용가능한지 여부를 결정하는 단계와;
    부분 트랜스코딩된 파일이 이용가능하다는 결정에 응답하여:
    부분 트랜스코딩된 파일과 관련된 타임스탬프를 획득하는 단계;
    트랜스코더로 비디오의 일부를 트랜스코딩하는 단계, 상기 비디오의 일부는 부분 트랜스코딩된 파일과 관된 타임스탬프에서 시작하고; 및
    출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일 및 비디오의 트랜스코딩된 일부를 결합하는 단계와; 그리고
    부분 트랜스코딩된 파일이 이용가능하지 않다는 결정에 응답하여:
    복수의 출력 트랙을 획득하기 위해 트랜스코더를 사용하여 비디오를 트랜스코딩하는 단계, 상기 트랜스코딩은 비디오의 시작부터 수행되고; 및
    출력 비디오를 획득하기 위해 복수의 출력 트랙을 결합하는 단계를 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 판독 가능 매체.
  19. 제18항에 있어서,
    상기 프로세서로 하여금 추가 동작을 수행하게 하는 추가 명령들이 저장되고, 상기 추가 동작은,
    트랜스코더에 의한 비디오의 트랜스코딩 동안 인터럽트를 수신하는 단계; 및
    인터럽트에 응답하여, 트랜스코더의 출력을 부분 트랜스코딩된 파일로서 저장하는 단계를 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 판독 가능 매체.
  20. 제18항에 있어서,
    상기 타임스탬프는 복수의 시간값을 포함하고, 각각의 시간값은 복수의 트랙의 개별 트랙에 대응하고, 그리고
    상기 비디오의 일부를 트랜스코딩하는 단계는,
    대응하는 원시 데이터를 획득하기 위해 복수의 시간값의 개별 시간값에서 시작하는 복수의 트랙 각각을 디코딩하는 단계와; 그리고
    복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 판독 가능 매체.
  21. 비디오를 트랜스코딩하기 위한 컴퓨터 구현 방법으로서, 상기 방법은,
    복수의 트랙을 포함하는 비디오를 획득하는 단계;
    비디오에 대응하는 부분 트랜스코딩된 파일을 획득하는 단계, 여기서 타임스탬프는 부분 트랜스코딩된 파일과 관련되고;
    트랜스코더로 비디오의 일부를 트랜스코딩하는 단계, 상기 비디오의 일부는 부분 트랜스코딩된 파일과 관련된 타임스탬프에서 시작하고; 및
    출력 비디오를 생성하기 위해 부분 트랜스코딩된 파일 및 비디오의 트랜스코딩된 부분을 결합하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  22. 제21항에 있어서,
    상기 출력 비디오는 비디오의 해상도보다 낮은 해상도 또는 비디오의 비트 레이트보다 낮은 비트 레이트 중 적어도 하나를 갖는 것을 특징으로 하는 컴퓨터 구현 방법.
  23. 제21항에 있어서,
    트랜스코더에 의해 비디오의 일부를 트랜스코딩하는 동안 인터럽트를 수신하는 단계; 및
    인터럽트에 응답하여, 트랜스코더의 부분 출력을 포함하도록 부분 트랜스코딩된 파일을 업데이트하는 단계를 더 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  24. 제23항에 있어서,
    상기 트랜스코더의 부분 출력은 복수의 부분 출력 트랙을 포함하고, 각각의 부분 출력 트랙은 비디오의 복수의 트랙의 개별 트랙에 대응하고,
    상기 방법은,
    인터럽트에 응답하여, 부분 트랜스코딩된 파일과 관련된 구성 설정을 저장하는 단계를 더 포함하고, 상기 구성 설정은,
    복수의 부분 출력 트랙 각각의 포맷 중 하나 이상, 또는
    비트 레이트 파라미터, 폭 파라미터 또는 높이 파라미터 중 하나 이상을 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
  25. 제21항에 있어서,
    상기 복수의 트랙은 복수의 키 프레임 및 복수의 비-키 프레임을 포함하는 적어도 하나의 비디오 트랙을 포함하고, 각각의 키 프레임 및 각각의 비-키 프레임은 대응하는 타임스탬프와 관련되고, 상기 부분 트랜스코딩된 파일과 관련된 타임스탬프는 복수의 키 프레임의 특정 키 프레임에 대응하는 것을 특징으로 하는 컴퓨터 구현 방법.
  26. 제21항에 있어서,
    상기 타임스탬프는 복수의 시간값을 포함하고, 각각의 시간값은 복수의 트랙의 개별 트랙에 대응하고, 그리고
    상기 비디오의 일부를 트랜스코딩하는 단계는,
    대응하는 원시 데이터를 획득하기 위해 복수의 시간값의 개별 시간값에서 시작하는 복수의 트랙 각각을 디코딩하는 단계; 및
    복수의 출력 트랙 중 대응하는 출력 트랙을 획득하기 위해 복수의 트랙 중 디코딩된 하나 이상에 대한 원시 데이터를 인코딩하는 단계를 포함하는 것을 특징으로 하는 컴퓨터 구현 방법.
KR1020217038327A 2019-09-23 2019-09-23 인터럽트 가능한 비디오 트랜스코딩 KR102612528B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020237042008A KR20230171479A (ko) 2019-09-23 2019-09-23 인터럽트 가능한 비디오 트랜스코딩

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2019/052516 WO2021061098A1 (en) 2019-09-23 2019-09-23 Interruptible video transcoding

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020237042008A Division KR20230171479A (ko) 2019-09-23 2019-09-23 인터럽트 가능한 비디오 트랜스코딩

Publications (2)

Publication Number Publication Date
KR20220006546A true KR20220006546A (ko) 2022-01-17
KR102612528B1 KR102612528B1 (ko) 2023-12-12

Family

ID=68165734

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237042008A KR20230171479A (ko) 2019-09-23 2019-09-23 인터럽트 가능한 비디오 트랜스코딩
KR1020217038327A KR102612528B1 (ko) 2019-09-23 2019-09-23 인터럽트 가능한 비디오 트랜스코딩

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020237042008A KR20230171479A (ko) 2019-09-23 2019-09-23 인터럽트 가능한 비디오 트랜스코딩

Country Status (6)

Country Link
US (2) US11290756B2 (ko)
EP (1) EP3818719B1 (ko)
JP (2) JP7151004B2 (ko)
KR (2) KR20230171479A (ko)
CN (2) CN116095336A (ko)
WO (1) WO2021061098A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11743478B2 (en) * 2021-06-15 2023-08-29 International Business Machines Corporation Video stream transcoding with reduced latency and memory transfer
CN113473143B (zh) * 2021-06-30 2022-12-16 中央广播电视总台 一种第三代音视频标准(avs3)转码支持断点续转的方法
CN113873176B (zh) * 2021-10-27 2024-03-08 北京奇艺世纪科技有限公司 一种媒体文件合并方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060132756A (ko) * 2004-05-03 2006-12-22 마이크로소프트 코포레이션 백그라운드 트랜스코딩
KR20110057446A (ko) * 2009-11-24 2011-06-01 한국전자통신연구원 미디어 스트리밍 서버와 이 서버의 미디어 데이터 관리 방법
US8855189B1 (en) * 2010-04-12 2014-10-07 UV Networks, Inc. Multi-stream transcoding system with cache memory management
KR20180113584A (ko) * 2016-02-17 2018-10-16 노키아 테크놀로지스 오와이 비디오 코딩 및 디코딩을 위한 장치, 방법 및 컴퓨터 프로그램

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001094935A (ja) * 1999-09-22 2001-04-06 Nec Corp トランスコーダ及び録画再生システム並びにそれに用いる録画再生方法
US7409094B2 (en) * 2001-05-04 2008-08-05 Hewlett-Packard Development Company, L.P. Methods and systems for packetizing encoded data
JP2006135705A (ja) 2004-11-08 2006-05-25 Hitachi Ltd 記録再生方法及び記録再生装置
US7595743B1 (en) * 2005-10-26 2009-09-29 Lsi Corporation System and method for reducing storage requirements for content adaptive binary arithmetic coding
JP4551370B2 (ja) * 2006-07-18 2010-09-29 株式会社日立製作所 記録再生装置及び記録再生方法
US8693553B2 (en) * 2007-12-28 2014-04-08 Nokia Corporation Methods, apparatuses, and computer program products for adaptive synchronized decoding of digital video
CN101459848B (zh) * 2008-12-26 2010-11-10 西安交通大学 一种分布式多格式数字视频转码结构设计方法
US9691430B2 (en) * 2010-04-01 2017-06-27 Microsoft Technology Licensing, Llc Opportunistic frame caching
JP5703532B2 (ja) 2011-03-29 2015-04-22 オンキヨー株式会社 トランスコード装置
CN103583040B (zh) 2011-04-15 2017-03-15 欧朋软件爱尔兰有限责任公司 实时视频检测器
US9271003B2 (en) * 2011-04-15 2016-02-23 Opera Software Ireland Limited Real-time audio or video transcoding
US9137551B2 (en) * 2011-08-16 2015-09-15 Vantrix Corporation Dynamic bit rate adaptation over bandwidth varying connection
US10182219B2 (en) * 2013-04-25 2019-01-15 Time Warner Cable Enterprises Llc Space efficiency and management of content
US9319753B2 (en) 2013-05-09 2016-04-19 Broadcom Corporation Seamless trick-mode with decreased latency for live transcode streaming
US8955027B1 (en) 2013-11-21 2015-02-10 Google Inc. Transcoding media streams using subchunking
CN108632643A (zh) * 2017-03-20 2018-10-09 天脉聚源(北京)科技有限公司 一种视频文件转码的方法和系统
CN108174226B (zh) * 2017-12-19 2020-11-10 平安科技(深圳)有限公司 直播视频的转码装置、方法及计算机可读存储介质
CN110213598B (zh) * 2018-05-31 2021-10-15 腾讯科技(深圳)有限公司 一种视频转码系统、方法及相关产品

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060132756A (ko) * 2004-05-03 2006-12-22 마이크로소프트 코포레이션 백그라운드 트랜스코딩
KR20110057446A (ko) * 2009-11-24 2011-06-01 한국전자통신연구원 미디어 스트리밍 서버와 이 서버의 미디어 데이터 관리 방법
US8855189B1 (en) * 2010-04-12 2014-10-07 UV Networks, Inc. Multi-stream transcoding system with cache memory management
KR20180113584A (ko) * 2016-02-17 2018-10-16 노키아 테크놀로지스 오와이 비디오 코딩 및 디코딩을 위한 장치, 방법 및 컴퓨터 프로그램

Also Published As

Publication number Publication date
CN116095336A (zh) 2023-05-09
EP3818719B1 (en) 2024-05-01
WO2021061098A1 (en) 2021-04-01
US11290756B2 (en) 2022-03-29
US11800160B2 (en) 2023-10-24
CN113906764A (zh) 2022-01-07
KR20230171479A (ko) 2023-12-20
EP3818719A1 (en) 2021-05-12
KR102612528B1 (ko) 2023-12-12
JP2022539299A (ja) 2022-09-08
US20220191564A1 (en) 2022-06-16
JP7151004B2 (ja) 2022-10-11
US20210250626A1 (en) 2021-08-12
CN113906764B (zh) 2023-01-31
JP2022188147A (ja) 2022-12-20

Similar Documents

Publication Publication Date Title
US11800160B2 (en) Interruptible video transcoding
JP7228682B2 (ja) 動画解析のためのゲーティングモデル
US20190342241A1 (en) Systems and methods for manipulating and/or concatenating videos
JP2024073439A (ja) 選択的な動きの描画を伴う画像表示
US11528523B2 (en) Method and system to share a snapshot extracted from a video transmission
US9407823B2 (en) Handling video frames compromised by camera motion
US9877056B1 (en) Compressed media with still images selected from a video stream
US20230086804A1 (en) Selectively identifying data based on motion data from a digital video to provide as input to an image processing model
CN111343503B (zh) 视频的转码方法、装置、电子设备及存储介质
CN113225585A (zh) 一种视频清晰度的切换方法、装置、电子设备以及存储介质
CN113973224B (zh) 媒体信息的传输方法、计算设备及存储介质
US20200169766A1 (en) Method and apparatus for morphing multiple video streams into single video stream
US20160117796A1 (en) Content Adaptive Decoder Quality Management
CN115695850A (zh) 视频数据处理方法、装置、电子设备和介质
KR20240037557A (ko) 비디오 저장공간 절약 방법, 컴퓨터 장치, 및 컴퓨터 프로그램
CN113676777A (zh) 数据处理方法及装置

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