Como faço para virar apenas uma subseção de um vídeo usando ffmpeg
?
Aqui, -filter_complex
é seu amigo, pois pode criar cadeias de entrada filtrada . Ainda estaremos usando o filtro hflip
mencionado na pergunta no filtro de filtros.
Você pode se inscrever em uma subseção assim:
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
Uma linha para copiar e colar fácil:
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
Explicação:
Usar um filtergraph é um pouco como criar uma cadeia de ações, e há uma boa explicação visual 1 disso no seção" Introdução à filtragem " da documentação de filtros. Os filtros funcionam com entradas - esse é o bit que você vê antes do filtro, por exemplo, [0:v]
(vídeo do primeiro fluxo de entrada) ou [a]
(uma saída criada chamada a
) - e saídas . Ou seja, uma entrada ou entradas são transformadas de acordo com um filter
e, em seguida, saem como saídas de saída ou .
Nós temos um conjunto simples de ações aqui, e se passarmos por aquelas em sequência, podemos construir um filtro gráfico de entradas e saídas.
Segmentos
Crie 3 segmentos de vídeo (da entrada [0:v]
) usando trim
:
- Primeiro segmento (90 segundos), não faça nada (saída como
[a]
) - Segmento secundário (30 segundos),
hflip
esetpts
para evitar problemas de duração (saída de corte como[b]
e passar isso parahflip
para saída como[c]
)
Estes dois são então concat
ed juntos para fazer a saída [a]+[c] -> [d]
(duração: 120 s)
- Terceiro segmento (60 segundos), defina PTS novamente (saída como
[e]
)
Participe dos segmentos para gerar a saída [d] + [e] -> [out1]
e -map
para a saída final no arquivo.
Isso lhe dá um vídeo com a mesma duração do original (180 s), mas com uma seção de 30 segundos no meio que são invertidos horizontalmente 2 .
1 :
Representação visual de ffmpeg
filtros de documentação
In
libavfilter
, a filter can have multiple inputs and multiple outputs. To illustrate the sorts of things that are possible, we consider the following filtergraph.
[main]
input --> split ---------------------> overlay --> output
| ^
|[tmp] [flip]|
+-----> crop --> vflip -------+
This filtergraph splits the input stream in two streams, then sends one stream through the crop filter and the vflip filter, before merging it back with the other stream by overlaying it on top.
2 Testado usando ffmpeg version N-72939-g5b0f55a