Terassin kukkia

  Pääsivulle  |  TIETOTEKNIIKAN PÄÄSIVULLE

ffmpeg

Monipuolinen sovellus

ffmpeg on komentoriviltä tai sovellusten sisältä käytettävä erittäin monipuolinen sovellus video- ja äänitiedostojen käsittelyyn. Netistä löytyy laajoja oppaita eri parametrien käyttämiseen. Tässä esitetään muutama tärkein käyttötapa.

Sovellus löytyy osoitteesta http://ffmpeg.org/ . Sieltä löytyy omat latauspaketit Windowsille, Macille ja Linuxille.

Windowsia varten paketeista tulee kaivaa esiin valmiiksi käännetty sovellus ffmpeg.exe. Sen voi sijoittaa koneellaan haluaamansa kansioon, missä sitä aikoo käyttää.

Lataa Macille tarkoitettu valmis paketti (uusin versio) netistä ja pura se, tuloksena tiedosto ffmpeg. Sijoita se kansioon, missä haluat itse tai sovelluksesi toivot sitä käytettävän.
 

Käyttäminen ohjelmakoodin sisällä

Tehdään softan sisällä seuraava ffmpeg-homma, eli otetaan videosta esikatselukuva kolmen sekunnin päästä alusta:
ffmpeg -y -i  "DS0234.mp4" -an -ss 00:00:03 -vframes 1 -f mjpeg "DS0234.jpg"

Swift-sovelluksessa ffmpeg on käytettävissä näin:
let pitz = "00:00:03"
let ffz = myappdirpolkuz + "ffmpeg"
let vidz = "/Users/erkki/Desktop/DS0234.mp4"
let polz = "/Users/erkki/Desktop/tilap/
DS0234.jpg"
let argms = ["-y", "-i", vidz, "-an", "-ss", pitz, "-vframes", "1", "-f", "mjpeg", polz]
let task = Process.launchedProcess(launchPath: ffz, arguments: argms)
task.waitUntilExit()

C# (dotnet) -sovelluksessa ffmpeg on käytettävissä seuraavasti:
string pitz = "00:00:03 ";
s
t
ring ffz = "c:\\tilap\\ffmpeg.exe";  // täysi polku ffmpeg:lle (tässä esimerkki)
string vidz = "
c:\\tilap\\DS0234.mp4";
string polz = "
c:\\tilap\\DS0234.jpg"
using (System.Diagnostics.Process proc = new System.Diagnostics.Process())
{
   proc.EnableRaisingEvents = false;
   sb = new StringBuilder("-y -i \"");  // Huom! lainausmerkit tarpeen tiedostonimien ympärillä
   sb.Append(vidz);
   sb.Append("\" -an -ss ");
   sb.Append(pitz);
   sb.Append("-vframes 1 -f mjpeg \"");
   sb.Append(polz);
   sb.Append("\"");
   proc.StartInfo.Arguments = @sb.ToString();
   proc.StartInfo.FileName = ffz;
   proc.StartInfo.UseShellExecute = false;
   proc.StartInfo.CreateNoWindow = true;
   proc.StartInfo.RedirectStandardOutput = true;
   proc.Start();
   proc.WaitForExit();
   proc.Close();
}


Käyttöesimerkkejä

Esimerkeissä on tiedostomuotoja mp4, jpg, VOB ym. Vastaavan voi tehdä myös "melkein kaikilla" muillakin vastaavilla (kuva/video) tiedostomuodoilla, mutta konvertointi toiseen muotoon voi edellyttää tietoja siihen sopivista codeceista (rakennekuvauksista)

VIDEOTIEDOSTON METATIETOJA

Saadaan mm. videon kehysmitat, videon tekohetken (creation_time) stream kerrallaan, orientation (rotate), kestoaika, nopeuden jne. Kehysmittojen ohella saadaan eri aspect ratiot DAR, PAR ja SAR, jos niitä tarvitaan tuloksen määrittelyyn:
DAR = display aspect ratio w:h = the aspect ratio the video should be played back at
PAR = pixel  aspect ratio x:y = the aspect ratio of the video pixels themselves
SAR= storage aspect ratio = the dimensions of the video frame, expressed as a ratio

ffmpeg -i "IMG_1505(korkea).MOV" -hide_banner > testi.txt 2>&1
(vie tiedot tiedostoon testi.txt. Koska muunnoskomennon osia puuttuu, tämä on error.txt ja '2>&1' ohjaa sen samaan kuin stdout eli tiedostoon texti.txt)


ESIKATSELUKUVA VIDEOSTA

ffmpeg -i "oma video.avi" -an -ss 00:00:03 -s 120x90 -vframes 1 -f mjpeg "oma tulos.jpg"
(tekee esikatselukuvan 120x90, oltava luvut parillisia)

ffmpeg -y -i pushbutt.avi -an -ss 00:00:03 -vframes 1 -f mjpeg tulos1.jpg
(lippu -y jotta ei kysy saako kirjoittaa tilapäistiedostoon päälle)
(tämä tekee videon kehysmitan kokoisen kuvan)


VIDEOTIEDOSTON KONVERTOINTI TOISEEN MUOTOON

