O aplicație CLI foarte utilă este ffmpeg. Talente? Capturi de ecran audio/ video, conversie fișiere audio/ video, extragere imagini din fișiere video, și altele din categoria multimedia.
Subiectul este mult prea amplu, motiv pentru care vom vedea pe scurt cum se folosește ffmpeg pentru anumite sarcini.
Util pentru începători este faptul că ffmpeg poate fi folosit fără parametri, ffmpeg asigurând implicit codecuri și tot ce mai trebuie.
Completare: după ultimele actualizări ale ffmpeg (cel puțin in Arch Linux...), la orice comandă din cele ce urmează trebuie adăugat: -i :0.0, de exemplu ffmpeg -f x11grab -s 1280x960 -r 30 -b 6500 -bt 712k captura.avi va fi:
ffmpeg -f x11grab -s 1280x960 -i :0.0 -r 30 -b 6500 -bt 712k captura.avi.
În primul rând: aplicațiile/ comenzile CLI NU sunt de speriat, NU trebuie neapărat reținute, NU trebuie neapărat scrise exact așa în consolă, este suficientă copierea lor (copy- paste) în consolă urmată de apăsarea tastei Enter, este utilă crearea de aliasuri ale comenzilor, aliasuri puse în ~/.bashrc (adică /home/user/.bashrc, se înlocuiește user cu numele corect al contului de user), ceva de genul (este o singură linie):
alias captura='ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1280x960 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 captura.avi'
Aliasul de mai sus realizează o captură audio/ video a desktopului meu, o salvează în directorul meu /home sub numele de captura.avi, și ce-i mai important eu nu scriu în consolă decât captura (și apoi apăs Enter), nu tot cârnațul de mai sus...
1- Captură audio/ video
De exemplu pentru o captură de ecran audio/video putem folosi comanda simplistă:
-f x11grab = sursa, desktopul
-s 1280x960 = rezoluția dorită (se înlocuiește cu cea folosită, iar dacă nu o știți, cu: $(xwininfo -root | grep 'geometry' | awk '{print $2;}'), de genul:
ffmpeg -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -r 30 -b 6500 -bt 712k captura.avi )
-r 30 = frame rate (implicit e 25)
-b 6500 = bitrate în kb
-bt 712k = toleranță la bitrate
-acodec ... = codec audio
-vcodec ... = codec video
-i :0.0 = poziția sursei de înregistrare, 0.0 fiind
colțul stânga-sus (:0.0
Sau putem rafina puțin comanda, adăugând anumiți parametri, opțiuni, codecuri, etc:
Pentru alegerea surse audio (intern/ sunet redat de o aplicație internă gen Mplayer, Audacious, Vlc, moc, Totem, etc. sau extern/ microfon) trebuie să instalăm pavucontrol (PulseAudio Volume Control) și în timp ce rulăm ffmpeg pornim pavucontol și alegem în tabul ”Recording” sursa audio.
2- Extragere audio sau video
Pentru extragere audio din fișier video (dintr-un videoclip să extragem doar partea audio, salvând-o ca .mp3):
ffmpeg - i fișier-video.avi -vn fișier-audio.mp3
Înlocuiți fișier-video.avi cu numele corect al piesei (poate fi .avi, .mpg, .mpeg, .mp4, etc), fișier-audio.mp3 cu numele sub care salvați piesa, parametrul -vn spune ffmpeg să nu se ocupe de partea video.
Pentru extragerea părții video (fără sonor) :
ffmpeg - i fișier-video.avi -an fișier-video.avi
3- Conversie audio/ video
Putem converti foarte simplu diverse formate de fișiere audio sau video:
ffmpeg -i sursă rezultat ceva de genul:
ffmpeg -i fișier-video.avi fișier-video.mp4
Ffmpeg recunoaște/ lucrează cu majoritatea formatelor, oricum toate formatele cât de cât folosite...
Folosesc comanda următoare pentru a-mi face video pentru telefon:
ffmpeg -i input.avi -s qcif -vcodec h263 -r 20 -b 180k -acodec libfaac -ab 64k -ac 2 -ar 22050 output.3gp
Aflăm formatele disponibile cu ffmpeg -formats.
4- Redimensionare imagine
Este posibil să schimbăm aspect ratio din 4:3 în 16:9 sau invers (ori să redimensionăm imaginea), tăind puțin din părtile de sus și jos (crop) sau adăugând benzi negre (pad), astfel încât imaginea să nu fie turtită pe verticală sau orizontală. Vom exemplifica cu un fișier video cu dimensiunile 1280x960 :
ffmpeg -i sursă -vf crop=lățime:înălțime rezultat de exemplu:
ffmpeg -i video1.avi -vf crop=1280:900 video2.avi
Este posibil ca în această operație să schimbăm și formatul fișierului video din .avi în .mpg, ori .mp4, sau .flv, sau orice altceva. După cum puteți observa înălțimea a scăzut cu 60 de pixeli, 30 de sus, 30 de jos.
În următorul exemplu vom mări puțin înălțimea, cu 40 de pixeli:...
ffmpeg -i sursă -vf pad=lățime:înălțime rezultat
Uneori e posibil să dorim să micșorăm dimensiunile unui fișier video.
ffmpeg -i video-1.mpeg -s lățimexînălțime video-2.mpeg
Deci dacă dorim să redimensionăm un fișier video la 320x200 pixeli vom da comanda:
ffmpeg -i sursă.avi -s cga rezultat.avi
5- Lipire fișiere media
Lipirea/ unirea fișierelor video este ușor de realizat, dar implică unii pași intermediari, asta din cauză că nu toate containerele video suportă așa ceva, noi vom folosi mpeg-1 sau mpeg-2. Deci mai întâi convertim fișierele noastre în .mpg.
Dacă dorim ca noul fișier rezultat din unirea celor două fișiere inițiale să aibă alt format îl putem converti:
ffmpeg -i video.mpg video.avi
Pentru a înlocui sonorul unui fișier video cu altă sursă audio (.mp3 de exemplu):
6- Tăiere fișiere media
Exact cum putem lipi două sau mai multe fișiere putem și ”tăia”, extrage porțiuni dintr-un fișier, dar inițial trebuie convertit în .mpg, urmând ca după extragere să-l re- convertim dacă ținem neapărat:
7- Extragere imagini din fișier video
-r = frame rate/ implicit e 25 de imagini/ secundă, -r 1 = o imagine pe secundă;
-f = formatul dorit;
-s = dimensiune imagine/ implicit e dimensiunea din video;
-ss = pornește luarea imaginilor la un moment dat (-ss 01:19:45 va începe luarea de imagini la 1 oră, 19 minute și45 secunde de la începerea redării); în combinație cu -t putem scoate imagini în mod selectiv= începând la... timp de 12 secunde de exemplu (-ss 01:19:45 -t 12);
-t = timpul cât se iau imagini.
image-%4d.jpg = stabilește numele imaginilor ca image-0001.jpg, image-0002.jpg, etc, adică %4d înseamnă numerotarea imaginilor cu 4 cifre, consecutiv. Putem folosi %2d sau %3d, sau %6d, în funcție de câte imagini credem că vor rezulta, cu cât se capturează mai mult timp, cu atât imaginile vor fi mai multe... Recomand salvarea imaginilor într-un director anumit, deci vom adăuga calea către acesta la nume!
ffmpeg -i sursă.avi -vf "movie=watermark.png [wm]; [in][wm] poziție-logo [out]" -s 1290x960 rezultat.avi
Exemplu concret:
ffmpeg -i captura.avi -vf "movie=watermark.png [wm]; [in][wm] overlay=10:main_h-overlay_h-10 [out]" -s 1280x960 captura-mod.avi
- captura.avi = fișier video inițial;
- watermark.png = imagine/ logo de adăugat;
- overlay=10:main_h-overlay_h-10 = poziție logo pe video;
- captura-mod.avi = video cu logo, rezultatul.
Detalii: http://stressat.blogspot.com/2011/10/watermark-video.html
9- Înregistrare cameră web
Redare webcam:
ffmpeg -f video4linux2 -i /dev/video0 captură.avi (sau ce format doriți)
Mi se pare corect să precizez că există diferite interfețe grafice pentru ffmpeg, cum ar fi de exemplu Winff sau Avanti. În Arch Linux găsiți Winff în AUR, îl instalați cu yaourt -S winff. Cu ajutorul winff puteți manipula fișiere audio/ video, oricum este doar o interfață, totul se face de fapt în background, în linia de comandă. Ceea ce-mi amintește că trebuie să setați în Winff- Edit- Preferences- General directorul unde veți salva rezultatele, iar în Winff- Edit- Preferences-Linux- terminalul pe care-l folosiți, implicit este xterm, pentru Kde trebuie înlocuit cu konsole, pentru Gnome cu gnome-terminal.
Sursă: http://wiki.mandrivausers.ro/mandriva/ghid/terminal_2#ffmpeg
Subiectul este mult prea amplu, motiv pentru care vom vedea pe scurt cum se folosește ffmpeg pentru anumite sarcini.
Util pentru începători este faptul că ffmpeg poate fi folosit fără parametri, ffmpeg asigurând implicit codecuri și tot ce mai trebuie.
Completare: după ultimele actualizări ale ffmpeg (cel puțin in Arch Linux...), la orice comandă din cele ce urmează trebuie adăugat: -i :0.0, de exemplu ffmpeg -f x11grab -s 1280x960 -r 30 -b 6500 -bt 712k captura.avi va fi:
ffmpeg -f x11grab -s 1280x960 -i :0.0 -r 30 -b 6500 -bt 712k captura.avi.
În primul rând: aplicațiile/ comenzile CLI NU sunt de speriat, NU trebuie neapărat reținute, NU trebuie neapărat scrise exact așa în consolă, este suficientă copierea lor (copy- paste) în consolă urmată de apăsarea tastei Enter, este utilă crearea de aliasuri ale comenzilor, aliasuri puse în ~/.bashrc (adică /home/user/.bashrc, se înlocuiește user cu numele corect al contului de user), ceva de genul (este o singură linie):
alias captura='ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1280x960 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 captura.avi'
Aliasul de mai sus realizează o captură audio/ video a desktopului meu, o salvează în directorul meu /home sub numele de captura.avi, și ce-i mai important eu nu scriu în consolă decât captura (și apoi apăs Enter), nu tot cârnațul de mai sus...
1- Captură audio/ video
De exemplu pentru o captură de ecran audio/video putem folosi comanda simplistă:
ffmpeg -f x11grab -s 1280x960 -r 30 -b 6500 -bt 712k captura.avi
Haideți să vedem cam ce reprezintă chestiiile astea obscure:-f x11grab = sursa, desktopul
-s 1280x960 = rezoluția dorită (se înlocuiește cu cea folosită, iar dacă nu o știți, cu: $(xwininfo -root | grep 'geometry' | awk '{print $2;}'), de genul:
ffmpeg -f x11grab -s $(xwininfo -root | grep 'geometry' | awk '{print $2;}') -r 30 -b 6500 -bt 712k captura.avi )
-r 30 = frame rate (implicit e 25)
-b 6500 = bitrate în kb
-bt 712k = toleranță la bitrate
-acodec ... = codec audio
-vcodec ... = codec video
-i :0.0 = poziția sursei de înregistrare, 0.0 fiind
colțul stânga-sus (:0.0
Sau putem rafina puțin comanda, adăugând anumiți parametri, opțiuni, codecuri, etc:
ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1280x960 -i :0.0 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 captura.avi
Comanda se dă pe o singură linie, aici lipsa spațiului face să se întindă pe 2-3 linii... Pentru alegerea surse audio (intern/ sunet redat de o aplicație internă gen Mplayer, Audacious, Vlc, moc, Totem, etc. sau extern/ microfon) trebuie să instalăm pavucontrol (PulseAudio Volume Control) și în timp ce rulăm ffmpeg pornim pavucontol și alegem în tabul ”Recording” sursa audio.
2- Extragere audio sau video
Pentru extragere audio din fișier video (dintr-un videoclip să extragem doar partea audio, salvând-o ca .mp3):
ffmpeg - i fișier-video.avi -vn fișier-audio.mp3
Înlocuiți fișier-video.avi cu numele corect al piesei (poate fi .avi, .mpg, .mpeg, .mp4, etc), fișier-audio.mp3 cu numele sub care salvați piesa, parametrul -vn spune ffmpeg să nu se ocupe de partea video.
Pentru extragerea părții video (fără sonor) :
ffmpeg - i fișier-video.avi -an fișier-video.avi
3- Conversie audio/ video
Putem converti foarte simplu diverse formate de fișiere audio sau video:
ffmpeg -i sursă rezultat ceva de genul:
ffmpeg -i fișier-video.avi fișier-video.mp4
Ffmpeg recunoaște/ lucrează cu majoritatea formatelor, oricum toate formatele cât de cât folosite...
Folosesc comanda următoare pentru a-mi face video pentru telefon:
ffmpeg -i input.avi -s qcif -vcodec h263 -r 20 -b 180k -acodec libfaac -ab 64k -ac 2 -ar 22050 output.3gp
Aflăm formatele disponibile cu ffmpeg -formats.
4- Redimensionare imagine
Este posibil să schimbăm aspect ratio din 4:3 în 16:9 sau invers (ori să redimensionăm imaginea), tăind puțin din părtile de sus și jos (crop) sau adăugând benzi negre (pad), astfel încât imaginea să nu fie turtită pe verticală sau orizontală. Vom exemplifica cu un fișier video cu dimensiunile 1280x960 :
ffmpeg -i sursă -vf crop=lățime:înălțime rezultat de exemplu:
ffmpeg -i video1.avi -vf crop=1280:900 video2.avi
Este posibil ca în această operație să schimbăm și formatul fișierului video din .avi în .mpg, ori .mp4, sau .flv, sau orice altceva. După cum puteți observa înălțimea a scăzut cu 60 de pixeli, 30 de sus, 30 de jos.
În următorul exemplu vom mări puțin înălțimea, cu 40 de pixeli:...
ffmpeg -i sursă -vf pad=lățime:înălțime rezultat
ffmpeg -i sursă -vf pad=1280:1000 rezultat
Uneori e posibil să dorim să micșorăm dimensiunile unui fișier video.
ffmpeg -i video-1.mpeg -s lățimexînălțime video-2.mpeg
ffmpeg -i fireworks.mpeg -s 200x150 fire.mpeg
Sunt atribuite deja valori standard pentru dimensiuni (sqcif= 128x96, qcif= 176x144, etc, dacă dați într-o consolă comanda man ffmpeg veți afla toate valorile).Deci dacă dorim să redimensionăm un fișier video la 320x200 pixeli vom da comanda:
ffmpeg -i sursă.avi -s cga rezultat.avi
5- Lipire fișiere media
Lipirea/ unirea fișierelor video este ușor de realizat, dar implică unii pași intermediari, asta din cauză că nu toate containerele video suportă așa ceva, noi vom folosi mpeg-1 sau mpeg-2. Deci mai întâi convertim fișierele noastre în .mpg.
ffmpeg -i video1.avi video1-int.mpg
ffmpeg -i video2.asf video2-int.mpg
cat video1-int.mpg video2-int.mpg > video.mpgDacă dorim ca noul fișier rezultat din unirea celor două fișiere inițiale să aibă alt format îl putem converti:
ffmpeg -i video.mpg video.avi
Pentru a înlocui sonorul unui fișier video cu altă sursă audio (.mp3 de exemplu):
ffmpeg -i fișier-video.flv -i fișier-audio.mp3 -vcodec copy -acodec copy -map 0:0 -map 1:0 rezultat.flv
6- Tăiere fișiere media
Exact cum putem lipi două sau mai multe fișiere putem și ”tăia”, extrage porțiuni dintr-un fișier, dar inițial trebuie convertit în .mpg, urmând ca după extragere să-l re- convertim dacă ținem neapărat:
ffmpeg -i video1.mpg -ss 00:01:00 -t 00:03:00 video2.mpg
Această comandă va extrage o bucată de 3 minute din fișierul video1.mpg, începând de la minutul 1 (până la minutul 4, evident...), sub numele de video2.mpg. Înlocuind numele fișierului cu cel corect în cazul nostru și fixând durata porțiunii tăiate și punctul de start, putem obține ceea ce dorim (-t= timp, durată, iar -ss= poziția de start).7- Extragere imagini din fișier video
ffmpeg -i sursă image2image-%4d.jpg
Se poate să adăugăm ceva parametri:-r = frame rate/ implicit e 25 de imagini/ secundă, -r 1 = o imagine pe secundă;
-f = formatul dorit;
-s = dimensiune imagine/ implicit e dimensiunea din video;
-ss = pornește luarea imaginilor la un moment dat (-ss 01:19:45 va începe luarea de imagini la 1 oră, 19 minute și45 secunde de la începerea redării); în combinație cu -t putem scoate imagini în mod selectiv= începând la... timp de 12 secunde de exemplu (-ss 01:19:45 -t 12);
-t = timpul cât se iau imagini.
image-%4d.jpg = stabilește numele imaginilor ca image-0001.jpg, image-0002.jpg, etc, adică %4d înseamnă numerotarea imaginilor cu 4 cifre, consecutiv. Putem folosi %2d sau %3d, sau %6d, în funcție de câte imagini credem că vor rezulta, cu cât se capturează mai mult timp, cu atât imaginile vor fi mai multe... Recomand salvarea imaginilor într-un director anumit, deci vom adăuga calea către acesta la nume!
8- Marcare video cu logo (watermark)
Putem însemna fișierele noastre video (capturile de ecran de pildă) cu o imagine/ logo sau cu un video: ffmpeg -i sursă.avi -vf "movie=watermark.png [wm]; [in][wm] poziție-logo [out]" -s 1290x960 rezultat.avi
Exemplu concret:
ffmpeg -i captura.avi -vf "movie=watermark.png [wm]; [in][wm] overlay=10:main_h-overlay_h-10 [out]" -s 1280x960 captura-mod.avi
- captura.avi = fișier video inițial;
- watermark.png = imagine/ logo de adăugat;
- overlay=10:main_h-overlay_h-10 = poziție logo pe video;
- captura-mod.avi = video cu logo, rezultatul.
Detalii: http://stressat.blogspot.com/2011/10/watermark-video.html
9- Înregistrare cameră web
Redare webcam:
ffplay -f video4linux2 /dev/video0
Înregistrare webcam:ffmpeg -f video4linux2 -i /dev/video0 captură.avi (sau ce format doriți)
Mi se pare corect să precizez că există diferite interfețe grafice pentru ffmpeg, cum ar fi de exemplu Winff sau Avanti. În Arch Linux găsiți Winff în AUR, îl instalați cu yaourt -S winff. Cu ajutorul winff puteți manipula fișiere audio/ video, oricum este doar o interfață, totul se face de fapt în background, în linia de comandă. Ceea ce-mi amintește că trebuie să setați în Winff- Edit- Preferences- General directorul unde veți salva rezultatele, iar în Winff- Edit- Preferences-Linux- terminalul pe care-l folosiți, implicit este xterm, pentru Kde trebuie înlocuit cu konsole, pentru Gnome cu gnome-terminal.
Există mult mai multe posibilități, pentru amănunte vedeți: http://ffmpeg.org/faq.html și http://howto-pages.org/ffmpeg/ .Sursă: http://wiki.mandrivausers.ro/mandriva/ghid/terminal_2#ffmpeg
ce rost are -sameq ?
RăspundețiȘtergereeu pentru conversie video mp3 folosesc "ffmpeg -i a.avi -ab 320K a.mp3"
Mda, la video > .mp3 nu are rost, l-am trecut din obișnuință... MUlțumesc, am modificat.
RăspundețiȘtergereOricum, fiecare își găsește parametrii optimi. Poți adăuga de exemplu -ar 44100 -ac 2 pentru compatibilitate cu standardul audio CD-DA, sau -acodec copy pentru extragere audio fără procesare, sau poți lăsa ffmpeg să folosească parametrii impliciți.
Cum se pot taia bordurile verticale (negre) ale unui film 4:3 astfel incat fisierul video sa-l poti viziona la alegere 4:3 sau 16:9 ?
RăspundețiȘtergereUite ca nu stiu, dar poti seta aspectul la redare in player. In smplayer cu tasta a, in mplayer poti pune in fisierul de setari:
Ștergereaspect=<0-3>
Specify input aspect ratio:
0: 1:1
1: 4:3 (default)
2: 16:9
3: 2.21:1
sau direct in comanda.