2012-02-01 22 views
5

Jestem nowy w php. Zainstalowałem ffmpeg w mojej lokalnej wersji. Czy możliwe jest wygenerowanie miniatury pliku FLV? Proszę pomóc ..FFMpeg - Tworzenie miniatury pliku wideo

+0

możliwe duplikat [miniatur odtwarzacza wideo w php] (http://stackoverflow.com/questions/2913172/thumbnail-video-player-in-php) – mario

+0

Możliwy duplikat [Generowanie podglądu obrazu z pliku wideo ?] (http://stackoverflow.com/questions/2043007/generate-preview-image-from-video-file) –

Odpowiedz

11

Spróbuj

$ffmpeg = 'ffmpeg.exe'; 

//video dir 
$video = 'video.flv'; 

//where to save the image 
$image = 'image.jpg'; 

//time to take screenshot at 
$interval = 5; 

//screenshot size 
$size = '320x240'; 

//ffmpeg command 
$cmd = "$ffmpeg -i $video -deinterlace -an -ss $interval -f mjpeg -t 1 -r 1 -y -s $size $image 2>&1";  
$return = `$cmd`; 

Wyjaśnienie opcji polecenia:

-i filename (ścieżka do pliku źródła wideo za)
przeplot (konwertuje wideo z przeplotem na postać bez przeplotu)
-an (nagrywanie dźwięku jest wyłączone; Nie potrzebujemy go do miniaturek)
-p pozycja (dekodowane jest wejście wideo i rzucił aż datownik osiągnie pozycję, położenie naszego miniatury w sekundach)
-f wyjściowy format pliku
-t trwania (plik wyjściowy przestaje pisać po trwania sekund)
-r fps (ustawia liczbę klatek na sekundę; fps jest wyrażone w hercach (1/sekundę); używamy 1 tak, że łapiemy tylko jedną klatkę)
-y (nadpisuje plik wyjściowy, jeśli już istnieje)
-s WIDTHxHEIGHT (rozmiar ramki w pikselach)

+1

Wskazówka: Umieść wartość ** - i ** po ** - ss **, aby znacznie przyspieszyć proces. –

0

Tak. Możesz uruchomić ffmpeg z PHP używając right parameters.

Używając ffmpeg-php, możesz użyć $ movie-> getFrame(), aby uzyskać ramkę, a $ frame-> toGDImage(), aby uzyskać GD image.

+0

Jak korzystać z $ movie-> getFrame().? – user1006460

3

Poniższy skrypt ic stworzony przy użyciu PHP FFMPEG Library. można pobrać informacji wideo i miniatury stosując podane funkcje

<?php 

class PHP_FFMPEG 
{ 

function getVideoInformation($videoPath) 
{ 
$movie = new ffmpeg_movie($videoPath,false); 

$this->videoDuration = $movie->getDuration(); 
$this->frameCount = $movie->getFrameCount(); 
$this->frameRate = $movie->getFrameRate(); 
$this->videoTitle = $movie->getTitle(); 
$this->author = $movie->getAuthor() ; 
$this->copyright = $movie->getCopyright(); 
$this->frameHeight = $movie->getFrameHeight(); 
$this->frameWidth = $movie->getFrameWidth(); 
$this->pixelFormat = $movie->getPixelFormat(); 
$this->bitRate = $movie->getVideoBitRate(); 
$this->videoCodec = $movie->getVideoCodec(); 
$this->audioCodec = $movie->getAudioCodec(); 
$this->hasAudio = $movie->hasAudio(); 
$this->audSampleRate = $movie->getAudioSampleRate(); 
$this->audBitRate = $movie->getAudioBitRate(); 


} 


function getAudioInformation($videoPath) 
{ 
$movie = new ffmpeg_movie($videoPath,false); 

$this->audioDuration = $movie->getDuration(); 
$this->frameCount = $movie->getFrameCount(); 
$this->frameRate = $movie->getFrameRate(); 
$this->audioTitle = $movie->getTitle(); 
$this->author = $movie->getAuthor() ; 
$this->copyright = $movie->getCopyright(); 
$this->artist = $movie->getArtist(); 
$this->track = $movie->getTrackNumber(); 
$this->bitRate = $movie->getBitRate(); 
$this->audioChannels = $movie->getAudioChannels(); 
$this->audioCodec = $movie->getAudioCodec(); 
$this->audSampleRate = $movie->getAudioSampleRate(); 
$this->audBitRate = $movie->getAudioBitRate(); 

} 

function getThumbImage($videoPath) 
{ 
$movie = new ffmpeg_movie($videoPath,false); 
$this->videoDuration = $movie->getDuration(); 
$this->frameCount = $movie->getFrameCount(); 
$this->frameRate = $movie->getFrameRate(); 
$this->videoTitle = $movie->getTitle(); 
$this->author = $movie->getAuthor() ; 
$this->copyright = $movie->getCopyright(); 
$this->frameHeight = $movie->getFrameHeight(); 
$this->frameWidth = $movie->getFrameWidth(); 

$capPos = ceil($this->frameCount/4); 

if($this->frameWidth>120) 
{ 
$cropWidth = ceil(($this->frameWidth-120)/2); 
} 
else 
{ 
$cropWidth =0; 
} 
if($this->frameHeight>90) 
{ 
$cropHeight = ceil(($this->frameHeight-90)/2); 
} 
else 
{ 
$cropHeight = 0; 
} 
if($cropWidth%2!=0) 
{ 
$cropWidth = $cropWidth-1; 
} 
if($cropHeight%2!=0) 
{ 
$cropHeight = $cropHeight-1; 
} 

$frameObject = $movie->getFrame($capPos); 


if($frameObject) 
{ 
$imageName = "tmb_vid_"1212.jpg"; 
$tmbPath = "/home/home_Dir/public_html/uploads/thumb/".$imageName; 
$frameObject->resize(120,90,0,0,0,0); 
imagejpeg($frameObject->toGDImage(),$tmbPath); 
} 
else 
{ 
$imageName=""; 
} 


return $imageName; 

} 






} 




?> 

Funkcja

getThumbImage($videoPath); //pass path to video file // 

stworzy liczbę miniatur w folderze określonym w funkcji. Możesz zmienić kod zgodnie z wymaganiami. Działa to, jeśli zainstalowałeś bibliotekę ffmpeg i php ffmpeg.

Patrz link http://tecserver.blogspot.in/2009/07/ffmpeg-video-conversion-tool.html

1
<?php 

$W = intval($_GET['W']); 
$H = intval($_GET['H']); 
$pic = ''.htmlspecialchars($_GET['file']).''; 
$name = 'wapadmin/'.str_replace('/','--',$pic).'.gif'; 
$location = 'http://'.str_replace(array('\\','//'),array('/','/'), $_SERVER     [ 'HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/'.$name); 

if(file_exists($name)){ 
header('Location: '.$location, true, 301); 
exit; 
} 

$mov = new ffmpeg_movie($pic, false); 
$wn = $mov->GetFrameWidth(); 
$hn = $mov->GetFrameHeight(); 


$frame = $mov->getFrame(480); 

$gd = $frame->toGDImage(); 

if(!$W and !$H){ 
    $a = "131*79"; 
    $size = explode('*',$a); 
$W = round(intval($size[0])); 
$H = round(intval($size[1])); 
    } 


$new = imageCreateTrueColor($W, $H); 
imageCopyResampled($new, $gd, 0, 0, 0, 0, $W, $H, $wn, $hn); 
imageGif($new, $name, 100); 

    header('Location: '.$location, true, 301); 
    ?> 
+0

ten kod nie jest kompletny. powinieneś dodać $ mov = new ffmpeg_movie ("./ Wildlife.wmv"); zamiast "$ mov = new ffmpeg_movie ($ pic, false);" oznacza to, że używasz "Wildlife.wmv" dokładnie na twoim katalogu głównym blisko pliku .php. , a także powinieneś zmienić "imageGif ($ new, $ name, 100);" do "imageGif ($ new," yourname.gif ", 100);" utworzy plik o nazwie "yourname.gif" w pobliżu twojego pliku php. nadzieję, że ktoś pomoże –

0

Nie nie trzeba określać czasu 1. Aplikacja ffmpeg api udostępnia format obrazu2 i możliwość przekazywania -vframes 1.

$time = 3; 
$infile = 'in.mp4'; 
$thumbnail = 'my_thumbnail.png'; 

$cmd = sprintf(
    'ffmpeg -i %s -ss %s -f image2 -vframes 1 %s', 
    $infile, $time, $thumbnail 
); 

exec($cmd); 
Powiązane problemy