ffmpeg -i  INPUT.VOB  OUTPUT.mp4

ffmpeg -i  INPUT.wmv -c:v  libx264 -crf 18  OUTPUT.mp4

(tällä tavoin wmv/avi -> mp4 saadaan kuvan laatu varmuudella säilymään)
(crf 18 visually lossless, 20 oikein hyvä, 23 default)

ffmpeg -i alku.mp4 -f 3gp -vcodec libx264 -acodec aac loppu.3gp
(mp4 konvertoidaan muotoon 3gp)


VIDEOTIEDOSTOJEN YHDISTÄMINEN YHDEKSI

cat first.VOB second.VOB third.VOB | ffmpeg -i - outfile.mp4

Uudet ffmpeg-versiot tukevat yhdistämistä input-tiedoston operaattorilla, esimerkiksi:
ffmpeg -i concat:VTS_01_0.VOB\|VTS_01_1.VOB\|VTS_01_2.VOB outfile.mp4


ÄÄNITIEDOSTOJEN YHDISTÄMINEN YHDEKSI

ffmpeg -i "concat:Synkka.mp3|Synkka2.mp3" - acodec copy tulos.mp3

Ylläoleva ei toimi wav-tiedostoilla. Tee aputiedosto (alla luettelo.txt), jonne laitat yhdistettävien tiedostojen nimet:
file 'Mummo1.wav'
file 'Mummo2.wav'

Ja itse komento:

ffmpeg -f concat -i luettelo.txt -c copy Mummo12.wav


MUUNNA ÄÄNITIEDOSTO m4a -> mp3


ffmpeg -i susi.m4a -acodec libmp3lame -aq 2 susi.mp3


VIDEON ÄÄNI KUULUU VAIN OIKEASTA KAIUTTIMESTA - MITEN MOLEMPIIN

Tämä hoitaa äänikanavat kuntoon:
ffmpeg -i  INPUT.wmv  -map_channel  0.0.0 OUTPUT.mp4
(videon laatu putosi jos output oli wmv)
Huom!  Havaitsin että  käsky ei mene läpi jos tiedostonimessä on skandeja

ffmpeg -i INPUT.wmv -c:v libx264 -crf 18 -map_channel 0.0.0 OUTPUT.mp4

Löytyi oma digivideosta avi:ksi tehty tiedosto, jossa piti käyttää 0.1.0


KORJAA VIDEON SIVUSUHDE

Katso ensin tiedostosta mikä sivusuhde siinä on:  ffmpeg -i Lulu.mp4
Löytyi  1280x404 mikä on virheellinen koska suhteen oltava  4:3
Korjaa sivusuhde -> 4:3 pitämällä korkeus ennallaan:
ffmpeg -i Lulu.mp4 -s 538x404 Lulu2.mp4


OTA ÄÄNIRAITA VIDEOSTA

ffmpeg -i video.flv -ab 160k -ac 2 -ar 44100 -vn audio.mp3
-i indicates the input
-ab indicates the bit rate (in this example 160kb/sec)
-vn means no video ouput
-ac 2 means 2 channels
-ar 44100 indicates the sampling frequency.


OTA HALUAMASI PÄTKÄ mp3-TIEDOSTOSTA

Äänitiedoston  alku.mp3  keskeltä halutaan irrottaa osa omaksi tiedostoksi  tulos.mp3
Alkukohta on 30 sekunnissa, ja halutaan siitä eteenpäin 25 sekuntia talteen:

ffmpeg -ss 00:00:30.00 -t 25 -i alku.mp3 -acodec copy tulos.mp3

Huomaa argumenttien -ss, -t ja -i  erikoinen järjestys.


OTA HALUAMASI PÄTKÄ VIDEOTIEDOSTOSTA

Videotiedostosta alku.mp4 halutaan ottaa keskeltä pätkä sekuntiväliltä 27...42:

ffmpeg -i alku.mp4 -ss 27 -c copy -to 42 uusi.mp4

Lisätietoja:
http://superuser.com/questions/138331/using-ffmpeg-to-cut-up-video


TEE VIDEON MUSIIKISTA SOITTOÄÄNI iPHONE

Ensin muunna video mp3-tiedostoksi, pituus max 30 sekuntia (ohje edellä), mutta -ac 1

Sitten muunna mp3-tiedosto muotoon m4a:

ffmpeg -i alku.mp3 -y loppu.m4a

Muuta tunnisteeksi m4r ja vie m4r-tiedosto iPhoneen


ÄÄNIRAIDAN KORJAUS

Youtubesta ladatusta videopätkästä ei kuulunut ääntä. Korjataan:

ffmpeg -i joxsz.mp4 -b:a 160k korjattu.mp4


VIDEON KÄÄNTÄMINEN 90 ASTETTA

ffmpeg -i inputfile.mpg -vf "transpose=1" outputfile.mpg

Transpose-arvo:
0=90CounterCLockwise and Vertical Flip  (default)
1=90Clockwise
2=90CounterClockwise
3=90Clockwise and Vertical Flip



--------------------------------
(sivua muokattu 20.12.2019)