2009-03-13 4 views
27

정말 간단한 문제 인 것처럼 보였습니다.하지만 예상보다 훨씬 어려웠습니다. 여기에 문제가 있습니다 :이미지 시퀀스를 투명도가있는 비디오로 바꿉니다.

번호가 매겨진 프레임 (Maya의 출력, 그 가치는 무엇인가)으로 구성된 상당히 큰 이미지 시퀀스가 ​​있습니다. 이미지는 현재 Targa (.tga) 형식이지만 이미지를 PNG 또는 기타 임의 형식으로 변환 할 수 있습니다. 중요한 것은 알파 채널이 있다는 것입니다.

내가하고 싶은 일은 프로그래밍 방식으로 비디오 클립으로 바꾸는 것입니다. 형식은 중요하지 않지만 무손실이고 알파 채널이 있어야합니다. Quicktime 컨테이너의 비 압축 비디오가 이상적 일 것입니다.

초기 생각은 ffmpeg 이었지만 대부분의 시간을 낭비하고 나면 알파 채널을 전혀 지원하지 않는 것 같습니다. 내가 뭔가를 놓치고 있거나 밑에있는 libavcodec이 그것을하지 않는다.

여기에 올바른 방법이 있습니까? ffmpeg와 같은 명령 줄 도구는 좋지만 Windows에서 실행되고 스크립트에서 호출 할 수있는 모든 솔루션이 좋을 것입니다.

참고 : 비디오에 알파 채널이 있다는 것은 흔히 드문 것이 아니며, 다른 비디오 클립이나 정지 이미지 위에 합성하려는 경우 정말 유용합니다. QuickTime Animation 코덱과 Sorenson Video 3 코덱은 압축되지 않은 비디오를 알고있는 한 모두 투명성을 지원합니다. H.264도 그렇다고 들었습니다. 우리가 실제로 말하고있는 것은 모두 32 비트 색 깊이이며, 꽤 광범위하게 지원됩니다. Quicktime .mov 파일과 Windows .avi 파일 모두 처리 할 수 ​​있습니다.

Quicktime Pro는 이미지 시퀀스를 32 비트 .mov 파일로 변환하는 것보다 행복합니다. 내보내기를 실행하고 색상 수를 "수백만 색상 +"로 변경하고, 애니메이션 코덱을 선택하고, 최대 100 개의 품질로 크랭크를 만들고, 거기에 알파 채널이있는 무손실 압축 비디오가 있습니다. 코덱 이후 거의 모든 곳에서 재생됩니다. 버전 1.0 이후 Quicktime에 포함되었습니다. 문제는, Quicktime Pro는 (적어도 Windows에서는) 어떤 종류의 명령 행 인터페이스도 갖고 있지 않다는 것입니다. ffmpeg는 Quicktime Animation 코덱 (qtrle이라고 함)을 사용하여 인코딩을 지원하지만 24 비트의 비트 심도 만 지원합니다.

알파 채널을 지원하는 비디오 형식을 찾지 못하는 문제가 있습니다. 퀵타임 애니메이션은 이상적이지만 비 압축 비디오조차도 효과가 있습니다. 문제는 그것을 지원하는 도구를 찾는 것입니다.

+1

알파 채널에 대해 어떻게 하시겠습니까? 비디오는 장소에서 투명해야합니까? (나는 그것을 지원하는 형식을 모른다) 또는 이전 프레임이 보여야 하는가? – Greg

+0

로버그 (RoBerg)에 동의합니다. 저는 비디오 형식을 사용하지 않았습니다. 너는 너의 것을 굴려야 할지도 모른다. –

+0

좋아, 그냥 투명해야합니다, 그래서 당신이 배경 이미지에 겹쳐 있다면 당신은 배경을 볼 수 있습니다. 질문에 대한 자세한 정보를 추가했습니다. –

답변

-1

코디,

당신은 Quicktime SDK for Windows를 사용하여 자신의 명령 줄 유틸리티를 쓸 수있다, 나는 더 높은 수준의 퀵타임 COM API를 고수하고 당신이 정말로에있는 경우에만 C-API를에 탐구에게 추천 할 것입니다.

