M: I’m using ffprobe to test the frame rate of some movies in a script on Linux. 99% of the time it’s working, but occasionally it will report the frame rate of a movie as being 60000/1001 when, upon opening it in VLC, the frame rate is a little less than 30. First, can you tell me what is going on That’s having it report nearly double the actual frame rate?

G: The issue you're encountering is due to ffprobe sometimes reporting the field rate instead of the frame rate, particularly with interlaced video. Here's a breakdown:


TL;DR:

If ffprobe reports 60000/1001 (~59.94 fps) for a movie that plays at ~29.97 fps in VLC, the video is likely interlaced, and ffprobe is showing the field rate (fields per second), not the frame rate (frames per second).


Details:

In interlaced content, tools like ffprobe (especially when reading container-level data or codec-specific metadata) may default to reporting the field rate, leading to 60000/1001.

Why VLC shows ~29.97:

VLC interprets the stream for playback rate, factoring in interlacing, deinterlacing settings, and actual timing. It reports frame rate in terms of complete images shown per second, so you'll see ~29.97 even if ffprobe says 59.94.


Fix:

To get the actual frame rate (not field rate), use ffprobe with the -select_streams v:0 and filter the stream frame-by-frame like this:

ffprobe -v 0 -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1 input.mp4

Or more reliably for actual playback rate:

ffprobe -v error -select_streams v:0 -count_frames -show_entries stream=nb_read_frames,r_frame_rate -of default=nokey=1:noprint_wrappers=1 input.mp4

Then you can divide total frames by duration for a real-world frame rate if needed.

Let me know if you want a script snippet that works reliably even with interlaced input.

M: I’ll just feed you the code fragment that’s giving grief; it’s a test to see if the file needs recoding due to being unnecessarily high in its FPS. I don’t want to mess with the script more than necessary to fix this test; like I said, 99% of the time the test works just fine.

FRAME_RATE=$(ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate “$file”) If (( $(echo “$FRAME_RATE > 30” | bc -l) )); then …et cetera

G: Thanks—your current logic works for most files, but trips on interlaced video, where r_frame_rate might return 60000/1001. That’s technically valid (it is the rate of fields), but misleading for your purpose.


Minimal Fix

Just wrap the rate in bc -l’s scale=2 logic so that it evaluates the fraction and compares the float, regardless of format:

FRAME_RATE=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate \
  -of default=noprint_wrappers=1:nokey=1 "$file")

FPS=$(echo "scale=2; $FRAME_RATE" | bc -l)

if (( $(echo "$FPS > 30" | bc -l) )); then
  # your code here
fi

Why it works:


This is the smallest change that keeps your logic and avoids reworking the whole test.

M: Addressing the wrong problem; the logic is catching the few high FPS (or really rarely, odd FPS like 31) files that go through the script, but I need it to identify the files where the display fps is 30 but it’s interlaced. … let’s start with my making sure I’m understanding this correctly. Give me an ffprobe command - or something else, if ffprobe can’t pull it off - that will let me identify if a file is an interlaced mp4. I want to look at my test case and find out if that’s the actual problem before going all the way into the rabbit hole.

G: Got it—thanks for the clarification. You're not trying to avoid misinterpreting high frame rates; you're trying to detect when ffprobe reports a high rate (like 59.94) but the file is actually interlaced and displayed at 29.97. Let's confirm whether interlacing is actually the cause.


Command to detect interlacing (ffprobe-based):

Use this to check if the file is flagged as interlaced:

ffprobe -v error -select_streams v:0 -show_entries stream=field_order -of default=noprint_wrappers=1:nokey=1 "$file"

If it returns values like:


Alternative field:

Also useful (less consistent but worth checking):

ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,codec_type,field_order,scan_type -of default=noprint_wrappers=1 "$file"

This may show something like:

codec_type=video
codec_name=h264
field_order=tt
scan_type=interlaced

scan_type can be:


If You Need 100% Certainty

ffprobe reads metadata. If that metadata is missing or wrong (common with poorly encoded files), you may need to actually analyze the video content. The best tool for that is ffmpeg with the idet filter:

ffmpeg -filter:v idet -frames:v 500 -an -f rawvideo -y /dev/null -i "$file"

Look in the output for:

[Parsed_idet_0 @ ...] Single frame detection: TFF: 200 BFF: 0 Progressive: 300 Undetermined: 0

That tells you how many interlaced vs progressive frames were detected over the first 500 frames.


Let me know if you want help automating the idet check in a script—it’s the most reliable but more verbose.

M: Both commands imply the MP4 is progressive, not interlaced. The user command yielded: TFF: 18 BFF: 7 Progressive: 455 Undetermined: 11

