如何使用 ffmpeg 从 .mp4 文件中删除几秒钟?

Dem*_*ngo 13 ffmpeg

如何使用 ffmpeg 从 .mp4 文件中删除几秒钟?我有 test.mp4 文件,我想从 11:00 到 11:10 删除 10s

llo*_*gan 12

快速但可能不准确

这避免了重新编码,但您只能剪切关键帧,因此它可能无法选择您想要的持续时间。

  1. 创建细分:

    ffmpeg  -t 00:11:00 -i input.mp4 -map 0 -c copy segment1.mp4
    ffmpeg -ss 00:11:10 -i input.mp4 -map 0 -c copy segment2.mp4
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建input.txt

    file 'segment1.mp4'
    file 'segment2.mp4'
    
    Run Code Online (Sandbox Code Playgroud)
  3. concat demuxer连接:

    ffmpeg -f concat -i input.txt -map 0 -c copy output.mp4
    
    Run Code Online (Sandbox Code Playgroud)

缓慢但准确

您可以尝试在不重新编码的情况下执行此操作,但由于您只能在关键帧上进行剪切,因此可能无法与所需的剪切时间保持一致,因此如果您需要准确性,则需要重新编码:

ffmpeg -i input.mp4 -filter_complex \
  "[0:v]trim=end=660,setpts=N/FRAME_RATE/TB[v0]; \
   [0:a]atrim=end=660,asetpts=N/SR/TB[a0]; \
   [0:v]trim=start=670,setpts=N/FRAME_RATE/TB[v1]; \
   [0:a]atrim=start=670,asetpts=N/SR/TB[a1]; \
   [v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]" \
  -map "[v]" -map "[a]" output.mp4
Run Code Online (Sandbox Code Playgroud)
  • (a)trim 将允许您选择您的剪辑。
  • (a)setpts 重置时间戳。
  • concat 连接剪辑。

有关每个过滤器的详细信息,请参阅FFmpeg 过滤器文档


小智 5

我认为您必须将视频分成 2 部分,然后将它们合并在一起。第一个“时间值”是起点,第二个“时间值”是您要剪切的视频长度。例如在下面,第一次剪辑从 00:00:00 开始,长度为 11 分钟,第二次剪辑从 11 分 10 秒开始,长度为 10 分钟。

切割:

ffmpeg -i test.mp4 -ss 00:00:00 -t 00:11:00 -acodec copy -vcodec copy test1.mp4

ffmpeg -i test.mp4 -ss 00:11:10 -t 00:10:00 -acodec copy -vcodec copy test2.mp4

合并:

cat test1.mp4 test2.mp4 >> test3.mp4

我没试过,如果有效请告诉我。

  • `cat` 似乎不起作用,我认为您需要使用 `ffmpeg -f concat` 来正确编码文件。 (3认同)