Search code examples
androidfluttervideoffmpegandroid-videoview

ffmpeg: Video duration confused for some players on Android


I am using ffmpeg to scale down and compress videos to be used in Android app. The original files are played with no problem and have no metadata issues. When I re-encode them however, the Android player is able to play them, but displays wrong durations. My app is in production and it is using official player implementations, so I wonder if there is a way to fix the corruption using ffmpeg or adding some metadata to the generated files. Hopefully that's possible, but if not - any other possible fixes will be highly appreciated :)

My ffmpeg command is complex, including scaling and encoding but I can confirm this issue is reproducible on my end with the simplest ffmpeg -i video.mp4 -c:v libx264 videogen.mp4 command.

I'm leaving links to the two files if that's helpful for reference.

Any ideas what could be causing this and how to fix it?

Player issues showcase:

video.mp4 (original)

enter image description here

videogen.mp4 (re-encoded)

enter image description here


Solution

  • After some testing I found out that the player was playing fine files with the following metadata:

    major_brand=mp42
    encoder=Lavf58.24.101
    

    So I used ffmpeg -movflags use_metadata_tags to set the working metadata :)