[英]How to trim video by multiple frame numbers then concatenate using 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
如修剪过滤器文档中所示,使用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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.