修剪mp4文件而不再对其进行编码

时间:2016-02-01 17:18:52

标签: matlab video encoding ffmpeg trim

我有一个.mp4视频文件,我需要修剪它,但无论我怎么做,修剪后的视频都会被重新编码,导致视频噪音。

我尝试过的事情:

  1. 使用Matlab打开视频,读取帧并仅写入我想要修剪视频的帧,我使用'MPEG-4'选项。

  2. 使用Windows Movie Maker修剪视频。

  3. 使用VirtualDub修剪视频。
  4. 在前2个场景中,原始mp4电影在修剪后再次编码。我无法在VirtualDub中打开mp4文件。

    那么在不重新录制视频的情况下修剪视频的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以在一个命令中进行拆分和重新编码。

创建文本文件list.txt

像这样

file 'in.mp4'
inpoint 48.101
outpoint 67.459
file 'in.mp4'
inpoint 76.178
outpoint 86.399
file 'in.mp4'
inpoint 112.140
outpoint 125.031

然后跑,

ffmpeg -f concat -i list.txt -an -crf 18 out_merged.mp4

答案 1 :(得分:2)

我已使用以下命令解决了这个问题:

ffmpeg.exe -ss 48.101  -t 19.358 -i in.mp4 -an out_part1.mp4
ffmpeg.exe -ss 76.178  -t 10.221 -i in.mp4 -an out_part2.mp4
ffmpeg.exe -ss 112.140 -t 12.891 -i in.mp4 -an out_part3.mp4

ffmpeg -i out_part1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intrmdt1.ts
ffmpeg -i out_part2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intrmdt2.ts
ffmpeg -i out_part3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intrmdt3.ts

ffmpeg -i "concat:intrmdt1.ts|intrmdt2.ts|intrmdt3.ts" -c copy out_merged.mp4

还有一些解释:

  1. -ss (start time)选项之前提供-t (duration)-i (input)选项可避免不必要的解码。
  2. 不使用-c copy提供转码,因此结果更加精确(从here获得)。
  3. 我使用了-an因为我不需要音频,如果你需要音频就省略了这个选项。
  4. 在连接生成的剪裁视频之前,我需要将它们转码为mpeg传输流,以实现无损连接(有关详细信息,您可以看到此link)。