ffmpeg 甚至没有将此 mp4 和其他 mp4 剪切到最接近的秒数

ffmpeg 甚至没有将此 mp4 和其他 mp4 剪切到最接近的秒数

我有一个文件

其他 - Analogue Clock-JEJqy1Wlovw.mp4 只需从以下网址下载即可https://www.youtube.com/watch?v=JEJqy1Wlovw

时长为2分13秒。

我在将其剪切到第二个时遇到了一些问题。

我能够使用这个命令

ffmpeg -ss 0 -i infile.mp4 -c copy -t 60 output.mp4

制作一个 60 秒的文件,所以到目前为止没有问题。

该文件正好是 1 分钟,到目前为止没有问题。

C:\vids\a>dir
blahhclo.mp4   9,590,540 bytes

C:\vids\a>


C:\vids\a>mediainfo blahhclo.mp4
General
Complete name                            : blahhclo.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom
File size                                : 9.15 MiB
Duration                                 : 1mn 0s
Overall bit rate                         : 1 278 Kbps
Writing application                      : Lavf58.3.100

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : [email protected]
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 3 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 1mn 0s
Bit rate                                 : 1 146 Kbps
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 25.000 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.022
Stream size                              : 8.21 MiB (90%)

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 40
Duration                                 : 1mn 0s
Bit rate mode                            : Constant
Bit rate                                 : 126 Kbps
Channel count                            : 2 channels
Channel positions                        : Front: L R
Sampling rate                            : 44.1 KHz
Compression mode                         : Lossy
Delay relative to video                  : 40ms
Stream size                              : 920 KiB (10%)



C:\vids\a>

但是当我尝试在以下时间剪切时,我确实遇到了一个问题,那就是我是否尝试剪切 1 分钟的片段还是整个 2 分 13 秒的片段。

如果我使用 -ss 0 -t 1 剪切,它会生成一个 1s 22ms 的文件。

所以这还不算太糟,已经相当接近一秒了。对于缩短一秒的尝试来说,1.022 秒已经相当不错了。

如果我使用 -ss 0 -t 2 剪切,它会生成一个 3 秒 19 毫秒的文件,这太糟糕了!它应该是一秒钟!

如果我使用 -ss 0 -t 30 进行剪切,那么就可以了,它会执行 30 秒 1 毫秒。

或者例如这个视频,也是 mp4https://www.youtube.com/watch?v=pJ3-xf26wDE

C:\blah>ffmpeg -ss 189 -i vid.mp4 -c copy -t 6 someoutput.mp4

C:\blah>mediainfo someoutput.mp4

持续时间为 8 秒 383 毫秒

但这是错误的,因为它应该是 6 秒!所以这多出了两秒!

C:\blah>ffmpeg -ss 191 -i vid.mp4 -c copy -t 6 someoutput2.mp4

C:\blah>mediainfo output2.mp4

显示 ffmpeg 产生了持续时间为 10s 403ms 的视频

这是非常错误的,因为 ffmpeg 命令指定了 6 秒!

所以这不只是迟了 1 秒,而是迟了 4 秒!

这几乎比实际时间长了 50%!

答案1

如果你需要帧精度,不要使用-c copy,它的含义与 相同-c:a copy -c:v copy -c:s copy。它会复制比特流,如果指定的开始或结束时间不在I 帧,则获取最近的一个,但该位置可能与所需位置相距很远。另请参阅寻求维基

但是,您可以重新编码视频以获得准确的剪切。音频可以复制,因为基本上,音频流只有“关键帧”。例如,为了将视频编码为 H.264 并复制音频,请应用以下命令:

ffmpeg -ss 191 -i vid.mp4 -c:v libx264 -c:a copy -t 6 someoutput3.mp4 

成功了;它生成的文件耗时为 6 秒 26 毫秒。因此,这与使用比特流复制的耗时(10.4 秒)相比非常接近。

重新编码可能会降低视频流的质量。要更改视频质量,请参阅H.264 编码指南

此命令:

ffmpeg -ss 193 -i vid.mp4 -c:v libx264 -c:a copy -t 4 someoutput4.mp4

生成一个耗时 4 秒 26 毫秒的文件。接近 4 秒,这是应该的,而如果我使用比特流复制,则需要 5 秒多一点。

相关内容