이전에 FFMPEG를 이용해 URL을 받아서 미리 영상을 잘라낸 뒤

원하는 부분만 다운받는 방법을 찾아봤었는데

유튜브의 경우는 조금 더 복잡해서 따로 기록해둔다

 

우선 이전에 사용했던 yt-dlp를 이용해 원하는 유튜브 영상의 정보를 가져온다

yt-dlp -g [영상 링크]

 

그러면 주소값이 두개가 출력되는걸 볼 수 있다

예시

왜 두개인가 하면 영상파일과 음성파일이 분리되어 있기 때문이다

위에가 영상 링크이고 아래가 음성 링크이다

 

이보다 더 자세하게 링크를 가져오고 싶으면 아래의 명령어를 쓴다

yt-dlp -F [영상 링크]

 

그러면 해당 영상의 각 해상도별 영상 파일의 ID값을 포함한 정보 등이 나온다

예시2

audio only와 video only에서 원하는 해상도와 비트레이트를 찾아 왼쪽의 ID 값을 확인한 뒤

아래처럼 입력해주면 원하는 화질과 음질로 다운받을 수 있다.

yt-dlp -f [ID]+[ID] [URL]

#예시 1280x720 30fpds mp4 영상과 129kbps 음성을 합친 뒤 출력
yt-dlp -f 136+140 https://youtu.be/JL_GJShS4fU?si=jYcpT303JjgxFOca

 

하지만 내가 원하는건 해당 링크를 가져오는것이니 아래처럼 입력해준다.

yt-dlp -f [ID]+[ID] [URL] --get-url

 

그 후 얻어낸 링크로 ffmpeg에 적용하기 전에 문제가 있다.

링크에 보면 특수문자 &가 여러번 들어간게 보이는데 링크에 이 문자가 포함되어 있으면

실행중 에러를 뱉어낸다.

그러니 미리 &를 찾아 모두 "&"로 바꿔준다.

vscode같이 찾아서 모두변환이 있는 프로그램을 쓰면 편하다

 

이제 ffmpeg에서 아래와 같이 써준다.

ffmpeg -ss [시작 시간] -to [끝나는 시간] -i [영상 링크] -ss [시작 시간] -to [끝나는 시간] -i [음성 링크] -c copy -map 0:v:0 -map 1:a:0 output.mp4

 

 

각 링크의 파일을 잘라낸 뒤 -c copy로 재인코딩 없이 복사 한 후

-map으로 첫번째 파일의 비디오 스트림과 두번째 파일의 오디오 스트림을 출력파일에 매핑하는 것이다.

 

반응형

+ Recent posts