如何在FFmpeg中保留原始视频文件头[关闭]


1

我正在尝试使用FFMpeg对我的输入视频文件进行一些处理,然后将其提供给仿真器软件(打包软件)以进行进一步处理。仿真器基本上是一个分组化软件。但无论它是什么,附加工作的原始视频文件。文件的创建者说他用过 bento4 用于创建文件的工具。与FFmpeg的那个工具有什么不同?

问题是模拟器可以读取原始视频文件,但是当我只是使用命令时 ffmpeg -i input.video -c copy output.mp4虽然它本质上应该复制所有配置,但模拟器无法读取和处理新文件。

这是原件的副本 .mp4 在模拟器中工作正常的文件。

我用了 mediainfo 工具来比较两个文件的细节,并注意到所有视频编解码器相关的配置是相同的,标题大小有一些差异可能导致问题。有没有办法强制FFmpeg保留标题信息(除了编解码器)?或者可能还有其他问题?在任何情况下,输出视频都不完全相同。

更新: 我还在努力解决这个问题。我查看了模拟器代码,然后解析了 MOOV 和片段标题的信息。使用MP4资源管理器软件,我注意到我生成的 .mp4 文件,为所有人 moof.traf.trun,示例持续时间为0,但在Track Fragment Header框中,它设置了 default_sample_duration 在工作文件中,没有 default_sample_duration,每个样本的持续时间大小为512.我想这可能是问题所在。现在有什么方法可以让它像原创一样?

enter image description here


“仿真器”是什么意思?
JakeGould

仿真器基本上是一个分组化软件。但无论它是什么,附加工作的原始视频文件。
Ariana

我不确定这是否可以解决......至少在没有访问“模拟器”软件和调试它的情况下。你得到任何关于错误的日志输出吗?它说为什么它不能处理文件?你能和开发商联系吗?
slhck

不是特定的错误。它看起来像NULL: loading binary file\ pthread_join(thread[1], NULL);
Ariana

2
嗯,这个问题归结为猜测。它最终是专有软件中的一个错误/问题,我们无法(轻松)解决而无需大量的后退和前进。
slhck

Answers:


2

如果通过标题,你的意思是MOOV框/原子,那么ffmpeg将始终构造一个新框。它不能复制框或其内容。你的命令做的是告诉FFmpeg从原始文件中解复用所有流并将它们重新转换为一个新容器。

你能具体了解你的模拟器所需的内容吗?


仿真器基本上是一个分组化软件。但无论它是什么,附加工作的原始视频文件。
Ariana

2
您的附件文件默认为MOOV,ffmpeg默认不这样做。尝试 ffmpeg -i input.video -c copy -movflags +faststart output.mp4
Gyan

@Mulvya我建议你调整你的答案来添加这些细节。
JakeGould

1
好的,mp4box表示你的源是碎片mp4。所以,试试吧 ffmpeg -i input.video -c copy -movflags +dash output.mp4
Gyan

1
@Mulvya是的,它用于流式传输。这引发了分段错误! segmentation fault (core dumped) 看起来我们越来越近了!
Ariana
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.