Marcin Łabanowski
10 years ago
5 changed files with 150 additions and 14 deletions
@ -0,0 +1,62 @@ |
|||
<?php |
|||
/* |
|||
* ffmpeg.php |
|||
* A barebones ffmpeg based webm implementation for vichan. |
|||
*/ |
|||
|
|||
function get_webm_info($filename) { |
|||
global $board, $config; |
|||
|
|||
$filename = escapeshellarg($filename); |
|||
$ffprobe = $config['webm']['ffprobe_path']; |
|||
$ffprobe_out = array(); |
|||
$webminfo = array(); |
|||
|
|||
exec("$ffprobe -v quiet -print_format json -show_format -show_streams $filename", $ffprobe_out); |
|||
$ffprobe_out = json_decode(implode("\n", $ffprobe_out), 1); |
|||
$webminfo['error'] = is_valid_webm($ffprobe_out); |
|||
|
|||
if(empty($webminfo['error'])) { |
|||
$webminfo['width'] = $ffprobe_out['streams'][0]['width']; |
|||
$webminfo['height'] = $ffprobe_out['streams'][0]['height']; |
|||
} |
|||
|
|||
return $webminfo; |
|||
} |
|||
|
|||
function is_valid_webm($ffprobe_out) { |
|||
global $board, $config; |
|||
|
|||
if (empty($ffprobe_out)) |
|||
return array('code' => 1, 'msg' => $config['error']['genwebmerror']); |
|||
|
|||
if ($ffprobe_out['format']['format_name'] != 'matroska,webm') |
|||
return array('code' => 2, 'msg' => $config['error']['invalidwebm']); |
|||
|
|||
if ((count($ffprobe_out['streams']) > 1) && (!$config['webm']['allow_audio'])) |
|||
return array('code' => 3, 'msg' => $config['error']['webmhasaudio']); |
|||
|
|||
if ($ffprobe_out['streams'][0]['codec_name'] != 'vp8') |
|||
return array('code' => 2, 'msg' => $config['error']['invalidwebm']); |
|||
|
|||
if (empty($ffprobe_out['streams'][0]['width']) || (empty($ffprobe_out['streams'][0]['height']))) |
|||
return array('code' => 2, 'msg' => $config['error']['invalidwebm']); |
|||
|
|||
if ($ffprobe_out['format']['duration'] > $config['webm']['max_length']) |
|||
return array('code' => 4, 'msg' => $config['error']['webmtoolong']); |
|||
} |
|||
|
|||
function make_webm_thumbnail($filename, $thumbnail, $width, $height) { |
|||
global $board, $config; |
|||
|
|||
$filename = escapeshellarg($filename); |
|||
$thumbnail = escapeshellarg($thumbnail); // Should be safe by default but you |
|||
// can never be too safe. |
|||
|
|||
$ffmpeg = $config['webm']['ffmpeg_path']; |
|||
$ffmpeg_out = array(); |
|||
|
|||
exec("$ffmpeg -i $filename -v quiet -ss 00:00:00 -an -vframes 1 -f mjpeg -vf scale=$width:$height $thumbnail 2>&1"); |
|||
|
|||
return count($ffmpeg_out); |
|||
} |
Loading…
Reference in new issue