https://support.google.com/youtube/answer/15424877?hl=ko
<aside> ⚙
2024년 10월 15일 기준, 3분 미만 + 세로형 동영상인 경우 쇼츠로 판단됩니다.
</aside>
영상 길이 확인
쇼츠는 대부분 영상 길이가 1분 미만입니다.
data = {
"kind": "youtube#video",
"etag": etag,
"id": string,
"contentDetails": {
"duration": string,
...
},
...
}
data.contentDetails.duration <- 재생 시간
이때 재생 시간은 PT**H**M**S 로 옵니다. 적절히 parsing 해서
하지만 이로 검증할 수 없는데, 아래의 판별법을 사용하는 것이 좋습니다.
2024년 10월 15일 이후 동영상은 3분 이하로 바뀌었는데, 안정성을 위하여 1분으로 설정합시다.
태그 확인
#shorts
라는 태그를 가지고 있습니다.#shorts
태그를 붙이지 않더라도 쇼츠인 경우가 종종 있습니다. 골치아픕니다…동영상의 실제 크기 확인
<aside> ⚠️
fileDetails
객체는 파일의 해상도, 길이, 오디오 및 동영상 코덱, 스트림 비트 전송률 등을 비롯하여 YouTube에 업로드된 동영상 파일에 관한 정보를 캡슐화합니다. 이 데이터는 동영상 소유자만 검색할 수 있습니다.
</aside>
yt-dlp
사용
https://github.com/yt-dlp/yt-dlp
누군가가 잘 만들어놨습니다. 메타데이터를 가져와서 받을 수 있는 동영상의 크기를 알려줍니다.
sudo wget <https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp> -O /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
이후 yt-dlp -F {{ 유튜브 주소 || 동영상 id }}
명령어를 통해 동영상의 레이아웃을 가져옵니다.
이때 쇼츠 형식은 1:1 미만, 즉 가로/세로
의 비율이 1 이하면 쇼츠로 판단합니다. 시간도 3분이에요!
// 일반적인 동영상의 레이아웃 - 대부분 16:9 이상이다.
303 webm 1920x1080 60 │ 281.25MiB 2878k https │ vp9 2878k video only 1080p60, webm_dash
// 쇼츠 형식의 레이아웃 - 대부분 9:16 비율
616 mp4 1080x1920 30 │ ~ 24.47MiB 5703k m3u8 │ vp09.00.40.08 5703k video only Premium
따라서 지금은 동영상 길이 + 제목에 #shorts
태그를 확인하는 것이 베스트입니다.
2025.02.19 추가
yt-dlp를 이용하면 태그 확인하지 않고 가져올 수 있습니다. request 시간이 조금 있지만 가장 정확한 방법입니다.
가로/세로 비율이 1 이하이면서 3분 이하이면 shorts 영상이라고 판단할 수 있습니다.