赞
踩
Ref: https://trac.ffmpeg.org/wiki/Seeking
如果你需要提取只有你输入的特定部分,你需要使用seeking选项来获得在输入第一个特定组成部分。该参数-ss用于输入内seeking,它可以用来在多个地方。
该-ss
参数需要在某处指定之前-i
:
ffmpeg -ss 00:23:00 -i Mononoke.Hime.mkv -frames:v 1 out1.jpg
此示例将在电影开始的第 23 分钟生成一个图像帧 (out1.jpg)。输入将使用关键帧解析,这非常快。从 FFmpeg 2.1 开始,当使用ffmpeg
(即不仅仅是流复制)进行转码时,-ss
即使用作输入选项,现在也是“帧精确”。可以使用该-noaccurate_seek
选项恢复以前的行为(仅寻找最近的前一个关键帧,即使不准确)。
在-ss
后面指定参数的需求-i
:
ffmpeg -i Mononoke.Hime.mkv -ss 00:23:00 -frames:v 1 out2.jpg
此示例还将在电影开始的第 23 分钟精确生成一个图像帧 (out2.jpg)。
在这里,输入将被解码(并丢弃),直到它到达由 给出的位置-ss
。这将非常缓慢地逐帧完成 。由于FFmpeg的2.1,主要优点是应用过滤器到输出流时,时间戳不重置过滤(即当前烧字幕成视频,你并不需要修改字幕时间戳),但缺点是需要很长时间才能最终到达该时间点。寻道时间越长,等待的时间就越长。
为此,我们指定-ss
before 和 after 参数-i
:
ffmpeg -ss 00:22:30 -i Mononoke.Hime.mkv -ss 00:00:30 -frames:v 1 out3.jpg
从 FFmpeg 2.1 开始,组合seeking仍然是可能的,但我还没有找到有效的用例,因为-ss
作为输入选项现在既快速又准确。
这种方法使用关键帧seeking直到 00:22:30,然后逐帧seeking直到到达 00:23:00 (00:22:30 + 00:00:30)
请注意,由前面的命令创建的所有图像都应该相同。
关于如何正确设置-ss
选项的两个时间点没有一般规则,因为这些取决于输入编码时使用的关键帧间隔。为了提供一些方向,默认情况下 x264 编码器使用 250 的 GOP 大小(如果输入帧速率为 25 fps,这意味着每 10 秒有 1 个关键帧)。
只提取电影中间的一小段,可以和-t
which指定时长结合使用,比如-ss 60 -t 10
从60秒到70秒捕获。或者你可以使用-to
选项指定一个出点,比如-ss 60 -to 70
从第二个 60 到 70。-t
并且-to
是相互排斥的。如果同时使用,-t
将使用。
请注意,如果您只-ss
在之前指定-i
,时间戳将重置为零,因此-t
和-to
将具有相同的效果。如果要保留原始时间戳,请添加该-copyts
选项。
第一个命令将从 00:01:00 剪切到 00:03:00(在原始中),使用更快的seeking。
第二个命令将按照预期从 00:01:00 剪切到 00:02:00,使用较慢的seeking。
第三个命令将按照预期从 00:01:00 剪切到 00:02:00,使用更快的seeking。
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4
ffmpeg -i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy cut .mp4
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4
如果你切断与流拷贝(-c copy
),您需要使用-avoid_negative_ts 1个选项,如果你想使用该段与[CONCAT分路器](https://trac.ffmpeg.org/wiki/How to concatenate (join, merge) media files#demuxer)。
例子:
ffmpeg -ss 00:03:00 -i video.mp4 -t 60 -c copy -avoid_negative_ts 1 cut.mp4
如果您无论如何都必须重新编码,例如应用像afade这样的过滤器,这可能会很慢,请确保使用,例如,-ss 120 -i some.mov -to 60
从 120 秒到 120+60 秒获得一分钟,而不是从 120 秒-to 180
开始的三分钟。
请注意,您可以使用两种不同的时间单位格式:六十进制(HOURS:MM:SS.MILLISECONDS
,如 in 01:23:45.678
)或以秒为单位。如果使用分数,例如02:30.05
,则将其解释为“5 100ths of a second”,而不是第 5 帧。例如,02:30.5
将是 2 分 30 秒和半秒,这与使用相同150.5
片刻之间。
使用-ss
加上作为输入的选项-c:v copy
,因为可能不准确ffmpeg
被迫起用/分在I帧。尽管它会(如果可能的话)将流的开始时间调整为负值以对此进行补偿。基本上,如果您指定“second 157”并且在第二个 159 之前没有关键帧,它将在开始时包含两秒的音频(没有视频),然后将从第一个关键帧开始。所以在拆分和进行编解码器复制时要小心。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。