Я використовую 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 завантажить весь носій перед його обробкою та видалить після.