【发布时间】:2021-08-13 04:02:43
【问题描述】:
我的原始视频“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。我不想重复或丢失帧。
我怎样才能做到这一点?
【问题讨论】:
标签: video ffmpeg fluent-ffmpeg