6

У меня короткий 3-минутный клип, который переворачивается слева направо примерно на 30 секунд посередине.

Так что, если бы все это было перевернуто слева направо, я бы просто хотел применить:

ffmpeg -i 3min.mp4 -vf hflip flipped_3min.mp4

Но так как он только частично перевернут, есть ли способ в одной команде ffmpeg применить временной сегмент для этого фильтра hflip (1:30-2:00)?

Я ищу некоторую документацию по этому вопросу и не могу найти ничего подобного, мне интересно, просто это невозможно в FFmpeg или нет.

2 ответа2

10

Как мне перевернуть только часть видео с помощью ffmpeg?

Здесь -filter_complex ваш друг, так как он может создавать цепочки отфильтрованного ввода. Мы все еще будем использовать фильтр hflip упомянутый в вопросе на фильтре.

Вы можете обратиться к подразделу так:

ffmpeg -i input.mp4 -filter_complex "[0:v]trim=start=0:duration=90[a];\
[0:v]trim=start=90:duration=30,setpts=PTS-STARTPTS[b];\
[b]hflip[c];\
[a][c]concat[d];\
[0:v]trim=start=120:duration=60,setpts=PTS-STARTPTS[e];\
[d][e]concat[out1]" -map [out1] flip.mp4

Одна строка для легкого копирования + вставки:

ffmpeg  -i input.mp4 -filter_complex "[0:v]trim=start=0:duration=90[a];[0:v]trim=start=90:duration=30,setpts=PTS-STARTPTS[b];[b]hflip[c];[a][c]concat[d];[0:v]trim=start=120:duration=60,setpts=PTS-STARTPTS[e];[d][e]concat[out1]" -map [out1] flip.mp4

Объяснение:

Использование filtergraph немного похоже на создание цепочки действий, и есть хорошее визуальное объяснение 1 этого в разделе «Введение в фильтрацию» документации по фильтрам. Фильтры работают со входами - это бит, который вы видите перед фильтром, например, [0:v] (видео первого входного потока) или [a] (созданный вывод с именем a) - и вывод. То есть, входной или входы преобразуются в соответствии с filter и затем выводится либо как выход или выходы.

Здесь у нас есть простой набор действий, и если мы выполним их последовательно, мы сможем построить фильтр-график входов и выходов.

Сегменты

Создайте 3 сегмента видео (из входа [0:v]), используя trim:

  • Первый сегмент (90 секунд), ничего не делать (выводится как [a])
  • Второй сегмент (30 секунд), hflip и setpts чтобы избежать проблем длительности (обрезать вывод как [b] и передать это hflip для вывода как [c])

Эти два затем concat ред вместе , чтобы сделать вывод [a]+[c] -> [d] (продолжительность: 120 сек)

  • Третий сегмент (60 секунд), снова установите PTS (выводится как [e])

Объедините сегменты, чтобы сделать вывод [d] + [e] -> [out1] , и -map для окончательного вывода в файл.

Это дает вам видео той же длительности, что и оригинал (180 с), но с разделом в 30 секунд в середине, который перевернут горизонтально 2.


1:

Визуальное представление из документации фильтров ffmpeg

В libavfilter фильтр может иметь несколько входов и несколько выходов. Чтобы проиллюстрировать возможные варианты, рассмотрим следующий фильтр-граф.

                [main]
input --> split ---------------------> overlay --> output
            |                             ^
            |[tmp]                  [flip]|
            +-----> crop --> vflip -------+

Этот фильтр графа разделяет входной поток на два потока, а затем отправляет один поток через фильтр кадрирования и фильтр vflip, а затем объединяет его с другим потоком, накладывая его сверху.


2 Протестировано с использованием ffmpeg version N-72939-g5b0f55a

5


В этом примере горизонтальное переворачивание происходит между 2-3 секундами.

Вы можете использовать фильтр geq с опцией enable ("редактирование временной шкалы"):

Пример ffmpeg :

ffmpeg -i input -vf "geq='p(W-X,Y)':enable='between(t,90,120)'" -c:a copy output

ffplay :

ffplay -vf "geq='p(W-X,Y)':enable='between(t,90,120)'" input

Заметки:

  • В настоящее время hflip не поддерживает редактирование временной шкалы, поэтому в этом примере использовался geq.

  • Вы можете увидеть, какие фильтры поддерживают редактирование временной шкалы с помощью ffmpeg -filters . Буква « T » перед именем фильтра указывает, что он поддерживает редактирование временной шкалы.

  • В этом примере будет воспроизводиться потоковое копирование аудио, если вы хотите просто повторно мультиплексировать, а не перекодировать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .