나는 Ubuntu를 사용하고 있으며 이 youtube-dl
명령은 완벽하게 실행됩니다.
하지만 이제는 너무 긴 비디오의 일부만 다운로드하고 싶습니다. 그래서 저는 13분에서 17분까지의 몇 분 분량의 비디오만 다운로드하고 싶습니다.
이를 수행할 수 있는 방법이 있습니까?
답변1
youtube-dl
나는 한 사람이 당신이 원하는 것을 할 수 있다고 믿지 않습니다 . 그러나 ffmpeg와 같은 명령줄 유틸리티와 함께 사용할 수 있습니다.
먼저 youtube-dl을 사용하여 실제 URL을 얻으십시오.
youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"
명령의 출력을 복사하여 -i
다음 명령에 대한 인수의 일부로 붙여넣습니다.
ffmpeg -ss 00:00:15.00 -i "OUTPUT-OF-FIRST URL" -t 00:00:10.00 -c copy out.mp4
이 위치의 매개 변수는 -ss
비디오에서 15초 이전의 모든 입력을 삭제합니다. 이 -t
옵션은 10초 동안 캡처하는 것을 의미합니다. 나머지 명령은 mp4로 저장하도록 지시합니다.
ffmpeg는 널리 사용되는 도구이며 널리 사용되는 운영 체제 저장소/패키지 관리자에 있어야 합니다.
답변2
에 추가하다조니의 대답:
youtube-dl --youtube-skip-dash-manifest -g "URL"
비디오 및 오디오 스트림을 가져오는 데 사용됩니다 .
이제 다음을 사용하십시오.
ffmpeg -ss 12:15 -i "1st-URL" -ss 12:15 -i "2nd-URL" -t 5:15 -map 0:v -map 1:a -c:v libx264 -c:a aac output.mkv
-ss
각 스트림에 대해 이 옵션을 사용해야 합니다 . 또한 -ss 30
키프레임 손실을 방지하려면 약 30초 전에 이 작업을 수행한 다음 다른 작업을 사용하는 것이 좋습니다 . 다음은 내 YouTube 동영상 중 하나를 사용한 실제 예입니다.
youtube-dl --youtube-skip-dash-manifest -g https://www.youtube.com/watch?v=gESHIrvIQQo
산출:
https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/298/source/youtube/requiressl/yes/mn/sn-mv-cvne/ei/BgifWfmmL4iE8wSlv47oCA/mm/31/pl/23/mv/m/ms/au/initcwndbps/11447500/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5231968228/lmt/1502479662079137/dur/18575.164/key/dg_yt0/signature/4FFB9B0B7E1703B31F5D07DAD579B55F17EF7BAA.0CB63905C89DD4D33F90CF3AAD728F1ECDFCB9B3/mt/1503594423/ip/206.34.122.70/ipbits/0/expire/1503616102/sparams/ip,ipbits,expire,id,itag,source,requiressl,mn,ei,mm,pl,mv,ms,initcwndbps,ratebypass,mime,otfp,gir,clen,lmt,dur/
https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/140/source/youtube/requiressl/yes/mn/sn-mv-cvne/ei/BgifWfmmL4iE8wSlv47oCA/mm/31/pl/23/mv/m/ms/au/initcwndbps/11447500/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/295235970/lmt/1502480001536214/dur/18575.243/key/dg_yt0/signature/4CD42047D1D5C714377350905C1CC5CBA37C0009.6EED1FC92D17A096235C32E48F4B15DEF7DD99B0/mt/1503594423/ip/206.34.122.70/ipbits/0/expire/1503616102/sparams/ip,ipbits,expire,id,itag,source,requiressl,mn,ei,mm,pl,mv,ms,initcwndbps,ratebypass,mime,otfp,gir,clen,lmt,dur/
43:00에서 50:10으로 잘라내기를 원하므로 -ss 42:30
두 입력 모두에 대해 작업을 수행하고(좋은 키프레임을 캡처하는 데 몇 초의 시간 제공) -ss 30
43:00에 시작하도록 입력 후를 수행합니다.
그런 다음 비디오 및 오디오 map
에 대한 매핑 (첫 번째 입력인 비디오에는 0, 두 번째 입력인 오디오에는 1)을 사용 하고 인코딩 옵션을 선택합니다.0:v
1:a
# The first URL
video_url="https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/298/source/youtube/requiressl/yes/pl/23/ei/5wCfWY6dBeOj8gSSxZaACQ/mv/m/initcwndbps/5055000/ms/au/mm/31/mn/sn-mv-cvne/ratebypass/yes/mime/video%2Fmp4/otfp/1/gir/yes/clen/5231968228/lmt/1502479662079137/dur/18575.164/key/dg_yt0/beids/%5B9466591%5D/mt/1503592562/signature/8CCFBF5CAB97341D0CB1F34E85AB6EE20FC7A03E.7679F39A8603CF41A95F10232E2A921EB0774101/ip/206.34.122.70/ipbits/0/expire/1503614279/sparams/ip,ipbits,expire,id,itag,source,requiressl,pl,ei,mv,initcwndbps,ms,mm,mn,ratebypass,mime,otfp,gir,clen,lmt,dur/"
# The second URL
audio_url="https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/80448722bbc8410a/itag/140/source/youtube/requiressl/yes/pl/23/ei/5wCfWY6dBeOj8gSSxZaACQ/mv/m/initcwndbps/5055000/ms/au/mm/31/mn/sn-mv-cvne/ratebypass/yes/mime/audio%2Fmp4/otfp/1/gir/yes/clen/295235970/lmt/1502480001536214/dur/18575.243/key/dg_yt0/beids/%5B9466591%5D/mt/1503592562/signature/4AACC8E27F9036D36D4D623A771A9F2BAC4674BA.7E4F4FB4DC023E3FE491A991F0F9F2329648DE9D/ip/206.34.122.70/ipbits/0/expire/1503614279/sparams/ip,ipbits,expire,id,itag,source,requiressl,pl,ei,mv,initcwndbps,ms,mm,mn,ratebypass,mime,otfp,gir,clen,lmt,dur/"
ffmpeg -ss 42:30 -i "$video_url" -ss 42:30 -i "$audio_url" -map 0:v -map 1:a -ss 30 -t 7:10 -c:v libx264 -c:a aac gog-vs-triv.mkv
~에 귀속됨야쿠브 브라나솔루션 --youtube-skip-dash-manifest
.
편집: 이 작업을 자주 수행하므로 여기에 포함할 스크립트를 만들었습니다. 이 글에서는 크게 중요하지 않은 youtube-dl
이유로 에서 로 변경했지만 , 계속 사용하고 싶다면 로 yt-dlp
바꿀 수 있습니다 .yt-dlp
youtube-dl
clip-youtube.sh
#!/bin/bash
#Arguments: URL, Time stamp -5 seconds, length of clip, video file name
readarray -t urls <<< "$(yt-dlp --youtube-skip-dash-manifest -g "$1")"
ffmpeg -ss $2 -i "${urls[0]}" -ss $2 -i "${urls[1]}" -ss 5 -map 0:v -map 1:a -c:v libx264 -c:a aac -t $3 $4
사용 예:
./clip-youtube.sh "https://www.youtube.com/watch?v=aqz-KE-bpKQ" 3:05 11 squashed.mp4
답변3
ffmpeg $(youtube-dl -g 'https://www.youtube.com/watch?v=oHg5SJYRHA0' | sed 's/^/-ss 00:05 -i /') -t 01:00 -c copy out.mkv
이 명령을 사용하려면 URL과 -ss
시간을 편집하세요. -t
다음과 유사한 비디오 및 오디오 URL이 포함된 매개변수를 생성합니다.답변작성자: @godofgrunts. $()
두 개의 개별 매개변수가 생성되므로 따옴표를 사용하지 마십시오 ffmpeg
.
답변4
이 매개변수를 사용하여 편집할 오디오/비디오 출력(프로세서)을 --postprocessor-args
전달 합니다. 포스트 프로세서 설치가 ffmpeg
필요합니다 .ffmpeg
--postprocessor-args
3개의 매개변수와 값이 필요합니다. (예를 들어 더 많은 매개변수가 있습니다. 매뉴얼 페이지를 참조하세요 ffmpeg
.)
-ss HH:MM:SS
: 시작 시간-to HH:MM:SS
: 시간의 최대-t HH:MM:SS
: 소요시간
예:
- 15초에 인코딩 시작하고 1분 20초에 멈춤
$ youtube-dl --postprocessor-args "-ss 0:0:15 -to 0:1:20" '[video_URL]'
- 인코딩은 15초에 시작되어 3분 5초밖에 걸리지 않습니다.
$ youtube-dl --postprocessor-args "-ss 0:0:15 -t 0:3:5" '[video_URL]'
첨부된: youtube-dl
전체 미디어가 다운로드된 후 처리되기 전에 삭제됩니다.