Я використовую Ubuntu, і команда youtube-dl працює прекрасно.
Я хочу завантажити лише частину відео, яке занадто довго. Тому я хочу завантажити лише кілька хвилин частину відео. Приклад від 13 хвилин до 17 хвилин.
Чи можна це зробити
Я використовую Ubuntu, і команда youtube-dl працює прекрасно.
Я хочу завантажити лише частину відео, яке занадто довго. Тому я хочу завантажити лише кілька хвилин частину відео. Приклад від 13 хвилин до 17 хвилин.
Чи можна це зробити
Відповіді:
Я не вірю, що youtube-dlодин буде робити те, що ти хочеш. Однак ви можете комбінувати його з утилітою командного рядка, наприклад ffmpeg.
Спочатку придбайте фактичну URL-адресу за допомогою youtube-dl:
youtube-dl -g "https://www.youtube.com/watch?v=V_f2QkBdbRI"
Скопіюйте висновок команди та вставте її як частину -iпараметра наступної команди:
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:00:15.00 -t 00:00:10.00 -c copy out.mp4
-ssПараметр в цьому положенні станах, щоб скинути всі вхідні дані аж до 15 секунд в відео. В -tопції стану , щоб захопити в протягом 10 секунд. Решта команди каже, що вона зберігається як mp4.
ffmpeg - популярний інструмент, і він повинен бути в будь-якому з популярних сховищ ОС / менеджерів ОС.
ffmpeg -i "OUTPUT-OF-FIRST URL" -ss 00:13:00.00 -to 00:17:00.00 -c copy out.mp4
ffmpegфактично завантажить лише вказану вами частину.
ffmpeg $(youtube-dl -g 'https://www.youtube.com/watch?v=oHg5SJYRHA0' | sed "s/.*/-ss 00:05 -i &/") -t 01:00 -c copy out.mkv
-map 0:v -map 1:a -c:v libx264 -c:a aacякі можуть покращити якість. Мені також хочеться додати, youtube-dl -f bestvideo+bestaudioщоб бути впевненим, що я отримую версію найвищої якості.
Додавання до відповіді Джонні:
Використовуйте youtube-dl -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параметр для кожного потоку. Я також рекомендую робити це приблизно на 30 секунд раніше, а потім використовувати іншу, -ss 30щоб уникнути втрати ключових кадрів. Ось справжній приклад використання одного з моїх відео на YouTube.
youtube-dl -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:vта аудіо 1:a(0 означає перший вхід, а це відео, а 1 означає другий вхід, який є аудіо), а потім виберу мої параметри кодування.
ffmpeg -ss 42:30 -i "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/" -ss 42:30 -i "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/" -map 0:v -map 1:a -ss 30 -t 7:10 -c:v libx264 -c:a aac gog-vs-triv.mkv
-iпрапор ffmpeg може приймати URL-адреси. акуратний
Цей запит на функцію ще не реалізований у youtube-dl. Дивіться номер 622 випуску та безліч його дублікатів на github.
youtube-dl підтримує передачу аргументів на основний постпроцесор (тестований з версією 2017.08.27.1):
youtube-dl -x --postprocessor-args "-ss 00:13:00.00 -t 00:04:00.00" https://youtu.be/...
Це в основному те саме, що виконувати пост-обробку ffmpegсамостійно після першого завантаження файлу.
unable to obtain file audio codec with ffprobeпомилку. Чи можете ви мені допомогти з цим. Я використовую CentOS 7
-xпрапор завантажує лише аудіо. Опустіть його з команди, якщо ви хочете як аудіо, так і відео. :)
Ви можете завантажувати від початку до пункту, не завантажуючи все та не редагуючи. Ось половина того, що задає це питання:
перервати завантаження
^C
mp4-Fдля перегляду доступних форматів та виберіть той, mp4який має обидва. наприклад, -f18або -f22зазвичай є.Так. Це злом .
Подальше запитання: якщо вам потрібні окремі формати відео та аудіо, ви можете завантажити частину кожного окремо (використовуючи ^cяк тут), а потім об'єднати їх вручну? Я не думаю, що це буде працювати для деяких форматів.
Це не повністю відповідає на питання ОП, але є спосіб завантажити потік від початку до певної тривалості без необхідності завантаження повного потоку. Оскільки YouTube надає підтримку резюме, ми можемо подати запит на частковий вміст за допомогою Rangeзаголовка.
Спочатку ми отримуємо URL-адреси потоку:
$ 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...
Це має вивести дві URL-адреси (кожна для потоків відео та аудіо).
Тепер надішліть головний запит на першу URL-адресу (яка посилається на відеопотік), щоб отримати загальну довжину вмісту цього потоку:
$ curl "1st-URL" -sI | grep Content-Length
Content-Length: 64380504
Тепер ми ділимо цю загальну тривалість вмісту на загальну секунду у відео (відео YouTube триває 4 хв та 7 секунд, що становить 247 секунд), щоб приблизно отримати тривалість вмісту 1 секунду:
64380504 / 247 ≈ 260650
Ми помножуємо це значення на (кількість секунд, які ми хочемо отримати з початку + 1)
(ми додаємо ще один, щоб приблизно врахувати додатковий простір, зайнятий метаданими, який розміщується на початку потоку)
Наприклад, щоб отримати приблизно перші 10 секунд, вам потрібно буде отримати перші 260650 * 11 = 2867150байти, тому ми робимо запит із Rangeзаголовком:
$ curl "1st-URL" -H "Range: bytes=0-2867150" -o ten_secs.mp4
Це потрібно завантажувати лише перші 10 секунд. Завантажений файл повинен мати можливість відтворювати, але найкраще дозволити FFmpeg виправити неправильні метадані:
$ ffmpeg -i ten_secs.mp4 -c copy corrected_ten_secs.mp4
Ми також можемо завантажувати лише початкову частину аудіо (2-й URL) аналогічно (довжина вмісту відрізнятиметься, але загальна кількість секунд залишатиметься однаковою).
Завантаження будь-якої середньої частини з відео також повинно бути можливим таким чином, але, ймовірно, буде набагато складніше, оскільки YouTube розміщує метадані на початку потоку (у перших кількох байтах) і без його присутності у завантаженому носії, Потік взагалі не буде грати.
EDIT: Це буде працювати лише на веб-сайтах із підтримкою відновлення, скажімо, на YouTube. Він не працює для інших веб-сайтів.
Використовуйте параметр --postprocessor-args, щоб передати аудіо / відео вихід у ffmpeg для редагування (процесор), тому потрібно встановити ffmpeg.
--postprocessor-args приймає 3 аргументи та значення (наприклад, theres більше, перегляньте сторінку керівництва ffmpeg):
Приклади:
$ youtube-dl --postprocessor-args "-ss 0: 0: 15 -to 0: 1: 20" '[video_URL]'
$ youtube-dl - postprocessor-args "-ss 0: 0: 15 -t 0: 3: 5" '[video_URL]'
PS: youtube-dl завантажить весь носій перед його обробкою та видалить після.