Niektórzy lubią filmy, inni muzykę, a jeszcze inni po prostu potrzebują zapisać na dysk filmiki z kotami. Powód wymyślcie sobie sami 🙂
Od niedawna wszelkiego rodzaju pobieraczki youtubowe przestały oferować jakość full HD z dźwiękiem. No cóż, trzeba sobie radzić inaczej. Za pomocą youtube-dl można pobrać osobno dowolną ścieżkę audio z youtube oraz dowolną ścieżkę video, o wybranym bitrate, codecu oraz rozdzielczości.
Co będzie potrzebne?
Potrzeba nam dwóch narzędzi. A w zasadzie trzech – pipem pobierzemy downloader:
sudo apt install ffmpeg python3-pip sudo pip3 install youtube_dl
Pakiet pip będzie nam służył do pobrania właściwego narzędzia w pythonie – youtube-dl. Za jego pomocą można zobaczyć co dany film oferuje do pobrania – wszystkie wersje audio i video oraz umożliwia pobranie ich. Ffmpeg posłuży do połączenia osobnych ścieżek audio oraz video w jeden plik.
Pobranie audio i video
Po pierwsze wybierzmy jakieś interesujące video. Na przykład to: https://www.youtube.com/watch?v=G1IbRujko-A.
Za pomocą youtube-dl można wyświetlić listę dostępnych ścieżek audio i video:
~> youtube-dl -F 'https://www.youtube.com/watch?v=G1IbRujko-A' [youtube] G1IbRujko-A: Downloading webpage [youtube] G1IbRujko-A: Downloading video info webpage [youtube] G1IbRujko-A: Downloading js player vflYv1bWD [info] Available formats for G1IbRujko-A: format code extension resolution note 249 webm audio only DASH audio 117k , opus @ 50k, 272.51MiB 250 webm audio only DASH audio 136k , opus @ 70k, 351.10MiB 140 m4a audio only DASH audio 162k , m4a_dash container, mp4a.40.2@128k, 545.84MiB 171 webm audio only DASH audio 191k , vorbis@128k, 577.59MiB 251 webm audio only DASH audio 207k , opus @160k, 667.00MiB 160 mp4 256x144 144p 170k , avc1.4d400c, 24fps, video only, 205.76MiB 133 mp4 426x240 240p 237k , avc1.4d4015, 24fps, video only, 543.85MiB 278 webm 256x144 144p 281k , webm container, vp9, 24fps, video only, 401.04MiB 242 webm 426x240 240p 302k , vp9, 24fps, video only, 467.08MiB 134 mp4 640x360 360p 338k , avc1.4d401e, 24fps, video only, 968.71MiB 243 webm 640x360 360p 528k , vp9, 24fps, video only, 1.41GiB 135 mp4 854x480 480p 690k , avc1.4d401e, 24fps, video only, 2.24GiB 244 webm 854x480 480p 739k , vp9, 24fps, video only, 2.37GiB 247 webm 1280x720 720p 1090k , vp9, 24fps, video only, 3.61GiB 136 mp4 1280x720 720p 1154k , avc1.4d401f, 24fps, video only, 4.41GiB 137 mp4 1920x1080 1080p 2373k , avc1.640028, 24fps, video only, 9.32GiB 248 webm 1920x1080 1080p 2647k , vp9, 24fps, video only, 5.18GiB 43 webm 640x360 medium , vp8.0, vorbis@128k, 3.06GiB 18 mp4 640x360 medium 485k , avc1.42001E, mp4a.40.2@ 96k (44100Hz), 2.04GiB 22 mp4 1280x720 hd720 1179k , avc1.64001F, mp4a.40.2@192k (44100Hz) (best
W tym przypadku można pobrać gotowy plik – ścieżkę 22. W niektórych filmach, np. w teledyskach nie ma połączonej wersji audio + video i jest możliwość pobrania tylko osobnego audio i osobnego video. Zróbmy więc tak:
youtube-dl --format 171 'https://www.youtube.com/watch?v=G1IbRujko-A' youtube-dl --format 136 'https://www.youtube.com/watch?v=G1IbRujko-A'
Ścieżka o id formatu 171 to audio w kontenerze webm, z kodekiem vorbis i bitrate 191k (powyższa tabelka). Ścieżka 136 to video 1280×720 mp4. W bieżącym katalogu powinieneś widzieć dwa nowe pliki – jeden z rozszerzeniem webm, a drugi mp4. Po otworzeniu w dowolnym odtwarzaczu pierwszy z nich będzie grał, a drugi wyglądał.
Łączenie w całość
Na koniec pozostaje połączyć jedno i drugie w jeden plik MP4:
ffmpeg -i [plik].webm -i [plik].mp4 -acodec copy -vcodec copy plik-calosc.mp4
Powyższe polecenie przekopiuje ścieżkę audio (-acodec copy) oraz ścieżkę video (-vcodec copy) bez ponownej kompresji. Obie ścieżki zostaną zapisane w pliku plik-calosc.mp4. I to wszystko.
przecież nie trzeba łączyć na piechotę ffmpegiem jak w jaskini, bo youtube-dl robi to automatycznie.
Wystarczy samo youtube-dl [LINK]
Wtedy nie byłoby tego tutoriala i pretekstu żeby napisać coś o ffmpeg 🙂 U mnie też to działa, ale pobiera tylko w 640×480 i niestety nie potrafi połączyć z wyższymi rozdzielczościami.