转换视频而不丢失帧,并使用ffmpeg具有相同的FPS和TBR



我的原创视频"test1.mp4"具有以下属性

Stream #0:0(eng): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 283 kb/s, 34.55 fps, 50 tbr, 50k tbn, 50 tbc (default).

我从运行ffmpeg -i test1.mp4得到的。

我必须将视频编解码器更改为h264。所以我使用下面的命令

转换了上面的视频ffmpeg -i test1.mp4 test1.mp4.

但是转换后的视频的道具发生了变化。FPS是50,TBR是50。而且帧数也比原始视频增加了。

Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 114 kb/s, 50 fps, 50 tbr, 12800 tbn, 100 tbc (default)

在遵循此链接https://superuser.com/questions/1307863/why-is-ffmpeg-changing-framerate-from-60-to-120之后,我发现ffmpeg在转换时使用tbr值而不是fps,以便不丢失任何帧,但以重复帧为代价。正如上面的链接所建议的,我在转换视频时使用了vsync 0选项。

ffmpeg -i test1.mp4 -vsync 0 test1_sync.mp4.
现在帧数与输入视频相同(使用ffprobe检查)。但fps与原始视频仍有些许不同。
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 61 kb/s, 12.88 fps, 50 tbr, 12800 tbn, 100 tbc (default).

为什么帧数保持不变,即使fps是不同的?

对于我的用例,我需要转换的视频在与原始视频相同的时间戳具有相同的帧数,我只需要将编解码器更改为h264。我不希望重复或丢失帧。

我怎样才能做到这一点?

使用-r可以表示fps

ffmpeg -i test1.mp4 -r 34.55 test1_sync.mp4

持续时间:00:00:54.18,起始时间:0.000000,比特率:273 kb/s流#0:0(und):视频:h264(高)(avc1/0x31637661), yuv420p, 202x360 [SAR 1:1: DAR 101:180], 269 kb/s, 34.55 fps, 34.55 tbr, 11056 tbn, 69.10 tbc(默认)

最新更新