G: Perfect—that rules out interlacing as the cause of ffprobe reporting 60000/1001.


So what's really going on?

Your file is progressive, but ffprobe reports a frame rate of ~59.94 fps, while VLC shows it playing at ~29.97 fps. That means:

This is common in files:


How to check the real playback rate:

You want to measure actual frame timestamps over time. Use:

ffprobe -v error -select_streams v:0 -count_packets \
-show_entries stream=nb_read_packets,duration -of default=noprint_wrappers=1:nokey=1 "$file"

Or, more accurately (using average frame rate derived from frames and duration):

ffprobe -v error -select_streams v:0 -count_frames \
-show_entries stream=nb_read_frames,duration -of default=nokey=1:noprint_wrappers=1 "$file"

That will give you two lines:

<frame count>
<duration in seconds>

Then compute:

echo "scale=3; <frame count>/<duration>" | bc

That gives you the true FPS. If it's near 30, the file was encoded at 59.94 fps but has repeated or padded frames—so recoding might reduce size without losing real temporal resolution.


Let me know if you want to patch your script to detect that case specifically.

M: It has been reducing the size, but not by more than maybe 10% per file. At that point, my primary concern is whether the recoding will affect the quality of the result.

G: Understood. If recoding is only saving ~10%, here’s how to weigh whether it’s worth it in terms of quality vs. space:


1. Is Quality Being Harmed?

If you're doing something like this:

ffmpeg -i input.mp4 -vf fps=30 -c:v libx264 -crf 18 output.mp4

…then no, the quality is likely fine. crf 18 is visually lossless for most people. But:

To verify:

ffmpeg -i input.mp4 -vf mpdecimate,setpts=N/FRAME_RATE/TB -an -f null -

That will tell you how many duplicate frames exist. If the output logs show a lot of dropped frames (via mpdecimate), your recoding to 30fps is just removing redundancy.


2. When 10% Space Saving Is Worth It


3. When to Avoid It


TL;DR Recommendation

If you're using crf 18–23 and dropping duplicated frames from a 59.94->30 conversion, there’s no meaningful quality loss. If you're only saving 10% and re-encoding introduces artifacts you care about, skip it.

Let me know what your ffmpeg command looks like, and I’ll review for optimal results.

M: The results says Frame=43999 fps=517 q=-0.0 Lsize=N/A etc.

G: Thanks—based on that result from the ffmpeg -vf mpdecimate test (Frame=43999), here's how to interpret it:


What this means:


Conclusion:

This is real 59.94 fps video.


Recoding impact:

Since the frames are not duplicated, recoding to 30 fps will drop real visual information. That means:


Recommendation:

Do not recode these to 30 fps.
Your original script logic is too aggressive for real 59.94 content. You need a check for actual duplicate frames before downsampling FPS.

I can help you add that to your script if you'd like, using ffmpeg or ffprobe to estimate motion/difference density.

M: Let me clarify. Losing a little bit of information is OK as far as I’m concerned. My primary concern is re-encoding without adding anything to the situation – I was worried that the end result would lose quality without making any actual changes to the state of the video. This might be a fair trade-off, I think. I’ll have to consider it.

G: Thanks for the clarification—that makes sense.


You're in the safe zone, then:

You’re not degrading quality arbitrarily—you're making a deliberate simplification.


In short:

If your script is recoding:

If the goal was only to change the FPS when needed, and you’re doing that, you’re not wasting cycles or damaging content needlessly.

Let me know if you ever want to flag only redundant-frames cases in the future to optimize more aggressively.

M: Side question. Where are the screen capture settings on an iPhone 12? I’m using pokegenie, leading to a lot of pictures, and I’d like to either shut off the snapshot window you get after taking a screen capture, or at least move it

G: On your iPhone 12, you can’t move the screenshot preview ("thumbnail") that appears in the bottom-left corner after a capture—but you can disable it from saving to Photos, which might help reduce clutter if you’re taking lots of PokéGenie screenshots.

Unfortunately, Apple does not allow disabling or repositioning the preview thumbnail itself. However, here are your options:


A. Auto-Close the Screenshot Preview Faster

If you don’t touch the thumbnail, it disappears automatically after ~5 seconds. You can speed things up by swiping it off the screen:


B. Use Screen Recording Instead (as a workaround)

You can:

  1. Start screen recording (from Control Center),
  2. Interact with PokéGenie,
  3. Then extract needed frames later.

This avoids the preview popup entirely and keeps your Photos app from getting flooded.


C. Offload Screenshots from Photos Automatically

You can use Shortcuts + Automation to move screenshots to a folder or delete them after syncing them to PokéGenie. It won’t stop the preview, but it will keep things tidy.


There’s no way in current iOS (as of iOS 17) to hide, move, or prevent the screenshot preview itself from appearing.

M: Are there any poke Genie settings that will automatically delete a photo once it’s scanned

G: As of now, Poké Genie does not have a built-in option to automatically delete screenshots after scanning them. You must manually delete them from the Photos app unless you use a system-level workaround.


Workaround Options:

1. Manual Cleanup Prompt (Built-in Prompt)

Check:
Poké Genie Settings > Screenshot Scanning — look for any toggle related to deleting or managing scanned screenshots.


2. iOS Shortcut Automation (More reliable)

Set up an iOS Shortcut that runs when a screenshot is taken, waits ~10 seconds (to allow Poké Genie to scan), then deletes it.

How to do it:

This will delete screenshots shortly after they’re taken, which works well if you use live overlay or fast scan.


Let me know if you'd like a step-by-step Shortcut script to copy into your phone.

M: No, thank you. I’ll remember the shortcut thing exists though. Is there a poke genie command, which will trim down the important pictures to the circled versions generated through its ivision function

G: No, Poké Genie doesn’t currently offer a command or setting to automatically trim your screenshots down to only the generated, circled IV summary images. Here's how it works and what options you do have:


What Poké Genie does generate:

When you scan a Pokémon via screenshot:


What you can do manually:

  1. Tap the scanned Pokémon entry.
  2. On the IV result screen, tap the "Share" icon (top-right).
  3. Choose Save to Photos, Messages, or whatever export method you want.

This saves the circled version as an image—but only one at a time.


TL;DR:


Let me know if you want help setting up a workflow or shortcut to auto-delete screenshots only after a summary is saved or shared.

M: In Pokemon go, am I allowed to trade megaevolved creatures

G: No, you cannot trade a Pokémon while it is in its Mega Evolved form in Pokémon GO. To trade such a Pokémon, you must first allow it to revert to its standard form.

Additionally, if you trade a Pokémon that has previously Mega Evolved, its Mega Level will reset. This means any progress made toward reducing the Mega Energy cost for future Mega Evolutions will be lost, and the recipient will need to start over to build up the Mega Level for that Pokémon. citeturn0search0turn0search1

In summary, while it's possible to trade a Pokémon that has Mega Evolved in the past (after it has returned to its normal form), doing so will reset its Mega Evolution progress.

M: I don’t have tomato bouillon and have had trouble finding it. Know any close enough substitute? Just using it to make taco meat.

G: Yes—here are good substitutes for tomato bouillon when making taco meat:


1. Chicken bouillon + tomato paste

Best substitute. Combine:

This mimics both the umami and the tomato flavor of tomato bouillon (e.g. Knorr).


2. Chicken broth + tomato sauce

If you're not using a dry mix:


3. Crushed tomato + salt + cumin

If you want a dry taco-style seasoning:

This won't give bouillon’s full umami depth, but it's close enough in tacos.


Let me know if you want a dry seasoning mix that mimics tomato bouillon long-term.

M: What would happen if I substituted matzo meal for oat flour in a taco meat recipe

G: Substituting matzo meal for oat flour in taco meat will change texture and taste slightly, but it’ll still work depending on why the flour is there.


If the oat flour is used to:

1. Thicken or bind moisture (e.g. absorbing grease, helping seasoning stick):

2. Add subtle sweetness/nutty flavor (from oats):


Minor adjustments:


TL;DR:

Yes, you can substitute matzo meal for oat flour in taco meat. Expect a drier, breadier texture and milder taste, but it won’t ruin the dish.

M: What about some organic wheat flour?

G: Organic wheat flour works better than matzo meal for replacing oat flour in taco meat—if you're just trying to bind or thicken.


Pros:


Caveats:


TL;DR:

Wheat flour is a cleaner, more neutral substitute than matzo meal. Use it sparingly and you’ll be fine.

M: Same proportions?

G: Yes—use the same proportions as you would with oat flour:

1:1 substitution — wheat flour for oat flour

But if you’re eyeballing it in taco meat:

No other adjustments needed.

M: Give me the quick command to copy from point x to the end of a MOV file. A set of frames got corrupted, but everything except that one point is working.

G: Here’s the quick ffmpeg command to copy from a certain timestamp (e.g., point X) to the end of a .mov file without re-encoding:

ffmpeg -ss [start_time] -i input.mov -c copy output.mov

Example (start from 3 minutes in):

ffmpeg -ss 00:03:00 -i input.mov -c copy output.mov

Notes:

If -c copy causes errors (due to non-keyframe cut), try:

ffmpeg -ss 00:03:00 -i input.mov -c:v libx264 -c:a copy output.mov

…but this re-encodes the video stream while keeping audio untouched. Use only if needed.