트랜스코딩 후 오디오가 밀리는 현상은 생성된 오디오 타임라인이 더 이상 비디오와 정확히 같은 속도나 타임스탬프 경계로 진행되지 않을 때 발생합니다.
Direct Play에서는 클라이언트가 원본 컨테이너와 기본 타이밍 지침을 그대로 사용하므로 문제가 드러나지 않을 수 있습니다. 반면 트랜스코딩은 하나 또는 두 스트림을 디코딩하고, 리샘플링하고, 다시 인코딩하고, 타임스탬프를 지정하고, 세그먼트로 나누고, 다시 멀티플렉싱합니다. 먼저 오류가 일정한 오프셋인지, 점차 커지는 드리프트인지, 탐색이나 재생 재개 후 발생하는 점프인지 판단하세요. 각 패턴은 미디어 파이프라인의 서로 다른 부분을 가리킵니다.
트랜스코더를 변경하기 전에 동기화 오류를 분류하세요
탐색하지 않고 처음부터 재생하면서 시작, 중간, 끝 부분의 오프셋을 기록하세요. 배경 음악으로 추정하지 말고, 화면에서 충격음이 보이거나 말소리의 자음이 명확한 장면을 사용하세요.
일정한 오프셋이 계속 유지된다면 초기 타임스탬프, 편집 목록, 수신기 지연 또는 클라이언트 설정 문제일 가능성이 있습니다. 간격이 꾸준히 커진다면 클록 속도 불일치, 프레임 레이트 해석, 오디오 시간 조정 또는 리샘플링 문제일 수 있습니다. 탐색이나 재생 재개 후 갑자기 점프한다면 세그먼트와 재시작 타임스탬프를 의심해야 합니다.
자막을 끈 상태에서, 클라이언트의 수동 오디오 지연 설정을 0으로 설정하고 측정을 반복하세요. 움직이는 드리프트를 하나의 고정 오프셋으로 보정하면 특정 타임스탬프에서만 증상이 가려질 뿐입니다.
원본 파일이 동기화되어 있는지 확인하세요
신뢰할 수 있는 데스크톱 플레이어에서 소스를 로컬로 재생하고, 호환되는 미디어 클라이언트를 통해 Direct Play로 재생하세요. 트랜스코딩 중 드리프트가 발생하는 동일한 타임스탬프 범위를 테스트하세요.
소스도 로컬에서 드리프트한다면 서버를 변경하기 전에 미디어 파일을 검사하거나 복구하세요. 소스가 트랜스코딩 경로를 제외한 모든 환경에서 동기화 상태를 유지한다면 파일을 보존하고 미디어 서버의 재생 결정, FFmpeg 명령, 클라이언트 버전을 수집하세요.
코덱이 같고 타임라인이 정상인 두 번째 파일을 대조용으로 사용하세요. 문제가 있는 콘텐츠가 하나뿐이라면 소스 타임스탬프나 컨테이너 메타데이터를 가리킵니다. 한 클라이언트에서 여러 콘텐츠가 실패한다면 공통 트랜스코더, 세그먼터 또는 플레이어 경로를 의심할 수 있습니다.
실제로 어떤 스트림이 변환되는지 확인하세요
세션이 비디오 스트림 복사와 함께 오디오만 트랜스코딩하는지, 코덱 변환 없이 리먹싱만 수행하는지, 또는 비디오와 오디오를 모두 트랜스코딩하는지 확인하세요. 각 경로는 서로 다른 타이밍 경계를 만듭니다.
오디오만 변환하는 경우에도 탐색 후 동기화가 어긋날 수 있습니다. Jellyfin 이슈에서는 비디오 스트림은 복사한 채 E-AC-3 또는 DTS를 AAC로 변환할 때 탐색 후 오디오 동기화가 어긋나는 현상이 재현되었습니다.
비디오, 화질, 자막은 그대로 유지하면서 클라이언트가 지원하는 오디오 트랙으로 전환하세요. 세션이 Direct Play로 바뀌고 드리프트가 사라진다면 비디오 인코딩 성능이 아니라 오디오 타임스탬프, 리샘플링, 채널 변환 또는 생성된 전송 컨테이너에 집중하세요.
ZimaSpace의 오디오 트랜스코딩 파이프라인 개요에서 이 스트림 수준 테스트를 해석하는 데 필요한 관련 메커니즘을 확인할 수 있습니다.
처음부터 재생할 때, 탐색 후, 재개 후 재생을 테스트하세요
같은 클라이언트와 파일로 세 가지 제어 세션을 실행하세요. 0초부터 중단 없이 재생하고, 버퍼 영역을 벗어난 위치로 탐색하고, 저장된 위치에서 재개하세요. 동기화가 정확히 언제 바뀌는지 기록하세요.
트랜스코딩된 4K 재생이 처음부터는 동기화된 상태를 유지하지만 스크럽, 챕터 변경 또는 재개 후 밀리는 현상이 보고된 바 있습니다. 이때 구분되는 조건은 미디어를 디코딩할 수 있는지 여부가 아니라 트랜스코딩 중 발생한 타임라인 변경입니다.
또 다른 Jellyfin 보고서에서는 원본 파일 자체가 정상이어도 재개할 때 동기화가 어긋나는 현상이 나타났습니다. 이 패턴은 라이브러리 전체 리먹스보다 먼저 재생 재개 처리로 문제 범위를 좁힐 수 있습니다.
탐색이나 재개에서만 문제가 발생한다면 애플리케이션에서 해당 옵션을 제공하는 경우 다른 전송 컨테이너나 클라이언트 플레이어를 테스트하세요. 중단 없는 재생은 대조 조건으로 유지하여 결과가 타임스탬프 재시작 동작 때문인지 확인할 수 있게 하세요.
소스 타이밍, 프레임 레이트 및 오디오 시간 조정 메타데이터를 검사하세요
미디어 분석 도구를 사용해 비디오 프레임 레이트와 타임 베이스, 오디오 샘플 레이트, 스트림 시작 시간, 재생 시간, 음수 타임스탬프, 편집 목록, 트랙 지연 또는 시간 조정 값을 기록하세요. 첫 번째와 마지막 표시 타임스탬프를 비교하세요.
일부 Matroska 트랙에는 프레임 레이트가 다른 소스의 오디오에 맞추기 위해 선형 타이밍 조정이 의도적으로 포함되어 있습니다. Jellyfin 이슈에서는 선형적으로 드리프트하는 오디오 트랙이 원본 컨테이너에서는 정상적으로 사용할 수 있지만 트랜스코딩 중 잘못 처리되는 사례를 설명합니다.
오디오 재생 시간이 비디오 재생 시간과 비례하여 다르다면, 오디오를 한 번 명시적으로 리샘플링하거나 시간 조정한 교정 테스트 사본을 만든 다음 깨끗한 타임스탬프로 다시 멀티플렉싱하세요. 원본은 보존하고, 일괄 복구를 적용하기 전에 하나의 콘텐츠만 테스트하세요.
HLS 또는 fMP4 세그먼트의 타임스탬프 동작을 확인하세요
트랜스코더 명령에서 탐색 플래그, 타임스탬프 복사, 음수 타임스탬프 처리, HLS 세그먼트 유형, 세그먼트 길이, 그리고 클라이언트가 버퍼를 벗어난 위치로 이동한 후 새로운 트랜스코딩 프로세스가 시작되는지 확인하세요.
Jellyfin의 타임스탬프 조사에서는 부정확한 탐색 동작으로 인해 HLS 스트림이 원본 타임라인과 다른 오프셋에서 다시 시작될 수 있음이 확인되었습니다. 핵심 문제는 트랜스코딩된 타임스탬프의 불일치였으며, 이로 인해 클라이언트가 렌더링하는 타이밍에도 영향을 주었습니다.
관련 없는 버전의 명령줄 플래그를 운영 컨테이너에 그대로 복사하지 마세요. 먼저 지원되는 경로 안에서 서버와 클라이언트를 업데이트하거나 이전 버전으로 되돌리고, 다시 생성할 수 있는 트랜스코딩 세그먼트만 삭제한 다음, 애플리케이션에서 선택할 수 있다면 MPEG-TS, fMP4 또는 네이티브 플레이어 동작을 비교하세요.
가장 작은 수정 사항을 적용하고 전체 재생 시간을 검증하세요
테스트를 통해 확인된 경로를 사용하세요. 호환되는 오디오 트랙이나 클라이언트를 선택하고, 문제가 발생하는 탐색 또는 재개 경로를 피하고, 지원되는 스트리밍 컨테이너로 변경하고, 미디어 서버 빌드를 업데이트하거나 특정 버전으로 고정하거나, 타이밍 메타데이터가 손상된 소스 하나를 정규화하세요.
텔레비전 앱 하나에서 드리프트가 발생한다고 모든 영화를 다시 인코딩하지 마세요. 클라이언트별 오류는 클라이언트 또는 재생 프로필 계층에서 수정해야 하며, 소스별 선형 드리프트는 해당 파일의 타이밍 복구에 맡겨야 합니다.
복구한 경로를 처음부터 끝까지 검증한 다음, 원래 문제가 발생한 지점 근처에서 다시 탐색과 재개를 수행하세요. 전체 재생 시간 동안 오프셋이 안정적으로 유지되고, 생성된 세그먼트가 예상 타임라인을 보존하며, 클라이언트를 재시작하고 서버를 다시 생성한 후에도 동일한 설정이 유지될 때에만 문제가 해결된 것입니다.
지원 및 팁
더 읽어보기

Plex가 다른 Docker 컨테이너와 GPU를 공유할 수 있나요?
Plex와 다른 컨테이너가 동일한 GPU에 함께 액세스할 수 있는 경우가 많지만, 드라이버 지원, 디바이스 매핑, 비디오 엔진 부하, 메모리, 복구 동작을 테스트해야 합니다.

Plex 오류가 클라이언트에서 발생한 것인지 서버에서 발생한 것인지 확인하는 방법
다른 클라이언트에서 동일한 항목을 재현하고, 세션 경로를 비교한 다음, 범위 분석을 통해 장애가 실제로 발생한 위치를 확인한 후에만 서버 증거를 수집하세요.

Plex 캐시 및 트랜스코딩 임시 저장소 구성 방법
영구 Plex 상태는 보호하면서 트랜스코딩 임시 파일은 적합한 로컬 저장소에 배치한 다음, 정리 상태와 여유 공간 및 재시작 동작을 확인하세요.

