我有一个3:00分钟的短片段,在中间仅从左到右翻转了大约30秒。
因此,如果整个事情从左到右翻转,我只想申请:
ffmpeg -i 3min.mp4 -vf hflip flipped_3min.mp4
但是,由于仅被部分翻转,是否可以在单个ffmpeg命令中为该hflip过滤器应用时间段(1:30-2:00)?
我正在寻找有关此问题的文档,找不到任何种类的东西,想知道它是否在FFmpeg中是不可能的。
ffmpeg
?在这里,-filter_complex
是您的朋友,因为它可以创建过滤输入的链。我们仍将使用hflip
filtergraph中问题中提到的过滤器。
您可以像这样申请一个小节:
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
使用过滤器图有点像创建一系列动作,并且在过滤器文档的“过滤简介”部分对此进行了很好的视觉解释1。过滤器可与输入配合使用-这是您在过滤器之前看到的位,例如(第一个输入流的视频)或(名为创建的输出)和输出。也就是说,一个输入或输入根据变换,然后输出或者作为输出或输出。[0:v]
[a]
a
filter
我们在这里有一组简单的操作,如果我们依次进行操作,则可以建立输入和输出的过滤图。
使用以下命令创建3段视频(来自input [0:v]
)trim
:
[a]
)hflip
并setpts
避免持续时间问题(输出调整为[b]
,并将其传递hflip
给输出为[c]
)然后将这两者concat
合在一起以产生输出[a]+[c] -> [d]
(持续时间:120 s)
[e]
)连接段以产生输出[d] + [e] -> [out1]
,并将-map
其输出到文件中的最终输出。
这样可以为您提供与原始视频相同的持续时间(180 s),但中间有30秒的部分,该视频被水平翻转2。
1:
ffmpeg
在中
libavfilter
,过滤器可以具有多个输入和多个输出。为了说明可能发生的事情,我们考虑下面的过滤器图。
[main]
input --> split ---------------------> overlay --> output
| ^
|[tmp] [flip]|
+-----> crop --> vflip -------+
此过滤器图将输入流分成两个流,然后通过裁剪过滤器和vflip过滤器发送一个流,然后通过将其覆盖在顶部将其与另一个流合并回去。
2经测试使用ffmpeg version N-72939-g5b0f55a
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句