Korzystam z Ubuntu, a polecenie youtube-dl działa absolutnie dobrze.
Chcę pobrać tylko część filmu, która jest za długa. Więc chcę pobrać tylko kilka minut filmu. Przykład od 13 minut do 17 minut.
Czy istnieje jakiś sposób, aby to zrobić
źródło
Korzystam z Ubuntu, a polecenie youtube-dl działa absolutnie dobrze.
Chcę pobrać tylko część filmu, która jest za długa. Więc chcę pobrać tylko kilka minut filmu. Przykład od 13 minut do 17 minut.
Czy istnieje jakiś sposób, aby to zrobić
Nie wierzę, że youtube-dl
sam zrobi, co chcesz. Można go jednak połączyć z narzędziem wiersza polecenia, 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ęść -i
parametru następnego polecenia:
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4
-ss
Parametr w tej pozycji państw, aby odrzucić wszystkie dane wejściowe aż 15 sekundy filmu. Te -t
stany możliwość przechwytywania przez 10 sekund. Reszta polecenia każe przechowywać go jako MP4.
ffmpeg jest popularnym narzędziem i powinno znajdować się w dowolnym popularnym repozytorium / menedżerze pakietów.
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
ffmpeg
faktycznie pobierze tylko określoną część.źródło
-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 mieć pewność, że otrzymam wersję najwyższej jakości.Dodając do odpowiedzi Johnniego:
Służy
youtube-dl -g "URL"
do pobierania strumieni wideo i audio.Teraz użyj:
Musisz użyć tej
-ss
opcji dla każdego strumienia. Polecam także zrobienie tego około 30 sekund wcześniej, a następnie użycie innej,-ss 30
aby uniknąć utraty kluczowych klatek. Oto prawdziwy przykład wykorzystania jednego z moich filmów na youtube.Wideo
Wynik:
Chciałem obniżyć z 43:00 do 50:10, więc zrobię
-ss 42:30
(dając mi kilka sekund, aby złapać dobrą klatkę kluczową) na obu wejściach, a następnie zrobię to-ss 30
po danych wejściowych, aby rozpocząć o 43:00.Następnie użyję
map
do zmapowania obrazu0:v
i dźwięku1:a
(0 oznacza pierwsze wejście, którym jest wideo, a 1 oznacza drugie wejście, którym jest audio), a następnie wybiorę moje opcje kodowania.źródło
-i
flaga ffmpeg może pobierać adresy URL. schludnieTo żądanie funkcji nie jest jeszcze zaimplementowane w youtube-dl. Zobacz numer 622 i wiele jego duplikatów na github.
źródło
youtube-dl
obsługuje przekazywanie argumentów do podstawowego postprocesora (testowany 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
ffmpeg
samodzielne przetwarzanie końcowe po pobraniu pliku.źródło
unable to obtain file audio codec with ffprobe
błąd. Czy możesz mi w tym pomóc. Używam CentOS 7-x
flaga pobiera tylko dźwięk. Pomiń to w poleceniu, jeśli chcesz audio i wideo. :)Możesz pobierać od początku do punktu bez pobierania całej rzeczy i edycji. To połowa tego, o co pyta to pytanie:
mp4
-F
aby zobaczyć dostępne formaty i wybierz taki,mp4
który ma oba. np.-f18
lub-f22
zwykle tam są.Tak. To jest hack .
Dalsze pytanie: jeśli chcesz osobnych formatów audio i wideo, czy możesz pobrać część każdego z nich osobno (używając
^c
tutaj), a następnie scalić je ręcznie? Nie sądzę, że to zadziała w przypadku niektórych formatów.źródło
To nie do końca odpowiada na pytanie OP, ale istnieje sposób, aby pobrać strumień od początku do określonego czasu trwania bez konieczności pobierania całego strumienia. Ponieważ YouTube zapewnia obsługę wznowienia, możemy poprosić o częściowe treści za pomocą
Range
nagłówka.Najpierw pobieramy adresy URL strumienia:
Powinno to wygenerować dwa adresy URL (każdy dla strumieni wideo i audio).
Teraz wyślij zapytanie na pierwszy adres URL (który prowadzi do strumienia wideo), aby pobrać całkowitą długość treści tego strumienia:
Teraz dzielimy tę całkowitą długość treści przez całkowitą liczbę sekund w filmie (czas trwania filmu w YouTube wynosi 4 minuty i 7 sekund, co stanowi 247 sekund), aby w przybliżeniu uzyskać długość 1 sekundy:
64380504 / 247 ≈ 260650
Mnożymy tę wartość przez (liczbę sekund, którą chcemy pobrać od początku + 1)
(dodajemy jeden, aby z grubsza uwzględnić dodatkowe miejsce zajmowane przez metadane, które są umieszczane na początku strumienia)
Na przykład, aby pobrać około pierwszych 10 sekund, musisz pobrać pierwsze
260650 * 11 = 2867150
bajty, więc przesyłamy żądanie zRange
nagłówkiem:Powinno to pobrać tylko pierwsze 10 sekund. Pobrany plik powinien być w stanie odtworzyć, ale najlepiej pozwolić FFmpeg naprawić nieprawidłowe metadane:
Możemy również pobrać w podobny sposób tylko początkową część dźwięku (2. URL) (długość treści byłaby różna, ale całkowite sekundy pozostałyby takie same).
Pobieranie jakiejkolwiek środkowej części z filmu powinno być również możliwe w ten sposób, ale prawdopodobnie staje się znacznie trudniejsze, ponieważ YouTube umieszcza metadane na początku strumienia (w pierwszych kilku bajtach) i bez obecności w pobranych mediach Strumień w ogóle nie będzie odtwarzany.
EDYCJA: Będzie to działać tylko na stronach internetowych z obsługą wznowienia, powiedzmy YouTube. To nie będzie działać na innych stronach internetowych.
źródło
Użyj parametru --postprocessor-args , aby przekazać wyjście audio / wideo do edytora ffmpeg (procesor), więc musisz zainstalować ffmpeg.
--postprocessor-args przyjmuje 3 argumenty i wartości (na przykład, jest więcej, sprawdź stronę podręcznika ffmpeg):
Przykłady:
PS: youtube-dl pobierze całe media przed ich przetworzeniem i usunie po nim.
źródło