Selur's Little Message Board

Full Version: need help with bizarre dji frame rates
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello to all you veteran hybrid users. I am seeing that hybrid seems to offer some great potential to help me with a problem of my own doing... although I'll be damned if I know what I actually did. I've got a bunch of 5k DJI drone clips that somehow got shot in some very bizarre frame-rates eg... 19.01 fps... that I need to convert to 24 fps. I've been fiddling with hybrid and have outputted some much-better but less-than-perfect fixes. The truth is, I find the app baffling and way above my pay grade, so I'm looking for help and am willing to contract someone who knows what to do to achieve the desired results. Is there anybody out there who can take a shot at this?
If you can share such a problem clip, I can look at it.
Wow. Thanks. It seems the clip is too big to attach here. I could do a wetransfer but would need an email address for that.
-> https://www.selur.de/contact alternatively upload it somewhere where you can send me a link and send it via pm

Cu Selur
Am transferring a few clips now, crossing fingers you can make them work! Thanks.
Looking at the first time codes of DJI_0050.MP4 at least the beginning show timestamps which seem to fit 23.976.
There are a few time stamps which indicate that a lower fps than 23.976.

Approaches I would recommend trying:
  • tell Hybrid simply ignore the time stamps and use 23.976
    • enable "Config->Internals->Handling->Ignore all input timecodes"
    • enable "Filtering->Misc->Overwrite input frame rate" and set it to "23.976"
    This way the input, will be dealt with as if it was 23.976 fps.
  • tell Hybrid to decode the content to 23.976
    • enable "Config->Input->Decoding->CFR output"
    • enable "Filtering->Misc->Overwrite input frame rate" and set it to "23.976"
    this should tell Hybrid to create something like:
    Code:
    clip = core.lsmas.LWLibavSource(source="G:/dji/DJI_0050.MP4", format="YUV420P10", stream_index=0, cache=0, fpsnum=24000, fpsden=1001,repeat=True, prefer_hw=0)
    for the source filter.
    This way, LWLibavSource will decode the content to 23.976 by adding duplicate frames when necessary.
    If necessary, you can get rid of the duplicates by replaying them with interpolations by using "Filtering->Frame->misc->FillDuplicateFrames' if you want. (If you  do this it is important, to adjust the threshold to match your source, so that only real duplicates will be replaced!)

Cu Selur
Ok.. so again, thank you very, very much for taking the time to respond to me. Another vital bit of info, now clearly relevant to this exchange, is that I switched back to macbook pro last year and could only find hybrid 2022.03.20.1 to install on my M2. In this version, I can't find: enable "Filtering->Misc->Overwrite input frame rate" and set it to "23.976" ... nor, for what it's worth, can I find "Filtering->Frame->misc->FillDuplicateFrames'" Are they somewhere else in that version of the app? Is there another set of parameters in this version I could tweak? I'm currently in Brazil. My PC, such as it is, is in Costa Rica. All the video wonks I know here are mac users too so I'm basically stuck. Is there any way you could run 15-20 seconds of any of those clips through hybrid to see if any of these fixes work and then, maybe, we could talk about me contracting you?
I haven't owned a mac for years, and gave up on trying to get MacOS running in a VM since it was slow and always a burden trying to get it running stable and up-to-date.
Sadly, neither of those options were available in that old version.

Another thing you can try, is to:
  • enable "Config->Internals->Handling->Ignore all input timecodes" (before loading the source)
  • enable "Config->Containers->MP4->FFmpeg instead of MP4Box
  • set "Base->Processing->Video to passthrough"
  • enable "Muxing->Overwrite->Frame rate" to "23.976"
This will drop the time codes and set the container frame rate to 23.976, depending on what you want to do with the file that might already help you.

You can also try whether calling ffmpeg directly with something like:
Code:
ffmpeg -i <path to input file> -c copy -bsf:v hevc_metadata=tick_rate=(24000/1001):num_ticks_poc_diff_one=1 <path to output file>
helps. This should basically do the above but also rewrite the frame rate info inside the video stream itself.

Forget the FillDuplicateFrames approach, I checked one of the clips and there were no duplicate frames I could notice and the difference between the frames.
(Even when the time codes were wrong, weren't really noticeable to set some fixed threshold.)
=> the ffmpeg call is probably the most sensible way to deal with these files.

Cu Selur

Ps.: on a PC I would also considering to use frame interpolation to get the source to a higher frame rate, since due to the nature of the clips there are probably no noticable interpolation artifacts.
Hello again. I tried those different solutions and nothing seemed to work so I then did what I probably should have done from the beginning and started to see if others have had the same issue with their dji drones. Turns out they have. I found this thread on the forum: https://forum.dji.com/forum.php?mod=view...tid=281934... it seems likely that the sd card is at fault. So I went through one of my clips frame x frame last night and, yep, frames are repeated, up to 10 in a row, meaning the video "freezes" and then the next frame jumps ahead a lot...  The video was recorded that way. Nothing can be done to fix it. Premier Pro is reading an "average" when it reports the bizarre frame rates. Apparently this only happens when shooting in 5k. So now you know in case somebody else comes to you with the same problem. I really appreciate your help but I'm sorry to have wasted your time.