Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php FFMPEG-视频任何部分播放60秒_Php_Video_Ffmpeg - Fatal编程技术网

Php FFMPEG-视频任何部分播放60秒

Php FFMPEG-视频任何部分播放60秒,php,video,ffmpeg,Php,Video,Ffmpeg,我想做的是从上传的视频创建一个60秒的FLV。 但是我不想总是得到前60秒,如果可能的话,我想得到视频的中间部分。但如果不是,我想得到一个随机60秒的视频文件的一部分,并创建flv 我正在使用以下脚本生成FLV文件 $call="/usr/bin/ffmpeg -i ".$_SESSION['video_to_convert']." -vcodec flv -f flv -r 20 -b ".$quality." -ab 128000 -ar ".$audio." ".$converted_v

我想做的是从上传的视频创建一个60秒的FLV。 但是我不想总是得到前60秒,如果可能的话,我想得到视频的中间部分。但如果不是,我想得到一个随机60秒的视频文件的一部分,并创建flv

我正在使用以下脚本生成FLV文件

$call="/usr/bin/ffmpeg -i ".$_SESSION['video_to_convert']." -vcodec flv -f flv -r 20 -b ".$quality." -ab 128000 -ar ".$audio."  ".$converted_vids.$name.".flv -y 2> log/".$name.".txt";

$convert = (popen($call." >/dev/null &", "r"));
pclose($convert);
所以我的问题是,如何从视频中随机获得60秒并转换它?

简短教程介绍了一种使用FFMPEG剪切视频的方法。基本语法由以下开关组成:

  • -ss[start_seconds]
    以秒为单位设置起点
  • -t duration
    告诉FFMPEG剪辑应该有多长
所以你的电话看起来像这样:

$call="/usr/bin/ffmpeg -i ".$_SESSION['video_to_convert']." \
-vcodec flv \
-f flv \
-r 20 \
-b ".$quality." \ 
-ab 128000 \
-ar ".$audio." \
-ss 0 \
-t 60 \
".$converted_vids.$name.".flv -y 2> log/".$name.".txt"
获取前60秒的视频


正如我在评论中所说,认真地看一看视频是满足您需要的一个好主意。

您可以使用以下命令(1)剪切一段视频:

您可以使用以下命令(2)获取视频持续时间:

在php中,这将是:

$max_duration = `ffmpeg -i $input_file 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//`;
$start = intval(($max_duration - 60) / 2);
`ffmpeg -sameq -ss $start -t 60 -i $input_file $output_file`;

您应该看一下,以获得正确的视频位。它可以工作,但没有反斜杠。这会产生一个错误。@Vlad谢谢你的帮助。随机错乱的打字错误,不知道它是怎么进入的。远离的。
ffmpeg -i <infile> 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//
* variable start = (max_duration - 60) / 2
* execute system call command (1) with
    [start_seconds] = variable start   # (starts 30s before video center)
    [duration_seconds] = 60            # (ends 30s after video center)
    [input_file] = original filename of video
    [output_file] = where you want the 60-second clip to be saved
$max_duration = `ffmpeg -i $input_file 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//`;
$start = intval(($max_duration - 60) / 2);
`ffmpeg -sameq -ss $start -t 60 -i $input_file $output_file`;