Содержание
2015-09-03
Конвертер m3u8 в m3u с сохранением рубрик плейлистов. В поисковиках можно найти много подобных конвертеров и даже лучше по описаниям, но на деле ничего у них не работает, к тому же это один и тот же нерабочий скрипт, который размещают на разных сайтах. Пришлось самому написать код, делал для себя локально, но оказалось такой конвертер нужен многим, поэтому выкладываю. Конвертер m3u8 в m3u писался под плейлист “эдема” когда-то бесплатного iptv. Итак, вы где-то достали список адресов каналов в формате m3u8, но ваш любимый плеер его не кушает, ему нужен m3u. Сначало нужно скачать плейлист, открываем его в блокноте и копируем все содержимое в левое окно. Далее жмем кнопку “конвертировать” и получаем тоже самое в формате m3u в правом окне и даже с сохраненными рубриками для IP-TV Player. Теперь все это копируем обратно в наш файл, сохраняем и изменяем расширение файла с m3u8 на m3u. Готово! ! Если вы используете списки каналов в m3u8 и они у вас без рубрик, то конвертировать не нужно, просто измените расширение на m3u и IP-TV Player его прочитает. ! Результаты тестировал только на IP-TV Player, под другие программы возможно рубрики указывать надо по другому.Как сделать самому цифровое ТВ ✏ Все для IPTVСледующееПредыдущееГлавная страница
Формат M3U и его разновидность M3U8 — это плейлисты, содержащие в себе техническую информацию о медиафайлах (аудио и/или видео), которые будут воспроизведены мультимедиа-проигрывателем. Хотя данный формат появился довольно давно (в первые годы существования аудиоплеера Winamp), массово распространяться он начал относительно недавно — вследствие увеличения скорости доступа в интернет и развития технологий потоковой передачи медиаконтента.
Что представляют собой плейлисты формата M3U и M3U8? Где они используются? Как их открыть? В чем их отличие форматов M3U и M3U8? Как создавать плейлисты M3U и M3U8? Постараемся ответить на эти вопросы максимально простым языком.
Что такое M3U и M3U8 плейлисты?
Технически, данные плейлисты представляют собой обыкновенный текстовый файл. Все занесенные в него данные, следовательно, также являются простым текстом. Это говорит о том, что файлы формата M3U и M3U8 можно открывать, редактировать и создавать при помощи любого текстового редактора, “понимающего” формат TXT. К таким редакторам относится стандартное приложение Windows — «Блокнот» (Notepad).
Кроме того, что плейлисты рассматриваемого формата являются текстовыми файлами, они также характеризуются специфическим содержанием. Чтобы мультимедиа-проигрыватель смог нормально работать с M3U/M3U8-файлами, последние необходимо заполнять с соблюдением определенных правил.
Где используются плейлисты M3U/M3U8?
Первоначально файлы формата M3U служили для создания списков воспроизведения музыкальных композиций в аудиоплеере Winamp. Их и сегодня используют с той же целью, но реже. В настоящее время M3U и M3U8-плейлисты используются преимущественно для создания списков воспроизведения онлайн-видео и интернет-телеканалов (IPTV).
Полностью технологию IPTV мы рассматривать не будем. Скажем лишь то, что предназначена она для вещания телеканалов в сети интернет в режиме реального времени. И чтобы мультимедиа-проигрыватель смог подключиться к такому ТВ-каналу (либо онлайн-видео) и затем воспроизвести его, ему потребуется URL-ссылка (адрес в интернете) на данный телеканал или потоковое видео. И для хранения таких ссылок, а также некоторых других данных, как раз и используются M3U/M3U8-плейлисты.
Кстати, плейлисты, использующиеся для просмотра онлайн-телеканалов, принято именовать как «IPTV-плейлисты».
Где взять M3U/M3U8-плейлисты для IPTV?
Самый простой способ — скачать в интернете. Многие современные сайты посвящены тематике IPTV. Администраторами таких сайтов (либо пользователями тематических форумов, блогов, групп в соцсетях и т.д.) выкладываются ссылки на скачивание IPTV-плейлистов, как в M3U, так и M3U8 форматах. Их можно сразу же добавить в видеоплеер (поддерживающий воспроизведение IPTV-каналов) либо сначала отредактировать с целью расширения/сокращения списка воспроизведения по своему вкусу.
IPTV-плейлисты можно создать самостоятельно (данном случае понимается создание M3U/M3U8-файла на жестком диске). Сделать это просто:
Создайте на жестком диске обычный текстовый документ:
Измените расширение созданного документа с TXT на M3U или M3U8.
Теперь скачанный или созданный плейлист можно отредактировать, и для этого его сначала нужно открыть.
Как открывать файлы M3U и M3U8?
Откроем созданный/скачанный плейлист в приложении «Блокнот». Хотя в нем нет отдельной функции по открытию и работе с M3U/M3U8-файлами, их все равно можно добавить в редактор. Сделать это можно различными способами:
Два раза кликнуть по M3U/M3U8-файлу, а затем выбрать программу «Блокнот» в окне выбора приложения.
Кликнуть правой кнопкой мыши по M3U/M3U8-файлу, выбрать в контекстном меню пункт «Открыть с помощью», затем «Блокнот».
Сменить расширение файла M3U/M3U8 на TXT, а затем просто кликнуть два раза по файлу, и тот будет открыт в «Блокноте».
Запустить программу «Блокнот», открыть в ней меню «Файл, затем пункт «Открыть…». В диалоговом окне «Блокнота» установить в выпадающем меню снизу справа «Все файлы (*.*)», а затем выбрать плейлист, сохраненный на жестком диске.
После открытия плейлиста вы увидите его содержимое, которое будет выглядеть примерно следующим образом:
Мы еще вернемся к описанию содержимого плейлистов и рассмотрим процесс их наполнения нужной информацией.
В чем различие между M3U и M3U8 форматами плейлистов?
Основное и единственное различие между данными форматами заключается в том, что в M3U-файлах используется кодировка символов Latin-1, а в M3U8 — кодировка UTF-8. Но если говорить простыми словами, то это можно объяснить следующим образом:
Плейлисты M3U не поддерживают никаких других символов (букв, цифр и т.д.), кроме как тех, что присутствуют в западноевропейских языках. В число ограничений также вошел и русский язык.
Если в M3U-плейлисте ввести название телеканала, фильма, музыкальной композиции русскими буквами, то в видеоплеере они примут вид, т.н. «кракозябров»:
То же касается и путей/ссылок к медиафайлам и их собственных имен. Медиаплеер попросту не сможет найти файл для проигрывания в сети/на диске, если ссылка/путь до него или имя содержат русские (нелатинские) символы.
Именно поэтому и был создан формат M3U8. Т.к. в нем используется кодировка символов UTF-8, то он может содержать русские (и не только) буквы.
Как правильно заполнять M3U/M3U8-плейлисты?
В M3U/M3U8-плейлистах, как минимум, присутствуют 3 строки текста:
- «#EXTM3U» — самая первая строка (заголовок), описывающая формат текстового файла. В данном случае она означает, что перед нами M3U-формат. Данный атрибут используется всего один раз в самом начале.
- «#EXTINF:» — строка, начинающаяся с данного атрибута, используется для технического описания каждого медиафайла в плейлисте: длительность, название телеканала/потокового видео/музыкальной композиции, исполнитель, логотип и т.д.
- И сам URL-адрес медиафайла в интернете (но можно указывать и локальный путь к файлу, хранящемуся на жестком диске).
Вот пример самого простого IPTV-плейлиста, состоящего из двух элементов (описание + ссылка на телеканал):
#EXTM3U
#EXTINF:-1,Discovery Channel
http://78.157.230.19/streaming/discovery/364/gpu_tvrecw/playlist.m3u8
#EXTINF:-1,National Geographic
http://178.124.183.5/hls/CH_NATGEO/variant.m3u8?version=2
Обратите внимание на часть строки «-1», которая стоит сразу после «#EXTINF:». Она означает, что продолжительность медиафайла неизвестна. В IPTV-плейлистах всегда используется значение «-1» или «0», т.к. онлайн-телеканал является потоковым видео, не имеющим явного окончания.
С «Discovery Channel» и «National Geographic» все итак понятно — это названия телеканалов. В видеопроигрывателе (в данном случае — IPTV-плеере) они будут отображены так, как написано в этой части строки.
Касательно ссылок. Они могут иметь различное написание:
- Явно указывать на файл, т.е. оканчиваться именем воспроизводимого файла. Ссылки формата: «http://путь/video.mp4».
- Указывать на видеопоток. Это ссылки формата: «http://путь:8080». Как видно, в таких ссылках присутствует номер сетевого порта, по которому проигрыватель будет обращаться к серверу. В них могут присутствовать и другие параметры, например, формат потока данных (все зависит от способа вещания онлайн-видео/телеканала в сети).
- Указывать на другие плейлисты. Ссылки формата: «http://путь/playlist.m3u» или «http://путь/playlist.m3u?version=2» (с указанием версии плейлиста). Именно такие ссылки использованы в нашем примере выше. Они, наравне со ссылками предыдущего формата, используются для создания IPTV-плейлистов.
В IPTV-плейлистах также могут использоваться дополнительные необязательные атрибуты. Вот три наиболее востребованных атрибута:
- tvg-logo = “ссылка на изображение”. При помощи этого атрибута задается иконка для воспроизводимого телеканала, которая будет отображена рядом с его названием в IPTV-плеере.
- tvg-name = “идентификатор телепрограммы”. Данный атрибут служит для отображения программы передач воспроизводимого телеканала, если таковая была предоставлена вещающей телекомпанией.
- tvg-shift = “часы” (-23 … +23). Атрибут, используемый для коррекции времени отображаемой телепрограммы (используется только вместе с «tvg-name»).
Дополнительные атрибуты заносятся в строку «#EXTINF:» сразу после указания продолжительности медиафайла через пробел, например:
#EXTINF:-1 tvg-logo =” http://путь/img.jpg” tvg-name=” Discovery” tvg-shift=”-2″,Discovery Channel
Версия: 3.0.0
Системные требования: ОС Windows Vista и выше, 1024 Мб ОЗУ, 350 Мб свободного пространства HDD
Относительно недавно переехал на GNU/Linux. Преобразовывая плей-листы от foobar2000 в .m3u, заметил, что бывают еще .m3u8. Оказывается, это тот же .m3u, но в кодировке UTF-8. Непорядок, подумал я, и решил привести всё в кошерный вид, т.е. перевести списки .m3u в .m3u8, т.к. все файлы храню в UTF-8. Этих самых плей-листов у меня довольно много (более 100), пэтому решил написать скрипт на баше. Поскольку музыка была скопирована с NTFS раздела на раздел ext4 – кодировка всех файлов (плей-листов) была CP1251, а права всех файлов включали в себя бит «исполняемый» – это я тоже решил пофиксить. Итак, что делает написанный скрипт:
- устанавливает стандартные права на файлы
- устанавливает стандартные права на папки
- преобразовывает все плейлисты из .m3u в .m3u8
Реализован «тихий» и подробный режимы выполнения, предусмотрено аккуратное преобразование списков (старые будут удалены, только если преобразование пройдёт успешно); выявлен и пофикшен баг кривого именования русских файлов (мой Debian Squeeze в качестве sh использует dash, он и тупил – bash точно правильно отрабатывает). Представленный ниже листинг скрипта нужно сохранить как «m3migr», и сделать его исполняемым («chmod +x m3migr»). Запуск — “./m3migr <каталог_с_музыкой>” — тихий режим, или “./m3migr -v <каталог_с_музыкой>” — выведет все действия в консоль. Полученные после преобразования плей-листы протестированы на Amarok 2.3.0 – всё работает. Собственно, сам скрипт:
#!/bin/bash # NOTE: не использовать /bin/sh - портит русские имена файлов # Скрипт автоматической миграции музыкальных файлов из Windows # Преобразовывает .m3u в .m3u8 и устанавливает стандартные # права на все файлы # --------------------------------- ФУНКЦИИ ------------------------------------ # Функция преобразования m3u плейлиста в m3u8 (UTF-8) convert_m3u() { old_filename="$1" # .m3u new_filename="${1}8" # .m3u8 if [ "$is_verbose" = "true" ]; then printf "convert "${old_filename}" to "${new_filename}"\n" fi iconv -f CP1251 -t UTF-8 "$old_filename" > "$new_filename" ls_tmp=$(ls -s "$new_filename") new_file_size=${ls_tmp%% *} if [ -f "$new_filename" ] && [ -n "$new_file_size" ] && [ "$new_file_size" -gt 0 ]; then rm -f "$old_filename" rm -f "${old_filename}~" rm -f "${new_filename}~" fi } # Функция установки прав для файлов chmod_file() { if [ -f "$1" ]; then # для файлов if [ "$is_verbose" = "true" ]; then printf "change mode for file "${1}"\n" fi chmod 644 "$1" # - rw- r-- r-- fi } # Функция установки прав для директорий chmod_dir() { if [ -d "$1" ]; then # для директорий if [ "$is_verbose" = "true" ]; then printf "change mode for dir "${1}"\n" fi chmod 755 "$1" # d rwx- r-x r-x fi } # ---------------------------- ТЕЛО ПРОГРАММЫ ---------------------------------- is_verbose="false" # Проверка переданных аргументов if [ "$1" = "-v" ] || [ "$1" = "--verbose" ]; then is_verbose="true" shift fi if [ -d "$1" ]; then music_dir="$1" else printf "usage: m3migr [{-v | --verbose}] music_dir\n" exit 1 fi printf "Запуск приложения...\n" sleep 1 printf "Изменение прав для файлов...\n" cur_file="" find "$1" -name "*" -type f -print | while read cur_file do chmod_file "$cur_file" done sleep 1 printf "Изменение прав для директорий...\n" cur_dir="" find "$1" -name "*" -type d -print | while read cur_dir do chmod_dir "$cur_dir" done sleep 1 printf "Преобразование всех m3u плейлистов в m3u8...\n" cur_file="" find "$1" -name "*.m3u" -type f -print | while read cur_file do convert_m3u "$cur_file" done printf "\nOK!\n" exit 0
Список использованной литературы
1. Нейл Мэтью, Ричард Стоунс. Основы программирования в Linux, 4-е издание. Глава 2 2. Конспект по Bash на LOR 3. Habrahabr. Основы Bash, часть 1 4. Habrahabr. Основы Bash, часть 2Используемые источники:
- http://www.www-tv.ru/2015/09/m3u8-m3u.html
- https://www.comboplayer.ru/article/m3u-m3u8-playlists
- https://habr.com/ru/post/95210/