使用 ffmpeg 切断视频
我使用 ffmpeg 切断一个大文件的一段视频,就像这样:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
-ss
部分可以正常工作,但是 -t
被忽略了。
有什么方法可以使用ffmpeg来切断视频的尾部而不重新编码吗?
我使用 ffmpeg 切断一个大文件的一段视频,就像这样:
ffmpeg -i input.wmv -ss 60 -t 60 -acodec copy -vcodec copy output.wmv
-ss
部分可以正常工作,但是 -t
被忽略了。
有什么方法可以使用ffmpeg来切断视频的尾部而不重新编码吗?
正如其他人所提到的,把-ss
放在-i
之前(更快)或之后(更准确)会有很大的区别。ffmpeg seek页面上的 “快速而准确的搜索 "一节告诉你如何同时获得这两点,我已经用过了,它有很大的区别。基本上你把-ss
放在-i
之前和-ss
之后,只要确保在你要开始切割的地方之前留出足够的时间,就可以得到另一个关键帧。举个例子。如果你想做一个1分钟的片段,在Video.mp4中从9min0sec到10min0sec,你可以用
ffmpeg -ss 00:08:00 -i Video.mp4 -ss 00:01:00 -t 00:01:00 -c copy VideoClip.mp4
&001
第一个-ss
求快速到(大约)8min0sec,然后第二个-t 00:01:00
求精确到9min0sec,-ss
取出一个1min0sec的片段。"如果你用-c:v copy
和-c copy
一起使用,最终产生的比特流可能会很不流畅,不能播放,或者与音频流不同步,因为ffmpeg被迫只在i帧上使用/分割。”
这意味着你需要重新编码视频,即使你想只是复制视频,也要重新编码,否则会有不流畅和不同步的风险。你可以先试一下&007,但如果视频很烂,你就需要重做。
在一个媒体播放器中打开文件,将文件逐帧推进,并播放一个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)
,然后用EXACT时间格式进行剪切。
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"
和用户225366一样,-t选项对短视频无效,但对长视频有效。对于短视频来说,-frames:v似乎更好。
ffmpeg -ss 4 -i input.mp4 -frames:v 200 -vcodec copy output.mp4
-acodec copy 如果视频有音频,就需要添加-acodec copy,如其他答案所示。