Прихващане на bTV Live stream

bTV имат доста слабичка защита на стрийма. Нова поне ползват криптиране на стрийма с hls.key, което не е никакъв проблем за чупене, но пак е нещо. бТВ се защитават само с един динамично генериран адрес, който обаче е твърде достъпен, поне според мен. Сменят масива с адреси всеки ден, но факта, че присъства статично в ajax адрес, който може да се отвори и прочете от всеки, прави цялата защита смешна. За любителите на кепчъринга и за тираджиите прилагам скромно туториалче. Използваните инструменти са: Firefox, wget, jq, ffmpeg.

И по-лесния вариант за прихващане на видеото само с Firefox.

С тази техника може да се прихване почти всеки видео стрийм или да се свали видео файл. Когато видеото е криптирано, може да се записва стрийма, но по-инстересно е да се свалят всички файлове с високо качество и да се декриптират ръчно, като се ползва hls-ключ и оригиналните ts-файлове.

Ето и простичък PHP-код, който върши цялата работа по екстрактването на линка:

<?php
$wpage = file_get_contents("https://btvplus.bg/live/");

preg_match("@url: +'([^']*)@", $wpage, $m);

$config_page = file_get_contents("https://btvplus.bg".$m[1]);

$j = json_decode($config_page, true);

echo $j['info']['file'];
?>

Трябва да се отбележи, че bTV детектват, дали url-адреса се зарежда от чужбина и го ограничават (с http response code 301), но е много вероятно самия стрийм да не е ограничен. Не съм го пробвал. Хубавото е, че веднъж гепен адреса на стрийма, може да се гледа цял ден.

————————

И един бонус – сорс код за C#, който гепва стринга и го плейва с ffplay. За целта ffplay трябва да е в директорията с компилираното exe или в променливата Path на обкръжението на Win.

using System;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;
using System.Diagnostics;


public class playBtv{
	static void Main(string[] args){
		string baseUrl = "https://btvplus.bg";
		string url1 = baseUrl + "/live/";
		ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
		WebClient client = new WebClient();

		string htmlCode1 = client.DownloadString(url1);
		string pattern = "url:";

		StringReader strReader = new StringReader(htmlCode1);
		string aLine, url2 = null;
		while(strReader.Peek() >= 0){
			aLine = strReader.ReadLine().Trim();

			if(aLine.Contains(pattern)){
				Match match = Regex.Match(aLine, @"([^']*)'([^']*)");
				url2 = baseUrl + match.Groups[2].Value;
				break;
			}
		}
		string htmlCode2 = client.DownloadString(url2);

		Match match2 = Regex.Match(htmlCode2, "(file\":\")([^\"]*)");
		string m3u8 = match2.Groups[2].Value.Replace("\\","");
		Process.Start("ffplay", m3u8);
	}
}

Компилира се с някой от наличните в Windows C# компилатори от .NET Frameworks. Примерно:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc /target:exe btv_play.cs

Share and Enjoy !

Shares

Обединяване на хоризонтално и вертикално позиционирано видео с ffmpeg

Понякога правя върховната глупост да снимам видео с телефона, като го държа вертикално. После се усещам и го завъртам както си трябва и правя още едно видео. А накрая ми се иска да ги обединя. Намирането на безплатен софтуер, който да слива подобен тип вертикално и хоризонтално разположени видео файлове ме затрудни. За това се върнах отново към класиката ffmpeg.

Стъпките за обединяване на 2 подобни видео файла са следните:

  • двата файла трябва да са с едни и същи кодеци
  • конвертиране на 2-та файла до TS-формат
  • напасване на двата файла по широчина и височина, като се добавя padding (отстояния) в картината на файла, сниман вертикално
  • обединяване на двата файла

Ще си помогна с един пример:

ffmpeg video join - vertical and horisontal

