UPD: Я не заметил, что в Mesen можно сохранять в PNG сразу через Lua
Вторая версия скрипта в SaveScreenshotsMesen_v2.lua.7z.
Mesen + Lua-скриптСоздать в папке с ромом папку с именем рома с
_s на конце, например,
C:\test rom.nes создать папку
C:\test rom.nes_s, там будут скриншоты. Запустить игру в Mesen (который новый), открыть Debug > Script Window, открыть скрипт
SaveScreenshotsMesen_v2.lua, начнётся сразу сохранение кадров, если эмуляция не на паузе, можно включать и выключать Lua-скрипт.
В Mesen можно отключать фон и спрайты. Для FCEUX можно написать похожий скрипт.
UPD2: Для консолей, которые не поддерживает Mesen, можно сделать Lua-скрипт для BizHawk, там есть void client.screenshot([string path = nil]), string event.onframeend(nluafunc luaf, [string name = nil]), string gameinfo.getromname(), про полный путь до рома не знаю.
Mesen + Lua-скрипт + Python-скрипт
Создать в папке с ромом папку с именем рома с _s на конце, например, C:\test rom.nes создать папку C:\test rom.nes_s, там будут скриншоты. Запустить игру в Mesen (который новый), открыть Debug > Script Window, открыть скрипт SaveScreenshotsMesen.lua, начнётся сразу сохранение кадров, если эмуляция не на паузе, можно включать и выключать Lua-скрипт. Скриншоты сохраняются байтами RGB (24 бита), для преобразования в PNG я написал скрипт на Python 3 + Pillow (он же PIL, установка и обновление через командную строку от админа pip install -U pillow), в rgb_to_png.py передать один аргумент на .bin скриншот, для преобразования всех скриншотов положить rgb_to_png.py в папку со скриншотами и запустить без аргументов.
rgb_to_png.py предполагает, что скриншот 256x240, в Mesen я выбирал без обрезки кадра, с обрезкой и для других эмулируемых консолях разрешение измените в rgb_to_png.py, сейчас задано как (256, 240). В Mesen можно отключать фон и спрайты.