Używam Ubuntu i polecenie youtube-dl
działa absolutnie dobrze.
Jednak teraz chcę pobrać tylko część wideo, która jest zbyt długa. Chcę więc pobrać tylko kilka minut tego filmu, np. od minuty 13 do minuty 17.
Czy można to zrobić?
Odpowiedź
I nie wierz, że youtube-dl
sam zrobi to, co chcesz. Możesz jednak połączyć to z narzędziem wiersza poleceń, takim jak ffmpeg.
Najpierw uzyskaj rzeczywisty adres URL za pomocą youtube -dl:
youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"
Skopiuj dane wyjściowe polecenia i wklej je jako część parametru -i
w następne polecenie:
ffmpeg -ss 00:00:15.00 -i "OUTPUT-OF-FIRST URL" -t 00:00:10.00 -c copy out.mp4
Parametr -ss
w tej pozycji mówi, że należy odrzucić wszystkie dane wejściowe do 15 sekund do wideo. Opcja -t
określa przechwytywanie przez 10 sekund. Reszta polecenia nakazuje zapisanie jako mp4.
ffmpeg jest popularnym narzędziem i powinno znajdować się w którymkolwiek z popularnych repozytoriów / menedżerów pakietów.
Komentarze
Odpowiedź
Dodawanie do Odpowiedź Johnniego:
Użyj youtube-dl --youtube-skip-dash-manifest -g "URL"
, aby pobrać strumienie wideo i audio.
Teraz użyj:
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
Będziesz „musiał użyć opcji -ss
dla każdego strumienia. Zalecam również zrobienie tego około 30 sekund wcześniej, a następnie użycie innego -ss 30
, aby uniknąć utraty klatek kluczowych. Oto prawdziwy przykład z jednym z moich filmów z YouTube.
youtube-dl --youtube-skip-dash-manifest -g https://www.youtube.com/watch?v=gESHIrvIQQo
Wynik:
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/
Chciałem wyciąć z 43:00 do 50:10, więc zamierzam zrobić -ss 42:30
(daje mi kilka sekund na złapanie dobrej klatki kluczowej) na obu wejściach, a następnie wykonaj -ss 30
po wprowadzeniu danych wejściowych, aby rozpocząć o 43:00.
I „ll następnie użyj map
, aby zmapować wideo 0:v
i dźwięk 1:a
(0 oznacza pierwsze wejście, którym jest wideo, a 1 oznacza drugie wejście, czyli dźwięk), a następnie wybierz moje opcje kodowania.
# 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
Kredyt dla Jakub Vrána za --youtube-skip-dash-manifest
rozwiązanie.
Komentarze
- Dziękuję. Nie byłem pewien, jak uzyskać dźwięk dla posta @Johnnie. Twój post odpowiedział na to.
- Czym się to różni nie używać
--postprocessor-args
bezpośrednio w youtube-dl? - @daGo – wierzę, że
youtube-dl --postprocessor-args
pobierze cały film a następnie edytuj go w dół do wybranego zakresu, podczas gdy ta odpowiedź używayoutube-dl
tylko po to, aby uzyskać specjalne adresy URL.ffmpeg
następnie używa tych adresów URL do pobrania tylko wymaganego zakresu. Więc jeśli chcesz wyodrębnić 2 minuty z 2-godzinnego wideo z wykładem, ta odpowiedź pozwoli Ci zaoszczędzić dużo czasu na pobieraniu. - Działa to z większością filmów na YouTube, ale próbuję to zrobić z 9-godzinnym filmem był wcześniej transmitowany na żywo (a teraz został ukończony) i otrzymuję ” nieprawidłowe dane znalezione podczas przetwarzania danych wejściowych „. Główna różnica polega na tym, że dane wyjściowe
youtube-dl -g
są inne. W większości filmów ma strukturę."https://r3---sn-mv-cvne.googlevideo.com/videoplayback/id/8..."
, ale w przypadku tego filmu ma strukturę."https://manifest.googlevideo.com/api/manifest/dash/expire/15956..."
(obcięte ze względu na spację). Pomysły, jak to zadziałać? - @LeftoverSalad Znaleziono jedno rozwiązanie .
Odpowiedź
ffmpeg $(youtube-dl -g "https://www.youtube.com/watch?v=oHg5SJYRHA0" | sed "s/.*/-ss 00:05 -i &/") -t 01:00 -c copy out.mkv
Edytuj adres URL oraz -ss
, -t
razy, aby użyć tego polecenia. Tworzy argumenty, używając zarówno adresów URL wideo, jak i audio, podobnie jak ta odpowiedź autorstwa @godofgrunts.Dla $()
nie są używane cudzysłowy, ponieważ daje to dwa oddzielne argumenty dla ffmpeg
.
Komentarze
- Czy mógłbyś wyjaśnić, co to robi i jak działa?
- To ' to po prostu bardziej zwięzła wersja @ godofgrunts, używając seda, aby zaoszczędzić trochę czasu, ręcznie pobierając adresy URL i kopiując / wklejając w czasie rozpoczęcia (-ss 00:05). @godofgrunts ma kilka dodatkowych flag
-map 0:v -map 1:a -c:v libx264 -c:a aac
, które mogą poprawić jakość. Chciałbym również dodaćyoutube-dl -f bestvideo+bestaudio
, aby upewnić się, że ' otrzymuję wersję o najwyższej jakości. - ffmpeg.zeranoe.com/builds dla systemu Windows.
- Dodatkowe flagi ” ” zajmują się dwoma strumieniami (wideo i audio), z którymi myślę, że źle sobie radzisz – IIUC nie mają one nic wspólnego z poprawą jakości (no cóż, posiadanie dźwięku jest prawdopodobnie oznaką lepszej jakości :-)) odpowiedź od @godofgrunts poniżej wydaje się być poprawna.
Odpowiedź
youtube-dl
obsługuje przekazywanie argumentów do bazowego postprocesora (testowane z wersją 2017.08.27.1):
youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...
Jest to w zasadzie to samo, co przetwarzanie końcowe z ffmpeg
samodzielnie po pobraniu pliku.
Komentarze
- , ale nadal będzie to wymagało wykonania załaduj cały film, a następnie wytnij żądaną część
- Otrzymuję błąd
unable to obtain file audio codec with ffprobe
. Czy możesz mi w tym pomóc? Używam CentOS 7 - Zwróć uwagę, że flaga
-x
pobiera tylko dźwięk. Pomiń to w poleceniu, jeśli chcesz zarówno audio, jak i wideo. 🙂 - To nie będzie działać niezawodnie, ponieważ
—postprocessor-args
jest w niektórych przypadkach stosowane wielokrotnie. Zobacz github.com/ytdl-org/youtube-dl/issues/26863
Odpowiedź
To żądanie funkcji nie zostało jeszcze zaimplementowane w youtube-dl. Zobacz numer 622 i wiele jego duplikatów na github.
Odpowiedź
Użyj parametru --postprocessor-args
, aby przekazać wyjście audio / wideo do ffmpeg
w celu edycji (procesora). Postprocesor musi być ffmpeg
zainstalowany.
--postprocessor-args
przyjmuje 3 argumenty & (na przykład jest ich więcej, sprawdź stronę podręcznika ffmpeg
):
-
-ss HH:MM:SS
: czas rozpoczęcia do podjęcia -
-to HH:MM:SS
: czas zakończenia -
-t HH:MM:SS
: czas długość do zrobienia
Przykłady:
- Rozpocznij kodowanie po 15 sekundach i zakończ po 1 minucie i 20 sekundach
$ youtube-dl --postprocessor-args "-ss 0:0:15 -to 0:1:20" "[video_URL]"
- Rozpocznij kodowanie po 15 sekundach i zajmij tylko następne 3 minuty 5 sekund
$ youtube-dl --postprocessor-args "-ss 0:0:15 -t 0:3:5" "[video_URL]"
PS: youtube-dl
pobierze cały nośnik przed jego przetworzeniem i usunie go później.
Komentarze
- Tak! Bardzo przejrzysty i łatwy do zapamiętania.
- To nie będzie działać niezawodnie, ponieważ
—postprocessor-args
jest w niektórych przypadkach stosowane wielokrotnie. Zobacz github.com/ytdl-org/youtube-dl/issues/26863
Odpowiedź
To nie jest kompletną odpowiedzią na pytanie OP, ale istnieje sposób na pobranie strumienia od początku do określonego czasu bez konieczności pobierania całego strumienia. Ponieważ YouTube zapewnia obsługę wznawiania, możemy poprosić o częściową zawartość za pomocą nagłówka Range
.
Najpierw pobieramy adresy URL transmisji:
$ youtube-dl -g https://www.youtube.com/watch?v=yysk8s2vih8 https://r1---sn-npoeenee.googlevideo.com/videoplayback?source=youtu... https://r1---sn-npoeenee.googlevideo.com/videoplayback?source=youtu...
Powinno to wyprowadzić dwa adresy URL (każdy dla strumieni wideo i audio).
Teraz wyślij żądanie nagłówka do pierwszego adresu URL (który prowadzi do strumienia wideo) do pobierz całkowitą długość treści tego strumienia:
$ curl "1st-URL" -sI | grep Content-Length Content-Length: 64380504
Teraz dzielimy całkowitą długość treści przez całkowitą liczbę sekund w filmie (film w YouTube trwa 4 min i 7 sekund, czyli 247 sekund.), aby w przybliżeniu uzyskać długość treści wynoszącą 1 sekundę:
64380504 / 247 ≈ 260650
Mnożymy tę wartość z (liczbą sekund, które chcemy pobrać od początku + 1)
(dodajemy jedną, aby również z grubsza uwzględnić dodatkowe miejsce zajmowane przez metadane, które są umieszczane na początku strumienia)
Na przykład, aby pobrać w przybliżeniu pierwsze 10 sekund, musisz pobrać pierwsze 260650 * 11 = 2867150
bajtów, więc wysyłamy żądanie z nagłówkiem Range
:
$ curl "1st-URL" -H "Range: bytes=0-2867150" -o ten_secs.mp4
Powinno to pobrać tylko pierwszy 10 sek.Pobrany plik powinien dać się odtworzyć, ale najlepiej pozwól FFmpeg naprawić niepoprawne metadane:
$ ffmpeg -i ten_secs.mp4 -c copy corrected_ten_secs.mp4
Możemy również pobrać tylko początkową część dźwięku (2.- URL) w podobny sposób (długość treści byłaby różna, ale całkowita liczba sekund pozostałaby taka sama).
Pobranie dowolnej środkowej części filmu powinno być również możliwe w ten sposób, ale prawdopodobnie jest o wiele trudniejsze, ponieważ YouTube umieszcza metadane na początku strumienia (w pierwszych kilku bajtach) i bez ich obecności w pobranych multimediach strumień w ogóle nie będzie odtwarzany.
EDYCJA: To będzie działać tylko w witrynach z obsługą wznawiania, np. YouTube. Nie będzie działać w innych witrynach.
Odpowiedź
Możesz pobierać od początku do punktu bez pobieranie całości i edycja. To połowa odpowiedzi na to pytanie:
Przerwij pobieranie za pomocą
^C
- Próbowałem tego tylko z
mp4
- nie działałem z oddzielnym wideo i audio, potrzebujesz formatu z obydwoma. Domyślnie ytdl często pobiera osobne wideo i audio, a następnie łączy je. Użyj
-F
, aby zobaczyć dostępne formaty, i wybierz , które ma oba, np.-f18
lub-f22
zazwyczaj są dostępne. - Ty „Będę musiał oszacować na podstawie procentu pobrań (co nie jest liniowe; współczynnik kompresji zmienia się w czasie).
Tak. To jest hack .
Dalsze pytanie: jeśli chcesz mieć osobne formaty wideo i audio, czy możesz pobrać część każdego z nich osobno (używając ^c
jak tutaj), a następnie scalić je ręcznie? Nie wydaje mi się, żeby to zadziałało w przypadku niektórych formatów.
Odpowiedź
Zrobiłem skrypt implementujący @godofgrunts answer tutaj
#!/bin/bash #taken from https://unix.stackexchange.com/a/388148/48971 if [ $# -lt 4 ]; then echo "Usage: $0 <youtube"s URL> <HH:mm:ss from time> <HH:mm:ss to time> <output_file_name>" echo "e.g.:" echo "$0 https://www.youtube.com/watch?v=T1n5gXIPyws 00:00:25 00:00:42 intro.mp4" exit 1 fi echo "processing..." from=$(date "+%s" -d "UTC 01/01/1970 $2") to=$(date "+%s" -d "UTC 01/01/1970 $3") from_pre=$(($from - 30)) if [ $from_pre -lt 0 ] then from_pre=0 fi from_pre_command_print=$(date -u "+%T" -d @$from_pre) from_command_print=$(date -u "+%T" -d @$(($from - $from_pre)))$(grep -o "\..*" <<< $2) to_command_print=$(date -u "+%T" -d @$(($to - $from_pre)))$(grep -o "\..*" <<< $3) command="ffmpeg " for uri in $(youtube-dl -g $1) do command+="-ss $from_pre_command_print -i $uri " done command+="-ss $from_command_print -to $to_command_print $4" echo "downloading with the following command:" echo "$command" $command
Przesłałem również do Gitlab „fragmentów kodu
Odpowiedź
Zrobiłem aplikację na kolby, która może robić to, co chcesz. Wiem, że post jest stary, ale problem nadal występuje.
Możesz go znaleźć tutaj
Może analizować tekst dla linków YouTube. Wystarczy podać np .:
YouTube.com/blahblah start-1:20
Spowoduje to pobranie wideo od 0-1: 22 (mogą wystąpić niewielkie różnice z powodu klatek kluczowych). Może również pobierać całe filmy, po prostu pomiń przedział czasu w takim przypadku.
Odpowiedź
Dla wszystkich leniwych, którzy nie „Nie chcesz używać więcej niż jednego polecenia, wykonaj następujące czynności:
youtube-dl.exe https://www.youtube.com/watch?v=MJD39Aja1Is --external-downloader ffmpeg --external-downloader-args "-ss 00:00:10.00 -t 00:01:00.00"
Możesz teraz łączyć opcje youtube-dl.exe
i ffmpeg
, takie jak wybieranie formatu, usuwanie wideo i wycinanie pliku audio itp. (może wycinanie pliku wideo, a następnie konwertowanie do pliku audio, cokolwiek nastąpi wcześniej)
youtube-dl.exe -f 251 https://www.youtube.com/watch?v=MJD39Aja1Is -x --external-downloader ffmpeg --external-downloader-args "-ss 00:00:10.00 -t 00:01:00.00"
Komentarze
- Twoje polecenie nie działa w systemie GNU / Linux: używamy
youtube-dl
zamiastyoutube-dl.exe
.ffmpeg
powiedział miInvalid duration specification for ss: 00.00.10.00
, powinien być-ss 00:00:30.00
z dwukropkami zamiast kropek z wyjątkiem ostatniego. - @ ewin-goisot Przepraszam, stało się tak, ponieważ nie ' t skopiuj-wklej całe polecenie po tes ting it. Teraz powinno działać. problemem była definicja czasu. musi to być 00: 00: 00.00 2 razy podwójny punkt, niż tylko 1 punkt. jak hh: mm: ss.ms
- z
00:00:00.0
, działa lepiej, mogę pobrać część wideo. Nadal mam problem (z twoim poleceniem i większością innych): pobiera o 5 lub 10 sekund za dużo. Rozwiązanie podano w odpowiedzi @godofgrunts ':-ss 42:30 -i "$video_url" -ss 42:30 -i "$audio_url" -map 0:v -map 1:a -ss 30
rozpoczynając 30 sekund przed rozpoczęciem części i dodając-ss 30
na końcu. Dlatego muszę kilka razy użyć opcji-ss
w tym samym poleceniu. Czy istnieje sposób, aby zrobić to samo z--external-downloader-args
? - ach przepraszam, nie jestem zaznajomiony z mieszaniem różnych strumieni. ale jeśli chcesz pobrać tylko najlepszy materiał audio i wideo z tego samego filmu, możesz to zrobić za pomocą youtube-dl zamiast tego
Odpowiedz
Aby dodać do @hyperpallium odpowiedź: OP nie wspomniał, że film, który pobierał, musiał pochodzić z YouTube.
YouTube jest absurdalnie restrykcyjny, jeśli chodzi o ich filmy, podzielili strumienie audio i wideo do różnych plików i śledzą Cię / sprzedają Twoje dane; w związku z tym można mieć trudności z metodą pobierania go częściowo, a następnie naciśnięcia Ctrl + C .
W youtube-dl
wersji 2020.11.17 w systemie Microsoft Windows w wersji 10.0.17134.1304 pobrałem część filmu z archive.org:
E:\cs>youtube-dl --abort-on-unavailable-fragment https://archive.org/download/beastars-season-1-1080p/%5BHCS%5D%20Beastars%20-%2003%20%5B1080p%5D.mkv [generic] [HCS] Beastars - 03 [1080p]: Requesting header [redirect] Following redirect to https://ia601504.us.archive.org/14/items/beastars-season-1-1080p/%5BHCS%5D%20Beastars%20-%2003%20%5B1080p%5D.mkv [generic] [HCS] Beastars - 03 [1080p]: Requesting header WARNING: Falling back on generic information extractor. [generic] [HCS] Beastars - 03 [1080p]: Downloading webpage WARNING: URL could be a direct video link, returning it as such. [download] Destination: [HCS] Beastars - 03 [1080p]-[HCS] Beastars - 03 [1080p].mkv [download] 2.3% of 513.77MiB at 839.68KiB/s ETA 10:12 ERROR: Interrupted by user E:\cs>ren "[HCS] Beastars - 03 [1080p]-[HCS] Beastars - 03 [1080p].mkv.part" "[HCS] Beastars - 03 [1080p]-[HCS] Beastars - 03 [1080p].mkv" E:\cs>ffmpeg -i "[HCS] Beastars - 03 [1080p]-[HCS] Beastars - 03 [1080p].mkv" "[HCS] Beastars - 03 [1080p].mp4" ffmpeg version N-91990-g49c67e79ca Copyright (c) 2000-2018 the FFmpeg developers built with gcc 8.2.1 (GCC) 20180813 [stdout text] Stream #0:1(jpn): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) Metadata: encoder : Lavc58.30.100 aac [matroska,webm @ 0000020c8f28a2c0] Read errorme=00:00:33.96 bitrate=2099.5kbits/s speed=0.0185x frame= 823 fps=0.3 q=-1.0 Lsize= 9677kB time=00:00:34.56 bitrate=2293.8kbits/s speed=0.0147x video:9134kB audio:519kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.248960% [libx264 @ 0000020c8f3423c0] frame I:25 Avg QP:14.71 size: 56865 [stdout] E:\cs>youtube-dl -v [debug] System config: [] [debug] User config: [] [debug] Custom config: [] [debug] Command-line args: ["-v"] [debug] Encodings: locale cp1252, fs mbcs, out cp437, pref cp1252 [debug] youtube-dl version 2020.11.17 [debug] Python version 3.4.4 (CPython) - Windows-10-10.0.17134 [debug] exe versions: ffmpeg 3.4, ffprobe N-91990-g49c67e79ca [debug] Proxy map: {} Usage: youtube-dl [OPTIONS] URL [URL...]
Plik MKV, z którym skończyłem, był ” 00:22:57 ” w ” całkowity czas trwania „, ale zakończył się po 34 sekundach. Film MP4, który otrzymałem, miał całkowity czas trwania 00:00:34 sekundy, zakończył się po 34 sekundach, a wideo i dźwięk były odtwarzane całkowicie dobrze / zgodnie z przeznaczeniem.
Pełny cmd.exe
log znajduje się tutaj
Podsumowując, uruchom
youtube-dl --abort-on-unavailable-fragment [URL to video file]
(opcja --abort-on-unavailable-fragment
może być ważna, ponieważ w końcu przerywasz pobieranie za pomocą Ctrl + C ), pozwól mu się pobrać przez chwilę, a następnie naciśnij Ctrl + C .
Opcjonalnie: zmień nazwę [file].mkv.part
plik do [file].mkv
. Konwersja MKV do MP4 też jest prawdopodobnie opcjonalna.
Odpowiedź
Ktoś utworzył skrypt wsadowy (dla Windows), który pobiera plik i wyodrębnia żądaną część:
@ECHO off :Input ECHO. SET url= ECHO Enter Youtube-url: SET /P url= IF "%url%" EQU "" GOTO End IF "%url: =%" NEQ "%url%" GOTO Input ECHO Enter start time (in seconds, or in hh:mm:ss[.xxx] form): SET /P start= ECHO Enter duration (in seconds, or in hh:mm:ss[.xxx] form): SET /P dur= ECHO. FOR /F "delims==" %%A IN ("youtube-dl.exe --no-warnings --get-filename "%url%"") DO SET filename=%%A FOR /F %%B IN ("youtube-dl.exe -g "%url%"") DO ( ffmpeg.exe -hide_banner -ss "%start%" -i "%%B" -c copy -t "%dur%" "%filename%" ) GOTO Input :End
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
ffmpeg
w rzeczywistości pobierze tylko określoną część.youtube-dl
z-g
zawsze zwróci 403 zabronione dla mnie. Używanie samego youtube-dl do pobierania wideo zawsze będzie działać jak urok.