작성자 |
|
||
---|---|---|---|
작성일 | 2025-07-03 22:29:02 KST | 조회 | 27 |
제목 |
AI에게 ffmpeg과 gif에 대해 속성과외 받은 썰
|
요즘 심심해서 투슬리스 움짤이나 따볼 생각으로 ffmpeg을 사용해봤음
ffmpeg -ss 00:29:28.149 -i "input.mkv" -vf "trim=start_frame=0:end_frame=66,setpts=PTS-STARTPTS,crop=1600:1600:1352:280,scale=200:-1:flags=lanczos" -loop 0 "기본.gif"
무슨 박물관에 전시된 최초의 컬러tv에서나 볼 수 있는 처참한 결과물이 나옴
어둡고 칙칙하고 노이즈가 잔뜩 껴있음
AI한테 물어보니 원본 영상의 밝기와 색상 범위가 훨씬 넓기 때문에 gif로 바로 변환하면 색상 왜곡이 심하다고 함
HDR(bt2020) 영상을 SDR(bt709) gif로 변환하기 위해 색상 공간 변환 필터를 적용해봄
ffmpeg -ss 00:29:28.149 -i "input.mkv" -vf "trim=start_frame=0:end_frame=66,setpts=PTS-STARTPTS,zscale=in_range=limited:out_range=full:matrixin=bt2020nc:matrix=bt709:primariesin=9:primaries=1:transferin=14:transfer=1,crop=1600:1600:1352:280,scale=200:-1:flags=lanczos" -loop 0 "색상공간변환.gif"
전보단 훨씬 좋아졌는데 여전히 칙칙하고 노이즈가 껴있음
AI한테 다시 물어보니 GIF 특성상 256가지 색상밖에 표현하지 못하기 때문에 최적의 색상 팔레트를 생성해서 적용할 필요가 있다고 함
팔레트 생성 필터인 palettegen과 팔레트 적용 필터인 paletteuse를 기본값으로 적용해봄
ffmpeg -ss 00:29:28.149 -i "input.mkv" -vf "trim=start_frame=0:end_frame=66,setpts=PTS-STARTPTS,zscale=in_range=limited:out_range=full:matrixin=bt2020nc:matrix=bt709:primariesin=9:primaries=1:transferin=14:transfer=1,crop=1600:1600:1352:280,scale=200:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 "색상공간변환_팔레트.gif"
노이즈가 없어져서 이미지가 많이 부드러워졌지만 마음에 안들었던 부분이
1. 중간에 투슬리스 입천장에 빵꾸나있음
2. 투슬리스 눈 색깔이 배경 색깔이랑 구분이 안됨
3. 확대해보면 픽셀 깨진듯이 보임
여기선 최적의 색상 팔레트를 적용하기 위해 이거저거 많이 적용했음
1. stats_mode=single과 new=1옵션의 조합으로 매 프레임마다 팔레트를 생성해서 적용
2. 투명 색상 사용하지 않도록 해서 255색만 사용 가능한 것을 256색 사용 가능하도록 함(reserve_transparent=0)
3. 디더링 알고리즘을 기본값인 sierra2_4a에서 floyd_steinberg로 변경
ffmpeg -ss 00:29:28.149 -i "input.mkv" -vf "trim=start_frame=0:end_frame=66,setpts=PTS-STARTPTS,zscale=in_range=limited:out_range=full:matrixin=bt2020nc:matrix=bt709:primariesin=9:primaries=1:transferin=14:transfer=1,crop=1600:1600:1352:280,scale=200:-1:flags=lanczos,split[s0][s1];[s0]palettegen=stats_mode=single:reserve_transparent=0[p];[s1][p]paletteuse=new=1:dither=floyd_steinberg" -loop 0 "색상공간변환_팔레트_옵션최적화.gif"
원본 프레임과 비교해봤을때 조금 어둡지만 가장 정확한 결과물이 나왔음
100x100으로 사용하면 가시성이 많이 떨어질거라 생각해서 밝기와 채도를 올림
ffmpeg -ss 00:29:28.149 -i "input.mkv" -vf "trim=start_frame=0:end_frame=66,setpts=PTS-STARTPTS,zscale=in_range=limited:out_range=full:matrixin=bt2020nc:matrix=bt709:primariesin=9:primaries=1:transferin=14:transfer=1,crop=1600:1600:1352:280,scale=200:-1:flags=lanczos,curves=preset=lighter,hue=s=1.2,split[s0][s1];[s0]palettegen=stats_mode=single:reserve_transparent=0[p];[s1][p]paletteuse=new=1:dither=floyd_steinberg" -loop 0 "최종.gif"
이렇게 최종 결과물을 얻어냄
마지막 비교용으로 올려보는 원본에서 png로 뜯은 프레임과 처음, 최종 결과물
© PlayXP Inc. All Rights Reserved.