Reputation: 2249
When piping mpegts to ffmpeg, which should convert it to mp4 and pipe to stdout, ffmpeg says: "muxer does not support non seekable output".
After a lot of research I came to the conclusion that mp4 is a bad choice for doing those kinds of on-the-fly transcoding due to seeking. So in essence: MP4 cannot be piped through ffmpeg, which kind of makes sense.
But I do not have a contiguous mpegts stream, I have chunks of 5 seconds. So it's really just like:
I need these mp4 chunks for a HTML5 MediaSource, the fragmentation is no problem, I use mp4box.js, which works like a charm.
Questions:
In essence: Can I (somehow) interact with ffmpeg without using files ? My current solutions works with files and polling for new chunks, which is ugly.
If you are interested in my ffmpeg command, just let me know.
Upvotes: 27
Views: 25260
Reputation: 2424
If you can live with not having a true mp4
format, using ismv
actually worked even better for me (didn't damage seeking and total duration info in certain players) than manually adjusting the movflags
. According to the ffmpeg formats documentation, the ismv
format is similar to mp4
, but auto adjusts the movflags
for streaming and does a better job of it in my opinion.
Tested in: Firefox, Chrome, VLC
ffmpeg -i input.mp4 -f ismv -
Sadly neither this command nor aergistal's answer create a video compatible for upload to twitter as of 19/12/20 due to twitter's video upload validaiton being very strict and requiring what I imagine is the most common of mp4
formats. So as of right now I still have to use ffmpeg
to output directly to a file rather than stdout
to allow for twitter video upload. But I would love to hear if anyone has figured out a way around this!
Upvotes: 11
Reputation: 31219
Since you mentioned fragmentation then you can just enable it with movflags
. Example for fragments starting on each keyframe:
ffmpeg -i segment.ts -c copy -movflags frag_keyframe+empty_moov -f mp4 -
Having an empty moov
atom means it doesn't need to seek and thus works with a pipe.
Upvotes: 36