diff --git a/imageio/core/format.py b/imageio/core/format.py
index 34ce741..c5e093a 100644
--- a/imageio/core/format.py
+++ b/imageio/core/format.py
@@ -30,12 +30,22 @@ a format object using ``imageio.formats.add_format()``.
 # imageio.get_reader and imageio.get_writer.
 
 import os
+import sys
 
 import numpy as np
 
 from . import Array, asarray
 
 
+MODENAMES = {
+    "i": "single-image",
+    "I": "multi-image",
+    "v": "single-volume",
+    "V": "multi-volume",
+    "?": "any-mode",
+}
+
+
 class Format(object):
     """ Represents an implementation to read/write a particular file format
     
@@ -153,8 +163,9 @@ class Format(object):
         """
         select_mode = request.mode[1] if request.mode[1] in "iIvV" else ""
         if select_mode not in self.modes:
+            modename = MODENAMES.get(select_mode, select_mode)
             raise RuntimeError(
-                "Format %s cannot read in mode %r" % (self.name, select_mode)
+                "Format %s cannot read in %s mode" % (self.name, modename)
             )
         return self.Reader(self, request)
 
@@ -167,8 +178,9 @@ class Format(object):
         """
         select_mode = request.mode[1] if request.mode[1] in "iIvV" else ""
         if select_mode not in self.modes:
+            modename = MODENAMES.get(select_mode, select_mode)
             raise RuntimeError(
-                "Format %s cannot write in mode %r" % (self.name, select_mode)
+                "Format %s cannot write in %s mode" % (self.name, modename)
             )
         return self.Writer(self, request)
 
@@ -407,7 +419,10 @@ class Format(object):
             return self.iter_data()
 
         def __len__(self):
-            return self.get_length()
+            n = self.get_length()
+            if n == float("inf"):
+                n = sys.maxsize
+            return n
 
         # To implement
 
diff --git a/imageio/core/functions.py b/imageio/core/functions.py
index 71a7366..3a579b0 100644
--- a/imageio/core/functions.py
+++ b/imageio/core/functions.py
@@ -81,6 +81,7 @@ import numpy as np
 
 from . import Request, RETURN_BYTES
 from .. import formats
+from .format import MODENAMES
 
 
 MEMTEST_DEFAULT_MIM = "256MB"
@@ -176,8 +177,9 @@ def get_reader(uri, format=None, mode="?", **kwargs):
     else:
         format = formats.search_read_format(request)
     if format is None:
+        modename = MODENAMES.get(mode, mode)
         raise ValueError(
-            "Could not find a format to read the specified file " "in mode %r" % mode
+            "Could not find a format to read the specified file in %s mode" % modename
         )
 
     # Return its reader object
@@ -220,8 +222,9 @@ def get_writer(uri, format=None, mode="?", **kwargs):
     else:
         format = formats.search_write_format(request)
     if format is None:
+        modename = MODENAMES.get(mode, mode)
         raise ValueError(
-            "Could not find a format to write the specified file " "in mode %r" % mode
+            "Could not find a format to write the specified file in %s mode" % modename
         )
 
     # Return its writer object
diff --git a/imageio/plugins/ffmpeg.py b/imageio/plugins/ffmpeg.py
index ba0d8e0..e0525b3 100644
--- a/imageio/plugins/ffmpeg.py
+++ b/imageio/plugins/ffmpeg.py
@@ -286,6 +286,10 @@ class FfmpegFormat(Format):
             self.request._video = None
             if self.request.filename in ["<video%i>" % i for i in range(10)]:
                 self.request._video = self.request.filename
+            # Specify input framerate?
+            if self.request._video:
+                if "-framerate" not in str(self._arg_input_params):
+                    self._arg_input_params.extend(["-framerate", str(float(fps or 15))])
             # Get local filename
             if self.request._video:
                 index = int(self.request._video[-2])
diff --git a/imageio/plugins/tifffile.py b/imageio/plugins/tifffile.py
index d7e84ed..4bc6392 100644
--- a/imageio/plugins/tifffile.py
+++ b/imageio/plugins/tifffile.py
@@ -316,7 +316,7 @@ class TiffFormat(Format):
                 if key in WRITE_METADATA_KEYS:
                     # Special case of previously read `predictor` int value
                     # 1(=NONE) translation to False expected by TiffWriter.save
-                    if key=="predictor" and not isinstance(value, bool):
+                    if key == "predictor" and not isinstance(value, bool):
                         self._meta[key] = value > 1
                     else:
                         self._meta[key] = value

`if imageio.get_reader(...): pass` fails for FfmpegFormat.Reader objects
The following statement:

`if imageio.get_reader('<video0>'): pass`

raises 'OverflowError: cannot convert float infinity to integer' (at least in Python 2.7)

It seems that `FfmpegFormat.Reader` has no `__nonzero__()` method (nor `__bool__()` for Python 3?), so the `__len__()` method is evaluated, which, in this case, returns `float('inf')`.

A quick hack for anyone running into this issue could be to use `if ... is not None`.
(see [stackoverflow](https://stackoverflow.com/a/7816439/4720018))


diff --git a/tests/test_ffmpeg.py b/tests/test_ffmpeg.py
index 51af080..3fecb3a 100644
--- a/tests/test_ffmpeg.py
+++ b/tests/test_ffmpeg.py
@@ -4,6 +4,7 @@
 
 from io import BytesIO
 import os
+import sys
 import gc
 import time
 import threading
@@ -100,6 +101,16 @@ def test_select():
     assert imageio.formats.search_read_format(core.Request(fname1, "rI")) is F
 
 
+def test_integer_reader_length():
+    # Avoid regression for #280
+    r = imageio.get_reader("imageio:cockatoo.mp4")
+    assert r.get_length() == float("inf")
+    assert isinstance(len(r), int)
+    assert len(r) == sys.maxsize
+    assert bool(r)
+    assert True if r else False
+
+
 def test_read_and_write():
 
     R = imageio.read(get_remote_file("images/cockatoo.mp4"), "ffmpeg")

pip install -e .[dev]
parse_log_pytest
requirements.txt
apt-get update apt-get install -y gcc libfreeimage3
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.16
astropy==6.0.1
astropy-iers-data==0.2025.3.31.0.36.18
babel==2.17.0
black==25.1.0
certifi==2025.1.31
charset-normalizer==3.4.1
click==8.1.8
coverage==7.8.0
coveralls==4.0.1
docopt==0.6.2
docutils==0.21.2
exceptiongroup==1.2.2
flake8==7.2.0
idna==3.10
-e git+https://github.com/imageio/imageio.git@09c34ccd708e1913c8a58459f9db54dbf14210f9#egg=imageio
imageio-ffmpeg==0.6.0
imagesize==1.4.1
importlib_metadata==8.6.1
iniconfig==2.1.0
invoke==2.2.0
Jinja2==3.1.6
MarkupSafe==3.0.2
mccabe==0.7.0
mypy-extensions==1.0.0
numpy==1.26.4
numpydoc==1.8.0
packaging==24.2
pathspec==0.12.1
pillow==11.1.0
platformdirs==4.3.7
pluggy==1.5.0
psutil==7.0.0
pycodestyle==2.13.0
pyerfa==2.0.1.5
pyflakes==3.3.2
Pygments==2.19.1
pytest==8.3.5
pytest-cov==6.0.0
PyYAML==6.0.2
requests==2.32.3
SimpleITK==2.4.1
snowballstemmer==2.2.0
Sphinx==7.4.7
sphinxcontrib-applehelp==2.0.0
sphinxcontrib-devhelp==2.0.0
sphinxcontrib-htmlhelp==2.1.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==2.0.0
sphinxcontrib-serializinghtml==2.0.0
tabulate==0.9.0
tomli==2.2.1
typing_extensions==4.13.0
urllib3==2.3.0
zipp==3.21.0

name: imageio
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.16
      - astropy==6.0.1
      - astropy-iers-data==0.2025.3.31.0.36.18
      - babel==2.17.0
      - black==25.1.0
      - certifi==2025.1.31
      - charset-normalizer==3.4.1
      - click==8.1.8
      - coverage==7.8.0
      - coveralls==4.0.1
      - docopt==0.6.2
      - docutils==0.21.2
      - exceptiongroup==1.2.2
      - flake8==7.2.0
      - idna==3.10
      - imageio-ffmpeg==0.6.0
      - imagesize==1.4.1
      - importlib-metadata==8.6.1
      - iniconfig==2.1.0
      - invoke==2.2.0
      - jinja2==3.1.6
      - markupsafe==3.0.2
      - mccabe==0.7.0
      - mypy-extensions==1.0.0
      - numpy==1.26.4
      - numpydoc==1.8.0
      - packaging==24.2
      - pathspec==0.12.1
      - pillow==11.1.0
      - platformdirs==4.3.7
      - pluggy==1.5.0
      - psutil==7.0.0
      - pycodestyle==2.13.0
      - pyerfa==2.0.1.5
      - pyflakes==3.3.2
      - pygments==2.19.1
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - pyyaml==6.0.2
      - requests==2.32.3
      - simpleitk==2.4.1
      - snowballstemmer==2.2.0
      - sphinx==7.4.7
      - sphinxcontrib-applehelp==2.0.0
      - sphinxcontrib-devhelp==2.0.0
      - sphinxcontrib-htmlhelp==2.1.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==2.0.0
      - sphinxcontrib-serializinghtml==2.0.0
      - tabulate==0.9.0
      - tomli==2.2.1
      - typing-extensions==4.13.0
      - urllib3==2.3.0
      - zipp==3.21.0
prefix: /opt/conda/envs/imageio

tests/test_ffmpeg.py::test_integer_reader_length
tests/test_ffmpeg.py::test_writer_pixelformat_size_verbose
tests/test_ffmpeg.py::test_get_exe_installed tests/test_ffmpeg.py::test_get_exe_env tests/test_ffmpeg.py::test_select tests/test_ffmpeg.py::test_read_and_write tests/test_ffmpeg.py::test_write_not_contiguous tests/test_ffmpeg.py::test_reader_more tests/test_ffmpeg.py::test_writer_more tests/test_ffmpeg.py::test_writer_file_properly_closed tests/test_ffmpeg.py::test_writer_ffmpeg_params tests/test_ffmpeg.py::test_writer_wmv tests/test_ffmpeg.py::test_framecatcher tests/test_ffmpeg.py::test_process_termination tests/test_ffmpeg.py::test_reverse_read
imageio/plugins/tifffile.py imageio/plugins/ffmpeg.py imageio/core/functions.py imageio/core/format.py
imageio/plugins/tifffile.py imageio/plugins/ffmpeg.py imageio/core/functions.py imageio/core/format.py