Конвертация видеофайлов m3u8 (метод загрузки и объединения файлов m3u8)
Конвертация видеофайлов m3u8 (метод загрузки и объединения файлов m3u8)

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

1 фон

использоватьUCБраузерAppНекоторые веб-страницы можно легковидеоСкачать на локальный,если тебе повезет,Откройте каталог кеша, и вы увидите соответствующий файл mp4. но большую часть времени,Вы видите файл m3u8 и папку, состоящую из цифр и букв.,Как показано ниже.

Войдите в папку, и вы найдете кучу файлов данных. Хотя у них нет суффиксных имен, на самом деле это файлы медиафрагментов ts (Transport Stream). Каждый из них можно открыть индивидуально с помощью плеера и представляет собой сегментированные видеоролики продолжительностью в несколько секунд. Если вы хотите посмотреть полную версию, вы можете посмотреть ее только в автономном режиме в мобильном браузере.

2 Введение в HLS и M3U8

HLS (HTTP Live Streaming) — это решение для потоковой передачи мультимедиа, основанное на протоколе HTTP, разработанное Apple для мобильных устройств, таких как iPhone, iPod, iTouch и iPad. В технологии HLS веб-сервер предоставляет клиенту аудио- и видеопотоки практически в реальном времени, используя стандартный протокол HTTP. Таким образом, пока вы используете технологию HLS, вы можете напрямую обеспечивать прямую трансляцию по требованию и в обычных HTTP-приложениях. Приложения, связанные с видео, в App Store в основном используют эту технологию. Основной принцип — разрезать видеофайл или видеопоток на небольшие части (ts) и создать индексный файл (m3u8). Поддерживаемая кодировка видеопотока — H.264, а кодировка аудиопотока — AAC. Другими словами, настоящие видеофайлы находятся в папке на первом изображении. m3u8, соответствующий каждой папке, используется для указания видеоплагину, как последовательно воспроизводить находящиеся внутри ts-файлы, тем самым представляя пользователю полное видео. .

3 Операции командной строки

3.1 Программные инструменты

Вам нужно использовать командные строки ffplay и ffmpeg.

3.2 Используйте ffplay для просмотра

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

Язык кода:javascript
копировать
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.000000,
/storage/896D-1F02/Android/data/com.UCMobile/files/UCDownloads/VideoData//94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n0
#EXTINF:6.360000,
/storage/896D-1F02/Android/data/com.UCMobile/files/UCDownloads/VideoData//94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n1
#EXTINF:4.000000,
/storage/896D-1F02/Android/data/com.UCMobile/files/UCDownloads/VideoData//94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n2
#EXTINF:2.080000,
……

Нет сомнений в том, что после копирования видеофайлов в файловую систему Linux абсолютные пути, указывающие на машину Android, должны быть заменены абсолютными путями или относительными путями на компьютере. Как показано ниже.

Язык кода:javascript
копировать
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.000000,
./94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n0
#EXTINF:6.360000,
./94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n1
#EXTINF:4.000000,
./94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n2
#EXTINF:2.080000,
……

На этом этапе убедитесь, что файл m3u8 и соответствующая папка 94bad5572f90065418914b4481bf7d1ae19403dc находятся в одном родительском каталоге, а затем введите

Язык кода:javascript
копировать
ffplay XXX.m3u8

Хорошо, ты действительно думаешь, что это сделано? См. отчет об ошибке ниже.

Язык кода:javascript
копировать
Filename extension of './94bad5572f90065418914b4481bf7d1ae19403dc/Y2hlbmppbmdjb25n1395' is not a common multimedia extension, blocked for security reasons.

очевидно,Из соображений безопасности,Официальный патч блокирует ts файлы без суффиксных имен.,Подробную информацию см.Анализ уязвимостей чтения произвольных файлов FFmpeg.

Самое прямое решение — добавить суффикс ts пакетно в файлы m3u8 и соответствующие папки. Первое легко объяснить, но второе требует помощи команд в каталоге файлов.

Язык кода:javascript
копировать
ls -A | xargs -i mv { 
   } { 
   }.ts

Конечно, у нас есть более простой способ — добавить параметры в команду ffplay.

Язык кода:javascript
копировать
ffplay -allowed_extensions ALL XXX.m3u8

После успешного запуска команды ffplay появится интерфейс воспроизведения, но нет кнопок управления. Вы можете выполнять только некоторые простые интерактивные операции с помощью мыши и сочетаний клавиш. Например, пробел означает паузу/продолжение, клавиши со стрелками влево и вправо — вперед и назад, двойной щелчок левой кнопкой мыши означает полноэкранный режим, а сдвиг правой кнопки мыши влево или вправо означает быструю перемотку вперед и назад и т. д.

3.3 Использование ffmpeg для перекодирования

Для преобразования всего видео в формат mp4 требуется всего одна простая строка команды.

Язык кода:javascript
копировать
ffmpeg -allowed_extensions ALL -i XXX.m3u8 -c copy aaa.mp4

в: За опцией -i следует входной файл, который является индексом m3u8; -c copy указывает на копирование всех потоков, что эквивалентно -acodec copy -vcodec copy; aaa.mp4 — выходной файл.

4 Работа с графическим интерфейсом

Если установлен графический интерфейс управления, такой как «Видео», вам нужно только изменить информацию о пути в m3u8 со ссылкой на предыдущий раздел, а затем вы можете напрямую добавить воспроизведение, вообще не учитывая расширение имени файла (конечно, это будут иметь определенные риски для безопасности), а кнопки управления будут относительно полными. Однако при перекодировании я действительно не нашел хорошего программного обеспечения для работы с графическим интерфейсом. Я попробовал фабрику формата Wine+, которая принудительно объединяла медиапотоки ts независимо от индексной информации m3u8. Однако я обнаружил, что количество видео, добавляемых фабрикой формата, было ограничено при объединении. Для некоторых больших фильмов уже были созданы сотни или тысячи файлов ts. добавлено. Просто превысило. Более того, Format Factory по умолчанию не копирует и не объединяет потоки ts напрямую, а кодирует все аудио- и видеопотоки от начала до конца, что потребляет много аппаратных ресурсов. Лично я считаю, что многие графические интерфейсы являются подводными камнями для перекодирования m3u8, но командная строка ffmpeg — самая простая и надежная.

Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/129157.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 и детали кода