ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
-ss
部分工作正常,但-t
被忽略。它可以正确删除用-ss
指定的初始指定秒数,但随后继续复制到输入的末尾。是否可以使用ffmpeg截断视频的末尾而无需重新编码?
#1 楼
您可以使用-ss
选项指定开始时间戳记,并使用-t
选项指定编码持续时间。时间戳记必须采用HH:MM:SS.xxx
格式或秒数(s.msec
)。以下内容将剪切前30秒,然后剪切其后10秒的所有内容:
ffmpeg -ss 00:00:30.0 -i input.wmv -c copy -t 00:00:10.0 output.wmv
ffmpeg -ss 30 -i input.wmv -c copy -t 10 output.wmv
请注意,
-t
是输出选项,必须始终在-i
之后指定。一些技巧:
对于较旧的ffmpeg版本,如果在
-ss
之后使用-i
,则可以得到更准确的查找,但同时会降低执行速度。另请参阅:使用FFmpeg搜索您可以使用
-to
而不是-t
来指定要剪切的时间戳。因此,除了-i <input> -ss 30 -t 10
之外,您还可以执行-i <input> -ss 30 -to 40
来实现相同的目的。如果您的ffmpeg不支持
-c
或-to
,则可能已经过时了。自己编译一个新版本,或从其主页下载静态版本。其实并不复杂。评论
@Mondain实际上,将-ss放在后面会获得更高的准确性。 slhck在此处blog.superuser.com/2012/02/24/…也在ffmpeg文档中提供了-ss的内容,并提到了在此之前或之后的区别。
– barlop
13-10-11在0:38
+1我来这里是为了弄清楚在前35秒后如何忽略一切,谢谢:ffmpeg -i input.wmv -c copy -t 35 output.wmv
–karlphillip
2014年9月5日19:20
这对我不起作用(mp4)。它只会产生5秒的黑屏:帧= 150 fps = 0.0 q = -1.0 Lsize = 264kB时间= 00:00:09.97比特率= 216.6kbits / s
–clocksmith
15年5月15日在18:42
这在我的视频剪辑的开头产生了3-4秒的黑屏。克里斯通过省略-c副本进行的修改消除了最初的黑屏,有关详细信息,请参见他的答案。
– joelostblom
16年4月16日在22:32
您输入“以下内容将剪切前30秒,然后剪切10秒之后的所有内容:” <-这是什么意思?剪辑是指包含? 'cos剪辑可能意味着剪辑出来。假设您的意思是包括。您是说从30秒开始,然后包括10秒?如果是这样,那么我建议您写得更清楚。
– barlop
17/12/19在2:21
#2 楼
正如其他人提到的,将-ss
放在-i
之前(快得多)或之后(更准确)会有很大的不同。 ffmpeg查找页面上的“快速准确查找”部分告诉您如何同时获得这两者,而我已经用过它了,这有很大的不同。基本上,您将-ss
放在-i
的前面和后面,只需确保在要开始切割的地方留出足够的时间,以得到另一个关键帧。示例:如果要在Video.mp4中从9min0sec到10min 0sec制作1分钟的剪辑,则可以使用以下方法快速而准确地进行剪辑:
ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4
第一个
-ss
快速搜索到(大约)8min0sec,然后第二个-ss
精确搜索到9min0sec,而-t 00:01:00
提取一个1min0sec剪辑。还要注意该页面上的这一重要点:“如果将
-ss
与-c:v copy
一起使用,则由于ffmpeg被强制仅在i帧上使用/拆分,因此最终的比特流可能最终变得断断续续,无法播放或与音频流不同步。” 这意味着即使您只想复制视频,也需要对其重新编码,否则可能会导致视频不稳定或不同步。您可以先尝试
-c copy
,但是如果视频无法正常播放,则需要重新执行。评论
相同的警告适用于-c:此搜索方式的副本。
– Jiggunjer
2015年12月8日在4:10
最好的答案,这种方式对我来说效果最好。
–恩德拉Žižka
16 Mar 24 '16 at 11:04
似乎在ffmpeg 2.1+中,“-ss”现在又快速又准确,而无需指定两次。 trac.ffmpeg.org/wiki/寻求
–康拉德·迈耶(Conrad Meyer)
18-09-30在20:35
如果视频较长,则不带-c复制的剪裁速度很慢。但是,您可以先使用复制模式进行粗修,然后通过重新编码更精确地修整结果。
– danijar
19/12/16在8:24
@ConradMeyer不,不是。当我将-c复制与-ss一起使用时,它在输出的开头增加了7秒。
– Phani Rithvij
3月24日7:35
#3 楼
我发现-ss
与-c copy
一起在开始时造成了半秒的斩波。为避免这种情况,您必须删除
-c copy
(公认会进行转码)。评论
还有另一个涉及准确性的答案。使用默认选项重新编码通常不是您想要的!
– Tomasz Gandor
17年10月9日在8:30
好点@TomaszGandor
–克里斯
17-10-10在9:56
我根本不理解@TomaszGandor的回复,但是删除-c复制可以解决它。
–尤里奥·奥诺弗雷
18年8月25日在16:11
如果使用-c复制,它将保留原始关键帧及其位置。开始时的“丢失时间”取决于关键帧之间的间隔。
–user1323995
19-10-16在15:44
当我将-c复制与-ss一起使用时,它在输出的开头增加了7秒。
– Phani Rithvij
3月24日7:23
#4 楼
手动在媒体播放器中打开文件,该文件将逐帧前进,并播放具有以下数据的AVISynth文件:
DirectShowSource(("C:\Downloads\Video\Do you want him.flv"), Pixel_Type="yuy2").Crop(0,0,-0,-0)
Subtitle("C:\Downloads\Video\Do you want him.flv", font="Arial", size=24, text_color=$ff0000, align=3)
ShowFrameNumber(scroll=true, x=336, y=27, font="Arial", size=24, text_color=$ff0000)
ShowTime(x=398, y=44, font="Arial", size=24, text_color=$ff0000)
然后用精确的时间格式剪切:
ffmpeg -i "Path\do you want him.flv" \
-ss 00:00:05.240 -to 00:00:08.360 \
-vcodec libx264 -acodec libvo_aacenc \
"Path\Do you want him1.flv"
和
ffmpeg -i "Path\do you want him.flv" \
-ss 00:00:10.240 -to 00:00:14.360 \
-vcodec libx264 -acodec libvo_aacenc \
"Path\Do you want him2.flv"
现在用视频制作一个txt文件文件,其内容如下:
file 'C:\Downloads\Video\Do you want him1.flv'
file 'C:\Downloads\Video\Do you want him2.flv'
运行ffmpeg:
ffmpeg -f concat -i FileList.txt -c copy "Path\NewName_joined.flv"
评论
如果使用-c复制,它将保留原始关键帧及其位置。您的视频将被剪切为这些关键帧,因此不会,时间不准确。
–user1323995
19-10-16在15:46
#5 楼
对我来说,-t
选项无效,但-vframes
有效。我更喜欢使用#frames
,因为我更喜欢在I帧处剪切,并且我使用ffprobe
找到了视频的GOP。对我有用的命令行是:
ffmpeg -ss 60s -i input.wmv -vframes 1800 -acodec copy -vcodec copy output.wmv
顺便说一句,将
-ss
放在-i
的前面会大大缩短执行时间。评论
实际上-vframes(或-frames:v)应该在-i之后,因为它是输出选项。
–slhck
13年20月20日在12:55
#6 楼
与user225366一样,-t选项不适用于短视频,但适用于较长的视频。对于短片,似乎-frames:v更好。这对我有用。ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4
如果视频有音频,则需要添加-acodec副本,如其他答案所示。
评论
但是如何根据要剪切的秒数确定多少帧?
–瑞安
4月15日23:56
#7 楼
请使用以下格式:ffmpeg <start time> <input file> <cut duration> <out file>
例如。录制1分钟视频后,剪切60秒剪辑
ffmpeg.exe -ss 00:01:00 -i "in file.mp4" -to 00:01:00 -c copy out.mp4
#8 楼
我看不到很多提及(我不是专家,所以也许有收获),但是如果您的文件包含其他流(如字幕)和其他元数据(如章节等),则可以剪切/修剪并保留所有流。以下命令ffmpeg -to 60 -i input.mkv -map 0 -c copy output.mkv
使用
-map 0
提取文件中的所有流,并使用-c copy
照原样复制所有流。使用
-to
省略通过-ss
的开始将剪切输入视频开始到第二十位。如果只希望将特定的流保留在剪辑中,则
map
也很有用(也许您不需要文件中的所有音频源,也不需要某些字幕)。当需要分割无法存储在FAT32存储中的大MKV文件时,可以使用此功能。
评论
这种语法是正确的。stackoverflow.com/questions/18444194 / ...