我有30分钟的视频文件,但我想从00:09:23到00:25:33提取视频。

我可以使用-ss定义起点,但找不到终点位置。请帮忙吗?

#1 楼

安装ffmpeg

确保下载了最新版本的ffmpeg,并且不要使用发行版随附的版本(例如Ubuntu)。来自各种发行版的打包版本通常已过时,无法正常运行。

或者自己编译。

如何剪辑视频,而无需重新编码

用它从[start]切出[duration]的视频:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4


这里的选项表示以下内容: >
-ss指定开始时间,例如00:01:23.00083(以秒为单位)

-t指定剪辑的持续时间(相同格式)。
代替-t,您还可以提供-to的结束时间。

-c copy将输入的第一个视频,音频和字幕比特流复制到输出文件,而无需重新编码。这不会损害质量并使命令在几秒钟内运行。

请注意,如果您使用了-ss,则必须从-to时间戳中减去它。例如,如果使用-ss 3 -i in.mp4 -to 5剪切,则输出将为5秒长。

有关更多信息,请参见https://trac.ffmpeg.org/wiki/Seeking

如何通过重新编码来剪切视频

如果不使用-c copy选项,则ffmpeg将根据您选择的格式自动对输出的视频和音频重新编码。要获得高质量的视频和音频,请分别阅读《 x264编码指南》和《 AAC编码指南》。

例如:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4


评论


在Ubuntu 12:10上,-c:v和-c:a无效。我不得不使用“ -acodec复制和-vcodec复制”。

–塞缪尔·兰帕(Samuel Lampa)
13年4月2日在14:21

@Samuel然后,您正在使用一个过时的版本,它甚至不是真正的FFmpeg,而是Libav分支。请参阅:stackoverflow.com/a/9477756/1109017

–slhck
13年4月2日在14:45

谢谢你!如果您未指定持续时间,它将结束吗?

–杰夫
2014年3月31日在17:03

@Jeff是的! (最少字符)

–slhck
2014年4月1日下午5:34

@Prateek复制视频比特流(而不是重新编码)时,只能剪切关键帧。如果在第1、2和3秒有关键帧,但您想在1.5秒处剪切,则ffmpeg将等到第二秒后才能开始剪切。这使其不准确。

–slhck
2015年7月3日,12:36

#2 楼

我想您可以立即使用以下命令。

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile


也请看ffmpeg Doc或此Wiki页面。

评论


ffmpeg -i inputFile -c复制-ss 00:09:23 -to 00:25:33 outputFile更简单的版本

– nwgat
16年11月20日在16:37

我必须使用ffmpeg -ss 00:01:00 -i video.mp4-至00:02:00 -c复制-copys cut.mp4版本(带有-copyts),否则它剪切不正确(开头是黑屏) )。谢谢第二个链接。

– Necronomicron
18年1月12日在15:51

太好了,我最后想要做的就是计算端点的持续时间。

– Tomasz Gandor
18年5月11日在9:50

-to选项回答实际提出的问题。其余的答案是无礼的或过时的。

–詹姆斯·鲍里(James Bowery)
18年5月15日在15:35

@Necronomicron,但时间戳可能不适用于该变体。

– jarno
20-4-2在23:33

#3 楼

奇怪的是没有人建议使用trim过滤器。

除第二分钟输入内容外,放弃所有内容:

ffmpeg -i INPUT -vf trim=60:120


只保留第一分钟第二个:

ffmpeg -i INPUT -vf trim=duration=1


从第13个秒到第二个58放掉所有东西:

ffmpeg -i INPUT -vf trim=13:58 OUTPUT


评论


是的,值得一提的是修剪和装饰。我通常在过滤时使用这些,但用户应注意,过滤需要重新编码。

– llogan
15年4月7日在17:28

你是我的英雄。我非常需要执行此操作的过滤器。

– fahadash
16 Dec 24'在5:55

#4 楼

您可以使用在Windows和Linux上都可以使用的两种方法。

有两种方法可以通过ffmpeg分割视频文件。第一个本身就不错,而且比它更好-它更快,但是有时创建的输出文件有某些缺陷。因此,在这种情况下,还有第二种分割视频文件的方法:它速度相当慢,输出文件更大,但是看来它们始终与输入文件具有相同的质量等级。
方法1:
ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

方法2:
ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi



<start> –视频ffmpeg的开头部分是剪切掉的。格式:00:00:00.0000,表示小时:分钟:秒:毫秒。


<duration> –视频ffmpeg部分的持续时间将被切掉。与上述格式相同。


示例:
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi



评论


好的,谢谢。将签出文档,明天再试。

–juGGaKNot
13-10-3在19:18

-sameq并不意味着“质量相同”,已从ffmpeg中删除。请改用-codec copy。另外,不要忘记-to选项。

– llogan
13-10-3在20:47



我已经更正了您引用中的命令,因为它们已经过时了。请不要在未正确引用的情况下复制粘贴信息。

–slhck
13-10-4在10:08



#5 楼

您可以使用此

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg


在这里,您必须提供视频时长。即。 00:25:33-00:09:23

评论


正如我在另一个答案中提到的那样:使用命令,您将重新编码文件,这绝对不是必需的,并且会导致质量降低和处理时间增加。

–slhck
2012年1月11日在21:18



#6 楼

我使用以下语法用ffmpeg剪切视频:

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-t用于设置持续时间(以秒为单位)-您无法指定结束时间,但这应该为您服务。

评论


为什么要设置FFmpeg重新编码文件?请注意,-sameq根本不表示“相同的质量”。

–slhck
2012年1月11日在21:18