
초당 25프레임의 38초 비디오 트랙에서 개별 프레임이 되도록 만들어진 950개의 PNG 파일이 있습니다. 이러한 종류의 경우 일반적으로 파일 이름은 시퀀스 번호를 제외하고 동일합니다.
이 일련의 PNG 이미지에서 광범위하게 지원되는 형식(모든 기준을 충족할 수 있는 경우 이상적으로는 WebM 또는 재생을 위해 최신 브라우저에서 지원하는 코덱을 사용하는 MPEG-4)의 컨테이너를 생성하고 싶습니다. 가지다. 문제는 색상이 이동하고 디코딩된 비디오의 배경색이 더 이상 PNG 이미지의 배경색에서 샘플링된 동일한 RGB 삼중선과 일치하지 않는다는 것입니다. 이로 인해 비디오가 포함된 HTML 페이지의 의도한 배경에서 비디오가 튀어나오게 됩니다.
나는 간단한 것을 시도했다:
ffmpeg -f image2 -i image%03d.png output.webm
실제로 WebM 컨테이너에 담긴 25fps VP9 비디오 트랙을 제공했습니다.
PNG 이미지는 단색 배경과 전경에 애니메이션이 적용되는 단순한 모양을 갖춘 애니메이션 스타일입니다. 색상이 있는 것 같습니다.태그가 지정되지 않은(Adobe Bridge가 나에게 말한 내용은 내장된 색상 프로필이나 그에 대한 참조가 없음을 의미한다고 가정합니다.) 위 시도의 문제점은 컨테이너가 Chrome에서 재생되더라도 RGB 삼중항을 사용하여 PNG 이미지에서 샘플링된 배경색이 #ED4D56
재생 중인 비디오에 나타나는 배경색과 인식적으로 일치하지 않는다는 것입니다.
이는 RGB에서 YUV(인코딩), RGB(재생) 색상 변환의 피할 수 없는 부작용입니까? 이를 완화할 수 있는 방법이 있나요? 나는 비디오 트랙의 프레임이 RGB를 사용하여 인코딩되어야 한다고 주장하지 않습니다. 이러한 프레임을 재생하는 최신 브라우저가 디코딩 및 표시할 때 동일한(무시할 수 있는 오류 한계 내에서) RGB 삼중항을 생성하는 한 YUV는 괜찮다고 생각합니다. 프레임.
제 질문은 어떤 명령줄을 사용하여 ffmpeg
이 문제를 완화할 수 있느냐는 것입니다. 비디오 코덱, 픽셀 형식을 전환하고 ffmpeg가 있는 경우 색상 관리를 활성화하는 등의 작업을 수행할 수 있습니다.
답변1
최근에 매우 유사한 작업이 있었는데 아직 완벽한 해결책이 없다고 말하고 싶습니다(2018년 10월 현재). 이는 실제로 낮은 정밀도의 RGB에서 YUV로의 RGB 색상 변환의 부작용입니다. 일부 "무손실" 코덱 변형(예: libvpx-vp9 -lossless
)도 YUV 색상 공간으로 인해 왜곡된 색상을 생성합니다.
정확하지 않은 색상이 허용되는 경우libvpx코덱은 꽤 좋은 일을 할 수 있습니다:
ffmpeg -r 25 -i image%03d.png -c:v libvpx -crf 4 -b:v 0 output.webm
이러한 설정을 사용하면 색상 변화가 미미하거나 일부 프레임 세트의 정확한 색상이 생성됩니다. VPx 코덱은 널리 지원되며(IE 및 Safari를 제외한 모든 주요 브라우저) 적절한 파일 크기를 생성합니다.
정확한 색상이 엄격하게 요구되는 경우 색상 공간 변환을 피해야 합니다. 내가 생각해낸 유일한 크로스 브라우저 솔루션은 다음을 사용하는 것입니다.애니메이션 png이미지.
ffmpeg
apng에 대한 매우 기본적인 지원만 있으므로 다음과 같은 다른 도구를 사용하는 것이 좋습니다apngasm
.apngasm output.png image001.png 1 25
IE와 Edge를 제외한 모든 곳에서 작동합니다(여기서는 정적 첫 번째 프레임으로 대체됩니다). 파일 크기는 엄청나지만 이는 실제 무손실 인코딩의 가격입니다.
- 그만큼libx264rgb코덱도 언급해야 합니다 - 사용~ 할 것이다 브라우저가 지원하는 경우 정확한 RGB 색상을 인코딩하는 올바른 방법입니다.