当将mpegts发送到ffmpeg时,它应该将其转换为mp4并将其转换为stdout,ffmpeg说:“muxer不支持非可搜索输出”。
经过很多的研究后,我得出的结论是mp4是一个不好的选择,可以通过搜索来进行那些类型的即时转码。所以从本质上说:MP4不能通过ffmpeg进行管道传输,这是有道理的。
但我没有连续的mpegts流,我有5秒钟的块。 所以它真的就像:
我需要这些mp4块用于HTML5 MediaSource,碎片没有问题,我使用mp4box.js,它就像一个魅力。
问题:
本质上:我可以(不知何故)与ffmpeg交互而不使用文件吗?我目前的解决方案适用于文件和轮询新的块,这很难看。
如果您对我的ffmpeg命令感兴趣,请告诉我。
答案 0 :(得分:13)
由于您提到了碎片,因此您可以使用movflags
启用碎片。从每个关键帧开始的片段示例:
ffmpeg -i segment.ts -c copy -movflags frag_keyframe+empty_moov -f mp4 -
拥有一个空的moov
原子意味着它不需要寻找,因此可以使用管道。
答案 1 :(得分:0)
如果您可以忍受没有真正的mp4
格式,那么使用ismv
实际上对我来说甚至更好(对某些玩家而言,没有寻求损害和总时长信息)比手动调整{ {1}}。根据{{3}},movflags
格式与ismv
类似,但是自动调整mp4
进行流传输,并在我看来做得更好。
经过以下测试:Firefox,Chrome,VLC
movflags
遗憾的是,由于Twitter的视频上传有效期非常严格,并且要求我以{{1}最常见的方式,因此该命令和ffmpeg formats documentation都无法创建兼容于19/12/20的视频上传到Twitter }}格式。因此,到目前为止,我仍然必须使用ffmpeg -i input.mp4 -f ismv -
直接输出到文件,而不是使用mp4
来上传Twitter视频。但是我很想听听是否有人想出办法解决这个问题!