我有一个包含 H264 视频 (25 FPS) 的 MP4 文件。某些时间戳不正确(出于某些原因......)。我可以处理文件并只重新生成时间戳而不重新编码吗?我试过这个
ffmpeg -r 25 -i infile -c copy outfile
Run Code Online (Sandbox Code Playgroud)
但即使“-r”的文档说:
作为输入选项,忽略存储在文件中的任何时间戳, 而是假设恒定帧速率 fps 生成时间戳。
我也试过提到的建议,这里的底部:
ffmpeg -fflags +genpts -i infile -c copy outfile
Run Code Online (Sandbox Code Playgroud)
这也不会更改输出文件中的时间戳。还有其他方法可以执行此任务吗?时间戳是一种元数据,所以我认为它应该以某种方式成为可能。
由于旧版 x264 中的一个错误,h.264 视频流具有以下三个属性:
许多视频播放器将无法正常播放。新版本的视频播放器mpv有专门的选项
--vd-lavc-assume-old-x264
Run Code Online (Sandbox Code Playgroud)
专门解决这个问题(见:https : //mpv.io/manual/master/)。
在FFmpeg 错误跟踪器上,建议将适当的 SEI.h264 添加到视频流(我猜是包含 x264 版本信息)。我不想依赖此类黑客,所以我的问题是:是否有一种“正确”的方式(理想情况下使用 ffmpeg)来修复文件,就好像它们首先是用新的(固定)版本的 x264 编码的一样?
显然我想保持(或多或少)视频质量和文件大小。如果需要重新编码,那么除了修复旧 x264 实现的错误行为外,它应该什么都不改变。(更多信息:错误报告给出了一个损坏文件的示例。据推测,旧 x264 中的错误可能是在这里引入的。)