Скрипт автоматического преобразования m3u в m3u8

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

Где используются плейлисты M3U/M3U8?

Первоначально файлы формата M3U служили для создания списков воспроизведения музыкальных композиций в аудиоплеере Winamp. Их и сегодня используют с той же целью, но реже. В настоящее время M3U и M3U8-плейлисты используются преимущественно для создания списков воспроизведения онлайн-видео и интернет-телеканалов (IPTV).

Полностью технологию IPTV мы рассматривать не будем. Скажем лишь то, что предназначена она для вещания телеканалов в сети интернет в режиме реального времени. И чтобы мультимедиа-проигрыватель смог подключиться к такому ТВ-каналу (либо онлайн-видео) и затем воспроизвести его, ему потребуется URL-ссылка (адрес в интернете) на данный телеканал или потоковое видео. И для хранения таких ссылок, а также некоторых других данных, как раз и используются M3U/M3U8-плейлисты.

Кстати, плейлисты, использующиеся для просмотра онлайн-телеканалов, принято именовать как «IPTV-плейлисты».

Где взять M3U/M3U8-плейлисты для IPTV?

Самый простой способ — скачать в интернете. Многие современные сайты посвящены тематике IPTV. Администраторами таких сайтов (либо пользователями тематических форумов, блогов, групп в соцсетях и т.д.) выкладываются ссылки на скачивание IPTV-плейлистов, как в M3U, так и M3U8 форматах. Их можно сразу же добавить в видеоплеер (поддерживающий воспроизведение IPTV-каналов) либо сначала отредактировать с целью расширения/сокращения списка воспроизведения по своему вкусу.

IPTV-плейлисты можно создать самостоятельно (данном случае понимается создание M3U/M3U8-файла на жестком диске). Сделать это просто:

Создайте на жестком диске обычный текстовый документ:

m3u

Измените расширение созданного документа с 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 строки текста:

  1. «#EXTM3U» — самая первая строка (заголовок), описывающая формат текстового файла. В данном случае она означает, что перед нами M3U-формат. Данный атрибут используется всего один раз в самом начале.
  2. «#EXTINF:» — строка, начинающаяся с данного атрибута, используется для технического описания каждого медиафайла в плейлисте: длительность, название телеканала/потокового видео/музыкальной композиции, исполнитель, логотип и т.д.
  3. И сам 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/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Умное телевидение для дома
Добавить комментарий