FFMPEG - 60 секунд из любой части видео - PullRequest
5 голосов
/ 03 декабря 2011

Что я хочу сделать, это создать 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 секунд из видео случайным образом и конвертировать его?

Ответы [ 2 ]

9 голосов
/ 03 декабря 2011

Вы можете нарезать фрагмент видео с помощью этой команды (1):

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [output_file]

И вы можете получить продолжительность видео с помощью этой команды (2):

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

В 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`;
2 голосов
/ 03 декабря 2011

Этот краткий учебник описывает способ вырезать видео с помощью 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 секунд видео.

Как указано в моем комментарии, серьезный взгляд на Wadsworth Constant будет хорошей идеей для ваших нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...