video1.mp4 – хоризонтално разположено с размери на картината 1920×1080.
video2.mp4 – вертикално разположено с размери на картината 1080×1920.
out_full.mp4 – изходния файл, след обединяването на двата

Използвам по-долните команди за ffmpeg са тествани под Win7, но вероятно ще работят и под Linux.

1
2
3
4
ffmpeg -i video1.mp4 -q 1 -f mpegts out1.ts
ffmpeg -i video2.mp4 -q 1 -vf "scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih),pad=1920:1080:(1920-iw)/2:(1080-ih)/2" -f mpegts out2.ts
 
ffmpeg -i "concat:out1.ts|out2.ts"  -c:a aac -b:a 128k -vcodec libx264 -preset slow out_full.mp4

Share and Enjoy !

Shares




Конвертиране на видео до webm, ogv, mp4, mkv – Ned Video Converter

Ned video converter - ogv, webm, mp4
Беше ми необходима проста програма за конвертиране на видео до webm и ogg video (ogv), която да ми позволява пълен контрол на изходния файл. Тъй като не намерих такава безплатна, освен конзолния ffmpeg, реших да спретна едно GUI за ffmpeg с просто кодиране в AutoIt. Чудих се за името на програмата и реших да не се правя на оригинален, затова е Ned video converter.
Програмата в момента конвертира до webm, avi, ogv, mp4, flv и mkv. Но позволява да се стартира кодиране до всякакъв формат, ако познавате инструментите на ffmpeg. Стартирането на процеса взима стринга от полето Command и така могат ръчно да се променят всички параметри. Например можем да зададем ръчно команда за конвертиране на видео до mp3-файл, като в полето Command въведем следния тринг:

ffmpeg -i <input> -c:a libmp3lame -b:a 256k -vn -f mp3 some_audio_file.mp3

Ned video converter - mp3
Разбира се ръчните настройки са само опционални, спокойно могат да се ползват вградените скромни опции на GUI-то.
Важно е да се отбележи, че при ресайзване на видео по широчина, тогава височината се променя в съотношение, за това зададената височина трябва да е кратна на 2. Това е причината понякога ресайването да не работи. Просто се въвежда нова стойност на широчината, увеличена или намалена с +1 (примерно 600 не работи, тогава се пробва с 601, 602 и т.н.) и се натиска бутона Generate Command.
Ако файловете се получават големи или с недобро качество е добре да се попрочете документацията на ffmpeg. Параметрите за конвертиране могат да се променят и от външния ini-файл, така че да паснат на конкретните нужди.
Прилагам и сорса, който е доволно прост. Отделил съм GUI-частта и фукциите от основния файл, за да има по-добра четимост.
При конжертиране на avi и mkv (matroska) съм задал да се използва параметъра -crf за контрол на качеството. По принцип за запазване на качеството, каквото е във входния файла, параметъра се сетва на -crf 23. За по-малък файл и по-лошо качество може да се остави на -crf 25 или повече. За по-добро качество на картината може да се пробва с -crf 19.
Сорса е абсолютно свободен за ползване, променяне, споделяне.
Изтегляне за 32 и 64bit Windows:
Ned_video_converter-32bit-0.02.zip
Ned_video_converter-64bit-0.02.zip
Ако има проблеми с програмката, моля да ги споделите в коментарите.
По-долу може да се види кратко видео с примерно конвертиране до webm и mp4 формати. Видеото е конвертирано до тези формати, за да мога да го вградя в тази страница. Видеото, което конвертирам е свален от YouTube клип Camila Cabello – Havana ft. Young Thug.

Share and Enjoy !

Shares




ffmpeg commands

Напоследък съм тотален фен на OpenSource видео конвертора ffmpeg.
Ето примери с някои прости команди, които вършат страхотна работа:

ffmpeg.exe -i all.vob -sameq -ss 75 -t 75 -vcodec libx264 test.mpg

-i all.vob – файла, който ще обработваме
-sameq – запази качеството на видеото
-ss 75 – почни да режеш от 75-та секунда
-t 85 – продължителност на рязането 85 секунди
-vcodec libx264 – видео кодек в който да се конвертира. Ако искаме да сме сигурни, че файла ще върви на всяка Windows машина, можем да ползваме -vcodec msmpeg4v2.

В по-новите версии на ffmpeg при рязане на видео има възможност да се зададе край на рязането спрямо началото и да се използва времеви формат – часове:минути:секунди.стотни:

ffmpeg.exe -i input.mp4 -ss 00:00:06.356 -to 00:00:11.560 test.avi

Някои допълнителни екстри:
Video:
-s – размер на картината
-b – видео битрейд
-r – скорост на кадрите
-croptop, -cropbottom, -cropleft, -cropright – рязане на картината в пиксели
-padtop, -padbottom, -padleft, -padright – поставя кантове до картината (padding), в този случай е добре да се зададе и -padcolor 000000 – цвят на кантовете в HEX-формат, в случая 000000 – черно.
-vn – не конвертирай никакво видео. Използва се за да се екстрактне аудиото.

Audio:
-acodec libmp3lame – задаване на кодек за аудиото
-acodec copy – използвай същия кодек за аудиото
-ab 128k – битрейд за аудиото
-ac 6 – задаване на аудио каналите
-an – без аудио

Обединяването на видео и аудио става просто като добави и двата файла в началото;

ffmpeg -i audio.wav -i video.m2v ...

Конвертиране на MPG видео до FLV с високо качество за качване по видео-порталите:

ffmpeg -i input.mpg -sameq -f flv -vcodec libx264 output.flv

—————————-
UPDATE: 05.09.2016
—————————-
Някои интересни команди за кепчъринг на онлайн видео стрийм

ffmpeg архива за Windows върви с някои интересни инструменти. Един от тях е ffplay, който е наистина необикновен видео-плеър.
Един пример, който показва възможностите за плейване на онлайн стрийм (телевизията е City TV) с ffplay:

ffplay -i "http://nodeb.gocaster.net:1935/CGL/_definst_/mp4:TODAYFM_TEST2/playlist.m3u8"

Можем да настроим ffplay да показва времето от началото на видеото:

ffplay -vf "drawtext=text='%{pts\:hms}':box=1:x=(w-tw)/2:y=h-(2*lh)" input.mp4

Ако съхраните в една директория mplayer и ffmpeg екзетата, ще можете да гледате отново същата телевизия, но през пайп с mplayer:

mplayer -cache 2000 -cache-min 99 "ffmpeg://http://nodeb.gocaster.net:1935/CGL/_definst_/mp4:TODAYFM_TEST2/playlist.m3u8"

Същото, но прекарано през ffplay:

ffmpeg -i "http://nodeb.gocaster.net:1935/CGL/_definst_/mp4:TODAYFM_TEST2/playlist.m3u8" -f matroska - | ffplay -i -

Понякога ffplay не може да закачи драйвера за саунда. Тогава можем предварително да включим този драйвер през променливите на обкръжението. При мен става и двата directsound или winmm. Примерно за Windows 7 можем в промпта да зададем следното:

set SDL_AUDIODRIVER=directsound
ffplay http://...

Записване на Desktop capture с ffmpeg под Windows:

ffmpeg -f gdigrab -i desktop -framerate 24 -vcodec libx264 -crf 23 out.mp4

За приключване на записа се натиска бутона q.

Ffmpeg е направо велик инструмент, който се ползва лесно и бързо, заради интуитивните му команди.

Генериране на малък по размер GIF от видео файл

ffmpeg -i StickAround.mp4 -filter_complex "[0:v] fps=12,scale=480:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse" SmallerStickAround.gif

Конвертиране на m3u8 стрийм до mp4:

ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i url_to.m3u8 -c copy out.mp4

Share and Enjoy !

Shares