-Nick

25

예 ffmpeg는 확실히 비디오 파일에서 알파 채널을 지원합니다. ffmpeg의 모든 코덱이 알파를 지원하는 것 같지 않습니다. .MOV 파일의 모션 PNG는 알파에 대한 하나의 좋은 조합입니다.

알파 시도와 비디오에 알파/수입 이미지를 인코딩하려면 ffmpeg -i %d.png -vcodec png z.mov

퀵타임가 재생됩니다. 나는 'export2'라는 디렉토리에 수출 ffmpeg -i z.mov -f image2 export2\%d.png

참고 :

알파 시도와 이미지에 알파와 비디오를 내보내/디코딩합니다. 거기에 % d 부분을 남겨 두십시오.이 명령은 Windows 시스템에서있는 그대로 작동합니다. Linux/Mac 사용자는 따옴표를 추가하고 평소와 같이/for/some를 바꿀 필요가 있습니다.

12

나는이 주제에 조금 오래 알고 있지만, 어쨌든 게시하고있다.

FFMPEG (Quicktime Animation (RLE) 또는 FFVHUFF/HUFFYUV)

  • 는 FFmpeg -i yoursequence % d.png -vcodec qtrle movie_with_alpha.mov
  • 는 FFmpeg -i yoursequence % d.png -vcodec ffvhuff movie_with_alpha.avi
  • 는 FFmpeg -i yoursequence % d.png -vcodec huffyuv movie_with_alpha.avi

투명도 (알파 채널)가 유지 된 비디오 파일이 제공됩니다.

On2-VP6 변형 (아직 WebM-VP8 아님)으로 알파를 처리 할 수 ​​있지만 코덱이 없습니다.

이것은 또한 작동합니다. -는 FFmpeg -i yoursequence % d.png -vcodec movie_with_alpha.mov이 질문에 도달과 좌절의 벽에 머리를 두드리는 웹 개발자를위한

+0

RLE와 YUV가 너무 커서 거대한 파일을 생성합니다. FLV 용 VP6은 훨씬 작은 파일을 생성합니다. 너무 나쁜 무료 vp6a 인코더가 없습니다. 사실 내가 찾은 유일한 VP6 인코더는 Adobe의 Media Encoder입니다. – rustyx

+0

RLE와 YUV는 거의 중간 편집 가능한 파일이나 방송사의 소스 파일로만 사용됩니다. 편집을 위해 작업 한 다음 작업이 완료되고 게시 할 준비가되면 사용 가능한 더 작은 형식 (예 : FLV)으로 변환 할 수 있습니다. – satoc

3

를 PNG로 ... transparent WebM video을 만들 수 있지만, 지금이 순간 당신은 수도 소스에서 ffmpeg와 필요한 라이브러리를 컴파일해야합니다.

렌더링 된 블렌더 비디오를 웹 사이트에 표시하고 싶지만 투명성을 유지하려고합니다. 첫 번째 단계는 블렌더 출력을 개별 PNG 파일로 렌더링하는 것입니다. 그 후, 나는 한동안 PNG 파일을 하나의 비디오로 변환하기 위해 ffmpeg를 강요하려고 노력했다. 파일 이름 input9999.png 통해 input0000.png

ffmpeg -i input%04d.png output.webm 

이 명령은 부하 모든 PNG 파일과 비디오로 변 : 기본 명령은 간단하다. 투명성은 즉시 사라졌다. 내가는 FFmpeg 실현 출력을 통해 빗질은 유용하게 불투명 형식을 선택했다 :

Incompatible pixel format 'yuva420p' for codec 'flv', auto-selecting format 'yuv420p'

을이 시점에서 내가 처음부터는 FFmpeg을 다시 컴파일해야 할 수도 있습니다 실현했다. 나는 다른 몇 가지 도구로 고생했지만 궁극적으로 ffmpeg로 끝났습니다. 최신 소스에서 libvbx와 ffmpeg를 컴파일 한 후에, 모든 것이 매력적이었습니다.

관련 문제