如何解决如何通过多个帧号修剪视频,然后使用FFMPEG连接 仅视频
使用以下代码,我可以按时间修剪视频:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]trim=60:65,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=60:65,asetpts=PTS-STARTPTS[a0]; \
[0:v]trim=120:125,setpts=PTS-STARTPTS[v1];
[0:a]atrim=120:125,asetpts=PTS-STARTPTS[a1]; \
[v0][a0][v1][a1]concat=n=2:v=1:a=1[out]" \
-map "[out]" output.mp4
在60至65秒和120至125秒的代码修剪视频之后,将它们合并到output.mp4文件中。
需要知道如何使用frame number
修剪视频并进行连接。
是否可以使用Frame Number
和fps
来获取时间?
frame_1_start = 100 #Frame Number
frame_1_end = 200 #Frame Number
frame_2_start = 450 #Frame Number
frame_3_end = 700 #Frame Number
fps = 20 # Frame per second
time_x_1 = frame_1_start/fps
time_x_2 = frame_1_end/fps
time_y_1 = frame_2_start/fps
time_y_2 = frame_2_end/fps
ffmpeg -i input.mp4 -filter_complex \
"[0:v]trim=#{time_x_1}:#{time_x_2},setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=#{time_x_1}:#{time_x_2},asetpts=PTS-STARTPTS[a0]; \
[0:v]trim=#{time_y_1}:#{time_y_2},setpts=PTS-STARTPTS[v1];
[0:a]atrim=#{time_y_1}:#{time_y_2},asetpts=PTS-STARTPTS[a1]; \
[v0][a0][v1][a1]concat=n=2:v=1:a=1[out]" \
-map "[out]" output.mp4
解决方法
如trim filter documentation所示,使用start_frame
和end_frame
选项。
仅视频
ffmpeg -i input.mp4 -filter_complex \
"[0:v]trim=start_frame=25:end_frame=100,setpts=PTS-STARTPTS[v0]; \
[0:v]trim=start_frame=200:end_frame=300,setpts=PTS-STARTPTS[v1];
[v0][v1]concat=n=2:v=1:a=0[v]" \
-map "[v]" output.mp4
视频和音频
ffmpeg -i input.mp4 -filter_complex \
"[0:v]trim=start_frame=25:end_frame=100,setpts=PTS-STARTPTS[v0]; \
[0:a]atrim=1:4,asetpts=PTS-STARTPTS[a0]; \
[0:v]trim=start_frame=200:end_frame=300,setpts=PTS-STARTPTS[v1];
[0:a]atrim=8:12,asetpts=PTS-STARTPTS[a1]; \
[v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" output.mp4
对于atrim,您可以像原始命令一样使用时间戳,或者如果您更喜欢使用音频样本,则可以使用start_sample
和end_sample
。 atrim没有start_frame
和end_frame
。
例如,如果帧频为25,并且您希望修剪包含25-100帧,那么atrim将使用atrim=1:4
。
您可以使用ffprobe
来获取frame rate和check if an input has audio。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。