Sep 20

How to get MP3 file from a WebM video

Reading time: < 1 minute Another title for this post could be: "Getting audio from video clips". Because you could do it with MP4 (Mpeg4), WebM, Mov, FLV, etc. We are going to use ffmpeg to that:

ffmpeg -i input_file.webm -ab 128k -ar 44100 out_file.mp3

The meaning of the parameters:

  • ab: the audio bitrate in bps
  • ar: the audio sample rate in hz

And if you have a directory with a lot of files to convert you could use:

find . -name "*.webm" -print0 |while read -d $'\0' file; do ffmpeg -i "$file" -ab 128k -ar 44100 -y "${file%.webm}.mp3";done

Pay attention to “find” and “while read” commands combinations because we want to support files with spaces.

I hope this is as useful for you as for me.

Sep 16

RTMP source to HLS (HTTP Live Streaming) Apple

Reading time: 2 – 3 minutes

I just solved a very specific problem and I have to write some notes here to remember the solution. Given a RTMP source we have to stream the content to Apple devices like iPad, iPhone and iPod because RTMP couldn’t be played using Safari browser.

If we need to play streaming on Apple devices the best solution is convert it to HLS and publish generated files using HTTP server.

To solve this issue I use rtmpdump and vlc. Firstly rtmpdump gets video stream from source. Secondly the stream is sent to vlc and finally vlc transcodes de video and audio and outputs small .ts files and one .m3u8 index file.

The command is something like this:

rtmpdump -v -r "$RTMP" | sudo -u xymon vlc -I dummy fd://0 vlc://quit --sout="#transcode{width=320,height=240,fps=25,vcodec=h264,vb=256,venc=x264{aud,profile=baseline,level=30,keyint=30,ref=1,nocabac},acodec=mp3,ab=96,audio-sync,deinterlace,channels=2,samplerate=44100}:std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=$M3U8,index-url=$TS_URL},mux=ts{use-key-frames},dst=$TSF}"

Variables descriptions are:

RTMP=rtmp://example.tld/path/stream_id
WD=/local_path
TS=live-####.ts
TSF=$WD/$TS
TS_URL=http://example.tld/path/$TS
M3U8=$WD/live.m3u8

Then create an HTML file, for example live.html, with a reference to .m3u8 file, the relevant code of the HTML file is like this:

<video width="320" height="240"><source src="http://example.tld/path/live.m3u8" /></video>

A simple code to public files via HTTP:

python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"

Then we only need to open Safary browser in Apple device and set the proper URL, in our case:

http://example.tld/path/live.html

IMPORTANT NOTE: the audio output have to be with two channels and a sample rate of 44KHz in other cases the audio fails.

Aug 23

Entenent els frames I, P i B

Reading time: 2 – 4 minutes

Al sentir parlar de formats de video, codecs, DivX, MPEG4, etc. sovint surten a la conversa termes com ara els I-frame, P-frame i B-frame. Cansat de que em soni a xinès he decidit fer-me un petit resum de què és tot plegat, sempre des del punt de vista d’algú que en sap ben poc d’aquests temes.

Podem dividir els ‘frames’ de video en 3 tipus:

  • I-Frame: també anomenat keyframe. No té cap frame de referència i pot ser decodificat per si mateix. Podem pensar que és algo semblant a un JPEG.
  • P-Frame: El contingut del mateix és dedueix d’un frame previ de tipus I o P, és impossible decodificar-lo sense mirar aquesta referència.
  • B-Frame: per decodificar-los cal mirar els frames anteriors i següents de tipus I i P.

Aquest últim tipus de frames són interessant per dues raons:

  • Són fàcils de predir
  • No impacten en la qualitat dels frames següents

Degut a que els B-frames depenen del passat i el futur, llavors el decodificador li calen frames I-P del passat i el futur per poder decodificar el frame B. Això ens porta als conceptes PTS/DTS.

  • PTS Presentation Time Stamp: també podem entendre’l com una forma de saber el número de frame, ordre en que es poden veure els frames decodificats.
  • DTS Decoder Time Stamp: ordre en que es processen els frames per ser decodificats.

Un exemple, per entendre-ho millor:

  • Suposem que això és un petit video: I-0 B-1 B-2 P-3
  • L’ordre DTS seria: I-0 P-3 B-1 B-2

Per tal de simplificar les coses el video s’enmagatzema en l’ordre DTS.

El problema

Arribat en aquest punt podeu imaginar-vos el problema que suposa mostrar un video en ordre, ja que el decodificador ha d’anar composant els frames per mostrar-los am és d’inserir frames on no n’hi han per mostrar el frame que toca.

DIVX (i Xvid)

Aquests famosos codecs per tal de d’atacar aquest problema fan servir un petit truc. La idea seria usar una variant dels frames PB i empaqueten diversos frames en un. Això fa que les aplicacions es pensin que només hi ha un frame i el codec oculta la resta.

Per exemple, si tenim un fitxer que te empaquetat el següent:

In (0 3 1 2) - - - ...

el codec haurà de treure això:

Out 0 1 2 3 ...

El codec posa frames de tipus ‘null’ en el lloc on hi haurien d’haver els frames que no té pel fet de tenir-los empaquetats en un frame. Els codecs ja saben que quan reben un frame null han de descartar-los.

Des del punt de vista del codificador, és important fixar-nos que no s’introdueix un delay corresponent als frames nulls. En un fitxer AVI no hi ha cap relació entre el PTS/DTS guardada enlloc per tal d’informar al decoder quan aquest ha de reproduir.

Jul 09

Formats gràfics CIF

Reading time: 2 – 3 minutes

CIF (Common Intermediate Format), també conegut com FCIF (Full Common Intermediate Format), és un format usat per estandaritzar les resolucions horitzontals i verticals en pixels de les senyals de video (seqüències YCbCr), aquest nomenclatura es va proposar a l’estàndard H.261.

CIF es va dissenyar per convertir de forma senzilla els estàndards PAL o NTSC. CIF defineix una seqüència de video amb una resolució de 352×288 com PAL, amb un framerate de 30000/1001 (uns 29.97fps) frames com NTSC, amb un codi de color YCbCr 4:2:0.

SQCIF 128 × 96 SubQuarterCIF (subQCIF)
QCIF 176×144 in PAL
176×120 in NTSC
Quarter CIF, la meitat de la resolució H i V,
o sigui, 1/4 de la imatge original
SIF(525) NTSC 352×288 PAL
352×240 NTSC
Source Input Format
CIF/SIF(625) 352×288 in PAL
352×240 in NTSC
D1/4SIF(525) 704×576 (TV PAL)
704×480 (TV NTSC)
720×576 (DVD-Video PAL)
720×480 (DVD-Video NTSC)
Full size, estàndard NTSC i PAL
2CIF 704×288 in PAL
704×240 in NTSC
2 Common Intermediate Format
DCIF 528×384 in PAL
528×320 in NTSC
Double CIF, té un aspect ratio molt proper al 4:3,
millor quailtat que 2CIF i CIF amb el mateix bitrate
4CIF/4SIF(625) 704×576 in PAL
704×480 in NTSC
16CIF 1408 × 1152

Les resolucions xCIF no són quadrades, tenen un ratio de ~1.222:1. O sigui, que una televisió analògica té un ratió de 1.2:1 segons defineix l’estàndard de sistemes de 525 linies (CCIR 601). En les pantalles d’ordinador o de televisió digital es treballa amb blocs de pixels quadrats, o sigui, que les trames xCIF ha de ser re-escalades horitzontalment un ~109% per aconseguir un ratio de 4:3, o sigui, el que equivaldria a 384×288 pixels quadrats.

