5 способов скачать онлайн-видео
5 способов скачать онлайн-видео

Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.

Самый простой способ,Просто используйте различные сетевые диски для поиска,Найдите общий адрес сетевого диска,Перенос на свой сетевой диск,затем скачайте。Это позволяет избежать необходимости онлайнвидеоПрямая загрузка с сайта,И часто четкость выше.

Если сетевой диск не может быть найден, второй метод — использовать некоторые веб-сайты онлайн-анализа видео. Введя URL-адрес видео, вы можете проанализировать адрес загрузки, что также очень просто. Крупные видеосайты, такие как Bilibili, Youku и т. д., имеют аналитические сайты. Однако современные видеосайты часто адаптируются, поэтому анализ часто не дает результатов.

Третий способ — использовать некоторые инструменты. Я обычно использую you-get и youtube-dl, оба написаны на Python и имеют открытый исходный код, и их можно изменить в соответствии с вашими потребностями. youtube-dl имеет более мощные функции и поддерживает больше веб-сайтов. Однако некоторые функции слишком громоздки и неудобны в использовании, например загрузка субтитров, выбор разрешения и т. д. you-get более удобен в этих аспектах, программа меньше по размеру и ее легче модифицировать.

Четвертый метод — напрямую просмотреть исходный код веб-страницы и найти адрес загрузки. Некоторые видеосайты, такие как Xigua Video, могут это сделать.

Пятый способ — попытаться получить список загрузок m3u8, а затем загрузить его. Если вы получили URL-адрес m3u8, вы можете использовать некоторые инструменты загрузки, специфичные для m3u8, чтобы загрузить его. Я попробовал один или два, но они не идеальны. Либо скорость слишком медленная, либо операция громоздкая.

Вы можете использовать youtube-dl для прямой загрузки: youtube-dl <m3u8изurl>。Удобство есть удобство,Но поскольку суть заключается в использовании ffmpeg для загрузки (по оценкам, некоторые из этих специальных инструментов загрузки m3u8 похожи на этот),Вероятно, однопоточный,Во-первых, скорость относительно низкая.,Во-вторых, если что-то пойдет не так,Приходится начинать заново. Поэтому я обычно загружаю файл m3u8 вручную, а затем использую инструменты загрузки, такие как Internet Download Manager, загружаю видеофайл, а затем с помощью ffmpeg собираю его в один файл. файл.

Загрузите файл m3u8 вручную. Если вы хотите полениться, вы можете напрямую ввести ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i index.m3u8 -c copy my_movie.ts в командной строке для загрузки. Преимущества и недостатки такие же, как указано выше, при использовании YouTube-DL Download m3u8 то же самое.

Если вы делаете это вручную, первым шагом будет загрузка файла m3u8. Существует довольно хороший инструмент — загрузчик hls плагина для браузера Chrome, который может автоматически захватывать URL-адрес m3u8, что более удобно в использовании. Некоторые URL-адреса невозможно захватить с помощью этого инструмента. Вам необходимо щелкнуть страницу «Сеть» в браузере Chrome, затем найти URL-адрес, содержащий m3u8, а затем загрузить его вручную. Отдельные веб-сайты также должны изучить исходный код js, чтобы найти содержимое m3u8. Например, веб-сайт не может найти m3u8 на странице «Сеть». После анализа js он находит функцию foo(e.data), а e.data содержит содержимое m3u8. Поэтому добавьте точку останова в функцию, обновите страницу, и когда точка останова остановится, введите console.log(e.data); в консоли будет напечатано m3u8.

Существует два основных типа загружаемых файлов m3u8. У одного полный плейлист, а у другого только адрес m3u8:

#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1000000,RESOLUTION=1280×720 /foo/bar/index.m3u8

Для этого необходимо случайным образом найти URL-адрес видеоклипа на странице сети, например https://foo.com/1.ts, а затем объединить полный URL-адрес m3u8 https://foo.com/foo/bar/index. .m3u8, загрузите вручную, чтобы получить полный плейлист.

После получения списка воспроизведения сначала используйте программу, чтобы преобразовать его в файл списка, который можно легко импортировать с помощью инструмента загрузки:

Язык кода:javascript
копировать
        private void m3u8toList()
        {
            StringBuilder sb = new StringBuilder();
            var lines = File.ReadAllLines(@"C:\index.m3u8");
            foreach (string line in lines)
            {
                if (line.IndexOf("#") < 0)
                {
                    sb.AppendLine(line);
                }
            }
            File.WriteAllText(@"C:\foo.txt", sb.ToString());
        }

В плейлисте примерно два типа названий видеофайлов: одно обычное, например foo_001.ts, foo_002.ts и т. д., что более удобно, а другое нестандартное, например N3Atb.ts, 2BjMl.ts. и т. д. Это вызовет трудности при слиянии файлов на следующем шаге (если загружать напрямую с помощью ffmpeg, проблем не будет, а вот при ручной операции возникнут проблемы). Один из способов — использовать плагин DownthemAll и написать программу для создания специального списка загрузки:

Язык кода:javascript
копировать
var lines = File.ReadAllLines(@"C:\foo.txt");//Загрузить файл списка, по одному URL в строке
Язык кода:javascript
копировать
 StringBuilder sb = new StringBuilder(); 
 int count = 1;
 sb.AppendLine("<?xml version=\"1.0\"?>");
 sb.AppendLine("<metalink xmlns=\"urn:ietf:params:xml:ns:metalink\" version=\"4.0\" a0:version=\"3.0.8\" xmlns:a0=\"http://www.downthemall.net/properties#\">");
 sb.AppendLine("<generator>DownThemAll!/3.0</generator>");
 var date = (Int64)(DateTime.UtcNow .Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)) .TotalMilliseconds);
 var utcString = DateTime.UtcNow.ToString("r");
 sb.AppendLine("<published>" + utcString + "</published>");
 foreach (var line in lines)
 { 
   string serial = String.Format("{0:0000}", count);
   string url = line.Replace("&", "&amp;").Replace(">", "&gt;").Replace("<", "&lt;").Replace("\"", "&quot;");
   sb.AppendLine("<file name=\"" + serial + ".ts" + "\" a0:num=\"442\" a0:startDate=\"" + date.ToString() + "\" >");
   sb.AppendLine("<url priority=\"100\" a0:usable=\"" + url + "\">" + url + "</url>");
   sb.AppendLine("</file>");
   date = date + 4;
   count++;
 }
 sb.AppendLine("</metalink>");
 File.WriteAllText(@"C:\downloadList.meta4", sb.ToString());

Однако, поскольку скорость загрузки в Downthemall невысока, я не часто использую этот метод. Обычно я сначала использую другие инструменты загрузки, чтобы загрузить видеофайл, а затем использую следующую программу для переименования файла:

Язык кода:javascript
копировать
        private void renameDownloads()
        {
            var lines = File.ReadAllLines(@"C:\foo.txt");
            int count = 1;
            SortedList<string, string> mapping = new SortedList<string, string>();
            int idx = 0;
            foreach (var line in lines)
            {
                idx = line.LastIndexOf("/") + 1;
                mapping.Add(line.Substring(idx), string.Format("{0:0000}", count) + ".ts");
                count++;
            }
              var files = Directory.GetFiles(folder, "*.ts");
              foreach (var file in files)
              {
                 string fileName = Path.GetFileName(file);
                 File.Move(file, Path.Combine(folder, mapping[fileName]));
              }
        }

Некоторые видеофайлы в m3u8 зашифрованы, а скачанные ts-файлы невозможно открыть напрямую с помощью плеера. Обычно в файле есть разделы:

#EXT-X-KEY:METHOD=AES-128,URI=”https://foo.com/key.key”

В этом случае вам необходимо вручную загрузить файл key.key с этого URL-адреса, а затем использовать следующую программу для его расшифровки:

Язык кода:javascript
копировать
        private void decrypt()
        {
            var folder = @"C:\foo";
            byte[] encryptionKey = File.ReadAllBytes(@"C:\foo\key.key");

            StringBuilder sberror = new StringBuilder();
            var files = Directory.GetFiles(folder, "*.ts");
            for (int i = 0; i < files.Length; i++)
            {
                string fileName = Path.GetFileName(files[i]);
                string outputFile = Path.Combine(folder, Path.GetFileNameWithoutExtension(fileName) + ".mp4");
                using (FileStream outputFileStream = new FileStream(outputFile, FileMode.Create))
                {
                    byte[] encryptionIV = new byte[16];
                    using (FileStream inputFileStream = new FileStream(files[i], FileMode.Open))
                    {
                        try
                        {
                            using (var aes = new AesManaged { Key = encryptionKey, IV = encryptionIV, Mode = CipherMode.CBC })
                            using (var encryptor = aes.CreateDecryptor())
                            using (var cryptoStream = new CryptoStream(inputFileStream, encryptor, CryptoStreamMode.Read))
                            {
                                cryptoStream.CopyTo(outputFileStream);
                            }
                        }
                        catch (Exception ex)
                        {
                            sberror.AppendLine(fileName);
                        }
                    }
                }
            }
            if (sberror.Length > 0)
            {
                File.WriteAllText(@"C:\foo\error1.txt", sberror.ToString());
                MessageBox.Show("error");
            }
Язык кода:javascript
копировать
        }

Стоит отметить, что некоторые зашифрованные видео содержат незашифрованную рекламу. Обычно я удаляю эти объявления вручную, а затем расшифровываю их.

Последний шаг — объединить загруженные видеофайлы. Обычно я использую пакетный файл DOS для обработки:

Язык кода:javascript
копировать
for %%i in (*.ts) do echo file '%%i'>> t1.txt
pause
ffmpeg -f concat -safe 0 -i t1.txt -c copy final.mp4

Функция паузы – предоставить возможность ручной корректировки после формирования списка файлов. В некоторых случаях, например, если есть файлы 1.ts, 2.ts...10.ts, правильный порядок — от 1 до 10, но этот пакетный процесс может иметь ранг 10.ts после 1.ts, поэтому он необходима ручная регулировка.

Следует отметить, что некоторые файлы m3u8 имеют тег EXT-X-DISCONTINUITY, и иногда при слиянии с ffmpeg возникают ошибки. У меня нет хорошей идеи, я могу разделить видео только на два или три сегмента, что эквивалентно верхней и нижней частям или верхней, средней и нижней частям. Если количество сегментов не слишком велико, это так. все еще приемлемо.

Это общий метод загрузки.

Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/154252.html Исходная ссылка: https://javaforall.cn

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода