Cut video clip using ffmpeg
Reading time: 2 – 3 minutesVery simple and useful parameters of ffmpeg:
ffmpeg -ss HH:MM:SS -i INPUT_FILE -to HH:MM:SS -c copy OUTPUT_FILE
Very simple and useful parameters of ffmpeg:
ffmpeg -ss HH:MM:SS -i INPUT_FILE -to HH:MM:SS -c copy OUTPUT_FILE
Cada vez uso más OBS Studio y hace unos meses me decidí a sacarle todo el jugo a la herramienta. Pues bien, para ello me tuve que ir al manual para entender cual era la finalidad de los perfiles, las escenas y las fuentes. Para que no se me olvide registré este vídeo:
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:
And if you have a directory with a lot of files to convert you could use:
find . -name "*.webm" -print0 |while read -d
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.
\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.
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.
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:
Aquest últim tipus de frames són interessant per dues raons:
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.
Un exemple, per entendre-ho millor:
Per tal de simplificar les coses el video s’enmagatzema en l’ordre DTS.
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.
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.
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.
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.
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.
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:
La veritat és que he tingut molta sort 😉
Reading time: < 1 minute En el sisè podcast he parlat de:
El podcast:
[display_podcast]