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

  • Zasadniczo nadal musisz pobrać cały film i samodzielnie go przyciąć
  • Możesz użyć t he -to zamiast -t, jeśli chcesz określić czas zakończenia wycinka wideo. ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
  • @Antony ffmpeg w rzeczywistości pobierze tylko określoną część.
  • @ Antony Dopóki umieścisz parametr -ss przed parametrem -i, pobieranie rozpocznie się od czasu określonego przez -ss. Jeśli jednak umieścisz -ss po parametrze -i, to ffmpeg pobierze od samego początku wideo i rozpocznie kodowanie od miejsca, w którym określa -ss. Zobacz moją zmianę odpowiedzi Johnniego ', aby uzyskać więcej informacji.
  • używając linku podanego przez 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.

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.

Wideo

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żywa youtube-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 zamiast youtube-dl.exe. ffmpeg powiedział mi Invalid 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 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *