Когда моя жена снова попросила меня скачать видео Tencent...

внешний интерфейс JavaScript

«Я второй день участвую в ноябрьских челленджах, подробности мероприятия Посмотреть:Вызов последнего обновления 2021 г."

Мы поженились!

Да, на этот раз это не моя девушка, это моя жена!

WechatIMG56.jpeg

WechatIMG57.jpeg

WechatIMG58.jpeg

Почти месяц спустя моя жена попросила меня скачать для нее видео Tencent.Если вы скачаете его по содержанию последнего исследования, то сможете загрузить и объединить его шаг за шагом, но это очень хлопотно.Не программисты просто попробуй решить беды?Такой хлопотный шаг,есть ли что попроще? Да!Конечно есть.Много простых инструментов.В прошлом выпуске многие друзья рекомендовали мне разные инструменты.Я не проверяла их все здесь.Я могу их перечислить.Студенты,кому они нужны,могут их попробовать.Зацените метод, который я подготовил для слабины ниже.

Ментальное путешествие

Изначально я думал о своих предыдущих шагах, снова грузился с безголовым браузером, а потом использовал код для загрузки фрагментов ts, а потом слил с ffmpeg на автомате, но как бы все же немного беда, а потом пошел искать npm момент ключевые слова: m3u8tomp4

image.png

m3u8-to-mp4

Итак, я нажал на первый пакет: m3u8-to-mp4.

image.png

Нани? Этот пакет только одной версии, он используется уже 3 года, а еженедельных загрузок еще довольно много.

image.png

Вот я и подумал, что этот пакет либо очень офигенный, он раз и навсегда решил проблему конвертации m3u8 в mp4, поэтому он не обновлялся уже 3 года, либо автор забыл, что у него до сих пор есть этот пакет

Поэтому я использовал этот пакет, который не поддерживался и не обновлялся в течение 3 лет.

Использование также очень простое, просто скопируйте пример. код показывает, как показано ниже:


var m3u8ToMp4 = require("m3u8-to-mp4");
var converter = new m3u8ToMp4();
(async function() {
    var url = "https://apd-666945ea97106754c57813479384d30c.v.smtcdns.com/omts.tc.qq.com/AofRtrergNwkAhpHs4RrxH2_9DWLWSG8xjDMZDQoFGyY/uwMROfz2r55kIaQXGdGnC2deOm68BrdPrRewQlOzrMAbixNO/svp_50001/cKAgRbCb6Re4BpHkI-IlK_KN1VJ8gQVK2sZtkHEY3vQUIlxVz7AtWmVJRifZrrPfozBS0va-SSJFhQhOFSKVNmqVi165fCQJoPl8V5QZBcGZBDpSIfrpCImJKryoZOdR5C0oGYkzIW77I4his7UkPY9Iwmf1QWjaHwNV2hpKv3aD9ysL_-YByA/szg_9276_50001_0bc3uuaa2aaafmaff4e3ijqvdjodbwsqadka.f304110.ts.m3u8?ver=4"
  await converter
    .setInputFile(url)
    .setOutputFile("dummy.mp4")
    .start();
  console.log("File converted");
})();

Адрес видеоV.QQ.com/small/afraid/V331…

Затем видео успешно конвертируется, вау!

so easy ! so beautiful!

принцип

Из любопытства хочу посмотреть, как трансформируется эта сумка.

Поэтому я нажимаюm3u8-to-mp4этот файл пакета

Содержимое файла пакета следующее

image.png

только один файл?

Потом я открыл index.js, всего 64 строки 😂

Все коды следующие

/**
* @description M3U8 to MP4 Converter
* @author Furkan Inanc
* @version 1.0.0
*/

let ffmpeg = require("fluent-ffmpeg");

/**
* A class to convert M3U8 to MP4
* @class
*/
class m3u8ToMp4Converter {
 /**
  * Sets the input file
  * @param {String} filename M3U8 file path. You can use remote URL
  * @returns {Function}
  */
 setInputFile(filename) {
   if (!filename) throw new Error("You must specify the M3U8 file address");
   this.M3U8_FILE = filename;

   return this;
 }

 /**
  * Sets the output file
  * @param {String} filename Output file path. Has to be local :)
  * @returns {Function}
  */
 setOutputFile(filename) {
   if (!filename) throw new Error("You must specify the file path and name");
   this.OUTPUT_FILE = filename;

   return this;
 }

 /**
  * Starts the process
  */
 start() {
   return new Promise((resolve, reject) => {
     if (!this.M3U8_FILE || !this.OUTPUT_FILE) {
       reject(new Error("You must specify the input and the output files"));
       return;
     }

     ffmpeg(this.M3U8_FILE)
       .on("error", error => {
         reject(new Error(error));
       })
       .on("end", () => {
         resolve();
       })
       .outputOptions("-c copy")
       .outputOptions("-bsf:a aac_adtstoasc")
       .output(this.OUTPUT_FILE)
       .run();
   });
 }
}

module.exports = m3u8ToMp4Converter;

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

???

Ты стоишь на плечах великанов, ты укутываешься

см. далееfluent-ffmpegКак этот пакет реализует преобразование?

image.png

Затем мы ищем метод .run в этой папке пакета, чтобы найти конкретное место выполнения.

image.png

С многолетним опытом cv кажется, что он должен быть в файлеprocessor.js, а затем мы открываем файл и находим метод

image.png

Глядя на код, я заметил этот код

image.png

Поскольку все они являются инструментами, основанными на ffmpeg, нижним уровнем является вызов команды ffmpeg.

image.png

Эти суждения должны фиксировать исключения из результатов, поэтому давайте взглянем на конечную точку в этом основном коде.

image.png

Кажется, он вызывает несколько параметров командной строки

Так у меня появилась смелая идея!

image.png

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

image.png

Я не ожидал, что получится, на самом деле успех неизбежен, потому что все упирается в пакет ffmpeg, но я делаю это вручную, а фреймворк — это код для сращивания этой команды.

В остальное время смотрелfluent-ffmpegдругой код, он делает много вещей, например, обращается к книге, чтобы найти абсолютный путь к ffmpeg, собирает информацию об исключении для результата ffmpeg и т. д.

следовать за

Теперь процесс загрузки видео для моей жены выглядит так

  • Перейдите к Tencent Video на веб-странице, чтобы найти ссылку m3u8.
  • Вставьте URL-адрес в эту мою узловую программу.
  • Выполнение заказа
  • Счастливая жена! 😄

Метод, упомянутый пользователями сети

  • N_m3u8DL-CLI
  • Профессиональный плагин chrmoVideo Downloader.
  • Downie
  • Плагин IDM
  • you-get
  • Neat Download Management

обо мне

WeChat: cjs764901388

Общий номер: xstxoo

Мой публичный номер: Одноклассник Комацу

Я могу сосредоточиться на том, чтобы учиться с передним концом знания, как технология, используемая в локальной записи жизни, и выглядеть 🧐