Les mides d’imatges CIF han estat especialment escollides per ser multiples del que s’anomenen macroblocs (corresponent a 16x16pixels). Per exemple, una imatge CIF de mida 352×288 correspon a 22×18 macroblocs.

Informació extreta de la Wikipedia i de diversos forums dispersos per internet.

Nov 23

Càlcul dels mm de l’òptica d’una càmara

Reading time: < 1 minute Fórmula molt simple però útil, serveix per saber quina és la mida d'una òptica d'una càmara en funció de la distància i l'espai horitzontal a registrar:

( Distància x 4’8 ) / Horitzontal = mm Òptica
S’assumeix que la distància i l’hortizontal venen donades en metres

Realment útil si penseu en sistemes de videovigilància o d’altres similars.

Oct 01

webcam del Dell m1330 en linux

Reading time: 1 – 2 minutes

La webcam del portàtil és una Omnivision amb resolució VGA, concretametn el model usa el idProduct: 0x7670. Doncs bé, gairebé mai uso la webcam així doncs un dia la vaig configurar i després se’m va oblidar com ho havia fet, avui actualitzant la Gentoo ho he recordat i vaig a posar les quatre notes aquí per si poden ajudar a algú i així ho usaré de recordatori per mi mateix.

En Gentoo la gràcia esta en tenir instal·lat el paquet: media-video/linux-uvc, aquest paquet genera un mòdul del kernel anomenat uvcvideo.ko que podem carregar amb un simple modprobe. Després, per exemple, amb el paquet media-video/luvcview podem llençar un simple aplicatiu anomenat: luvcview que ens permetrar fer captures de pantalla i de video a través de la webcam.

Com podeu veure ben senzill de configurar i d’usar, ara només cal que no feu com jo que no l’he usat mai més que per fer proves.

Jun 24

Microfon intern del Dell XPS m1330 funciona amb Linux

Reading time: < 1 minute No m'havia posat a provar mai el microfon intern del portàtil ja que sempre havia llegit que no funcionava. Però ahir vaig actualitzar el kernel a la verisó 2.6.25-gentoo-r5 i hem vaig decidir a provar a veure què tal. Doncs bé la veritat és que oli en un llum. Ja que només he hagut de canviar la font d’entrada de gravacions i ha funcionat a la primera així és com l’he de deixar:

gnome volume manager

La veritat és que he tingut molta sort 😉

May 08

Podcast 1×06: digikam, gallery2, machine tags, pfSense i Mikrotik

Reading time: < 1 minute En el sisè podcast he parlat de:

El podcast:

Apr 19

ajuda: el primer podcast de veritat

Reading time: < 1 minute Com ja vaig comentar en el primer podcast, aquell no és realment el primer que vaig grabar. Ja que el primer el vaig fer amb AAC (m4a, mp41) i no hi ha manera de sentir-lo ni convertir-lo a res. Així doncs, com que no me'n surto de cap manera m'he decidit aquest article i demanar ajuda als que em llegiu. A veure si algú aconsegueix recuperar l'arxiu: El primer podcast

Doncs com ús deia, a mi no em va ni des de linux, ni des de windows. Ni Totem, mplayer, windows media player, bsplayer, iTunes, QuickTime, res de res… si algú el sap recuperar, si us plau. Que me l’envii que li estaré molt agraït.

Apr 19

Podcast 1×04: problema coreutils, miroTV, animoto i Qik

Reading time: 2 – 2 minutes

La temàtica d’aquest podcast, al teniu resumida amb els enllaços:

  • quickpkg – generar paquets pre-compilats amb Gentoo des de paquets ja instal·lats
  • miroTV – programa per organitzar i miarar videocasts
  • animoto – montatges de fotografies i música, espectacular
  • Qik – video streaming des del mòbil i via internet

Un petit video que he fet amb animoto perquè ús feu una idea del que pot arribar a fer:

Perquè quedi ben clara la idea que intenta exportar Qik, adjunto una imatge/esquema de com funciona la idea:

qik schema

El podcast: