到目前为止,我尝试过的工具只提供了我指定的开始和结束时间的近似值。它们通常会关闭几秒钟。
我需要一个工具来在精确的开始和停止时间提取视频和音频,最好精确到毫秒。最好这样做而不会使原始视频质量明显下降。我也希望将音频保留在视频中。
使用这个 test 视频,我将一段 4 秒半的视频和音频剪成
new.mp4
:
ffmpeg -i sample-30s.mp4 -filter:v "trim=8.25:12.75,setpts=PTS-STARTPTS" -filter:a "atrim=8.25:12.75,asetpts=PTS-STARTPTS" -vcodec libx264 new.mp4
各种选项的意思是:
-filter:v
是过滤视频和-filter:a
是相同的音频。trim=
和atrim=
指定切割的开始和停止时间。setpts=
和 asetpts=
应用 PTS-STARTPTS 过滤器 将输出文件中的时间戳更改为 0:00。-vcodec libx264
使用 x264 库。时间戳可以采用多种形式,例如“23.189”表示 23.189 秒,“12:03:45”表示 12 小时 03 分 45 秒,以及 200000 微秒表示 0.2 秒。
您需要 setpts/asetpts 选项来重置时间戳,如 explained here:
请注意,帧是按时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好通过 setpts=PTS-STARTPTS 过滤器传递两个输入,让它们以相同的零时间戳开始,就像电影过滤器的例子一样。