我正在尝试使用 FFMpeg 对输入的视频文件进行一些处理,然后将其交给仿真器软件(一种打包软件)进行进一步处理。仿真器基本上是一种打包软件。但无论它是什么,都会附加可用的原始视频文件。该文件的创建者说他使用bento4
工具来创建该文件。与 FFmpeg 的工具有什么不同?
问题是模拟器可以读取原始视频文件,但是当我简单地使用命令时ffmpeg -i input.video -c copy output.mp4
,虽然它应该基本上复制所有配置,但模拟器无法读取和处理新文件。
这是原件的副本.mp4
在模拟器中运行良好的文件。
我使用mediainfo
工具比较了这两个文件的详细信息,发现虽然所有视频编解码器相关配置都相同,但标头大小存在一些差异,这可能是导致问题的原因。有什么方法可以强制 FFmpeg 保留标头信息(编解码器除外)?或者可能还有其他问题?无论如何,输出视频并不完全相同。
更新:
我仍然在努力解决这个问题。我查看了模拟器代码,它解析了MOOV
和片段标头以获取信息。使用 MP4 浏览器软件,我注意到在我生成的.mp4
文件中,对于所有moof.traf.trun
,样本持续时间为 0,但在轨道片段标头框中,它将设置default_sample_duration
为 512。而在工作文件中,没有default_sample_duration
,并且每个单独的样本的持续时间大小为 512。我猜这可能是问题所在。现在有什么方法可以让它像原版一样吗?
答案1
如果您所说的标头指的是 MOOV 框/原子,那么 ffmpeg 将始终构造一个新框。它无法复制框或其内容。您的命令的作用是告诉 FFmpeg 从原始文件解复用所有流,然后将它们重新复用到新容器中。
你能具体说明你的模拟器在寻找什么吗?