2014-03-24 183 views
0

我在一個laravel項目中使用php ffmpeg,來完成多個事物的探測,提取幀和編碼。從上傳的視頻文件創建幀時,我遇到問題。 這是怎樣的框架中創建:從視頻中提取幀 - PHP-FFMpeg

$video = $ffmpeg->open($destinationPath.'/'.$filename); 

    $video 
     ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10)) 
     ->save(public_path().$frame_path); 

這有時工作,並創建框架,但其他時候是沒有的。我注意到當我試圖打開一個.mov文件時出現這個錯誤。

回答

2

這有可能是你的ffmpeg的版本不支持在源視頻文件使用編解碼器,因此它是不能夠解壓縮視頻和提取圖像。

你可以嘗試在命令行處理文件,看看是否可以提取圖像那樣,和ffmpeg的可能會給你對這個問題的更多信息。

一個示例命令行從視頻文件

ffmpeg -y -ss 30 -i [source_file] -vframes 1 [target_file] 

提取PNG幀添加-f image2作爲輸出選項,如果您的輸出名稱是一個變量。

+0

它的問題,如果我現在用的文件都有擴展的資本,像.MOV? – cch

+1

除非您正在訪問大小寫敏感(大部分是)文件系統上大小寫錯誤的文件,否則大小寫無關緊要。 – DorianFM

0

的PHP-FFmpeg的庫附加默認這需要時間戳是在爲了獲得準確的幀輸入文件之前-ss參數。在mkv文件的情況下,我遇到了這個問題。無法準確查找諸如mkv和mov之類的文件。

https://github.com/PHP-FFMpeg/PHP-FFMpeg/blob/master/src/FFMpeg/Media/Frame.php#L79

您需要通過true作爲第二個參數保存功能,以便給最接近指定點的幀。它改變ffmpeg命令中-ss參數的位置。

-ss位置(輸入/輸出)

當作爲(前-I)的輸入選項一起使用,尋求在該輸入文件到位置。請注意,在大多數格式中, 不可能精確查找,因此ffm​​peg將尋求位置前的最近查找點 。當代碼轉換和-accurate_seek啓用 (默認值)時,搜索點和位置 之間的此額外片段將被解碼並丟棄。在進行流式複製或使用 -noaccurate_seek時,它將被保留。

當作爲(一個輸出文件名之前)的輸出選項一起使用,但解碼丟棄 輸入,直到到達時間戳位置。

位置必須是持續時間規範,請參閱ffmpeg-utils(1)手冊中的(ffmpeg-utils) 持續時間部分。