我正在用ffmpeg切出像这样的大文件的一部分:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
该-ss
部分工作正常,但-t
被忽略。它会正确删除指定的初始指定秒数,-ss
但会一直到副本输入的末尾。
有没有一种方法可以使用ffmpeg切断视频的结尾而无需重新编码?
我正在用ffmpeg切出像这样的大文件的一部分:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
该-ss
部分工作正常,但-t
被忽略。它会正确删除指定的初始指定秒数,-ss
但会一直到副本输入的末尾。
有没有一种方法可以使用ffmpeg切断视频的结尾而无需重新编码?
Answers:
您可以使用该-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
。
一些技巧:
-ss
after -i
,则可以获得更准确的查找,但要以完全缓慢的执行为代价。另请参阅:使用FFmpeg进行搜索您可以使用-to
代替-t
来指定要剪切的时间戳。因此,代替-i <input> -ss 30 -t 10
您也可以做到-i <input> -ss 30 -to 40
相同的事情。
ffmpeg -i input.wmv -c copy -t 35 output.wmv
frame= 150 fps=0.0 q=-1.0 Lsize= 264kB time=00:00:09.97 bitrate= 216.6kbits/s
-c copy
了修改,删除了最初的黑屏,有关详细信息,请参见他的答案。
正如其他人所提到的,-ss
在(快得多)之前或之后(更准确)-i
进行放置会产生很大的不同。ffmpeg查找页面上的“快速准确查找”部分介绍了如何同时获得这两种方法,而我已经用过它了,这有很大的不同。基本上,您将-ss
AND 放在之前-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:a copy
于这种寻求方式。
我发现,-ss
加上-c copy
导致开始时出现了半秒的斩波。
为避免这种情况,您必须删除-c copy
(必须进行转码)。
-c copy
它。
在将逐帧前进的媒体播放器中打开文件,并使用以下数据播放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"
与user225366一样,-t选项不适用于短视频,但适用于较长的视频。对于短片,似乎-frames:v更好。这对我有用。
ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4
如果视频有音频,则需要添加-acodec复制,如其他答案所示。
我看不到很多提及(我不是专家,所以也许有收获),但是如果您的文件包含其他流(如字幕)和其他元数据(如章节等),则可以剪切/修剪并保留所有流。以下命令
ffmpeg -to 60 -i input.mkv -map 0 -c copy output.mkv
随着-map 0
你把所有的数据流文件中,并与-c copy
您复制所有这些,因为它们。
使用-to
省略开始过孔-ss
将把输入视频从开始剪切到60秒。
map
如果只希望将特定的流保留在剪辑中(可能不需要文件中的所有音频源,也不需要某些字幕),则进行整理也很有用。
当我需要分割无法存储在FAT32存储中的大MKV文件时,会使用此文件。