Vraag & Antwoord

Webprogrammeren & scripting

Thumbnail van filmpje

2 antwoorden
  • In mijn CMS kunnen mensen filmpjes uploaden. Is het mogelijk om automatisch een thumbnail te genereren, bij voorkeur van het middelste frame van het filmpje? Momenteel moeten de gebruikers los een screenshot uploaden... Ik werk veel met GDLib en ImageMagick, maar zelfs met de laatste is het me nog niet gelukt. Misschien is dit mogelijk met [url=http://ffmpeg.mplayerhq.hu/]FFmpeg[/url]? Ik ben al zo ver dat ik [b:c86b246b07]alle[/b:c86b246b07] frames van het complete filmpje naar een plaatje omzet, maar in principe heb ik aan eentje genoeg. Nu kan ik natuurlijk het aantal gegenereerde plaatjes tellen en dan de middelste pakken, maar dat lijkt me [b:c86b246b07]erg[/b:c86b246b07] omslachtig!!! :evil: Rechtstreeks uit de [url=http://ffmpeg.mplayerhq.hu/faq.html#SEC15]faq[/url]: ffmpeg -i movie.mpg movie%d.jpg Genereert dus zoveel jpg's als er frames zijn... Kortom: hoe kan ik 1 plaatje genereren, en/of hoe kan ik van te voren er achter komen uit hoeveel frames het filmpje bestaat?
  • Voor de geïnteresseerden; ik heb dit ondertussen eindelijk opgelost:[code:1:0d5af3f701]function createMovieThumb($strFile, $strThumbDir) { // tijdsduur ophalen unset($arrOutput); $strCommand = '/usr/bin/ffmpeg -i '. $strFile .' 2>&1'; exec($strCommand, $arrOutput); $strOutput = implode(' ', $arrOutput); $strPattern = '/Duration: (\d{2}):(\d{2}):(\d{2})/'; preg_match($strPattern, $strOutput, $arrMatches); $intDuration = (intval($arrMatches[1]) * 3600) + (intval($arrMatches[2]) * 60) + intval($arrMatches[3]); $intHalf = ceil($intDuration / 2); // Thumbnail maken $strThumb = $strThumbDir .'/'. substr(basename($strFile), 0, strrpos(basename($strFile), '.')) .'.jpg'; $strCommand = '/usr/bin/ffmpeg -i '. $strFile .' -f image2 -vframes 1 -ss '. $intHalf .' '. $strThumb; exec($strCommand); }[/code:1:0d5af3f701]Met ffmpeg -i krijg je gewoon informatie terug van het filmpje, met daarin de duration. Die output vang ik af in een array, en maak daar een string van. Met een eenvoudige reguliere expressie haal ik dan de duration er uit. Het aantal seconden wordt berekend en door twee gedeeld. De naam van de thumbnail is dezelfde als die van het filmpje, maar dan met de extensie .jpg. Met de optie -ss van ffmpeg kun je het tijdstip opgeven, dus dat is dan die helft die je het uitgerekend. Als je wilt kunt je het resultaat nog resizen door ook de optie '-s 150x100' of zo door teven, maar ik doe dat zelf naderhand met ImageMagick, want ffmpeg behoudt de verhouding niet bij resizen, en convert van ImageMagick wel. Misschien heeft iemand er wat aan...

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.