maaGames
@maaGames
Погроммирую программы

Как правильно получать кадр фильма без артефактов?

Получаю кадры из видео при помощи ffmpeg (вернее, MPlayer - The Movie Player), задавая временнУю метку с сохранением кадра в файл. В принципе работает, но на некоторых фильмах получается мазня. При этом, если воспроизводить видео, то всё номрально. Понятно, что это проблема с кодированием(декодированием) и поиском ключевого кадра.
Можно как-то имправить эту проблему без декодирования всего фильма от начала до временной метки?

Для получения кадра использую такой список команд:
L"mplayer.exe -slave \"fullpath.mkv\" -really-quiet -nosound -vo jpeg:outdir=\\\"outpath.jpg\\\" -frames 1 -ss %u"


5e297cadd402d852507803.jpeg

информация о кодировщике, полученная из MediaInfo.dll

General
Unique ID: 219569894619963036230858554311364138418 (0xA52F9F9D4458C290B00900F3BA9555B2)
Complete name: ivideo\Жан Рено\2005 - Империя волков.mkv
Format: Matroska
Format version: Version 4 / Version 2
File size: 2.39 GiB
Duration: 2 h 8 min
Overall bit rate: 2 662 kb/s
Encoded date: UTC 2015-05-24 0737
Writing application: mkvmerge v7.6.0 ('Garden of Dreams') 64bit built on Feb 8 2015 1344
Writing library: libebml v1.3.1 + libmatroska v1.4.2

Video
ID: 1
Format: AVC
Format/Info: Advanced Video Codec
Format profile: High@L4.1
Format settings, CABAC: Yes
Format settings, ReFrames: 5 frames
Codec ID: V_MPEG4/ISO/AVC
Duration: 2 h 8 min
Bit rate: 2 499 kb/s
Width: 1 024 pixels
Height: 432 pixels
Display aspect ratio: 2.40
Frame rate mode: Constant
Frame rate: 23.976 (24000/1001) FPS
Color space: YUV
Chroma subsampling: 4
Bit depth: 8 bits
Scan type: Progressive
Bits/(Pixel*Frame): 0.236
Stream size: 2.24 GiB (94%)
Language: English
Default: Yes
Forced: No

Audio
ID: 2
Format: AAC
Format/Info: Advanced Audio Codec
Format profile: LC
Codec ID: A_AAC
Duration: 2 h 8 min
Bit rate: 160 kb/s
Channel(s): 2 channels
Channel positions: FrontL R
Sampling rate: 48.0 kHz
Frame rate: 46.875 FPS (1024 spf)
Compression mode: Lossy
Stream size: 147 MiB (6%)
Language: Russian
Default: Yes
Forced: No
  • Вопрос задан
  • 173 просмотра
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
Попробуйте вытаскивать из видео не кадр, а фрагмент. Эмпирически можно подобрать его длину, чтобы гарантированно попался ключевой кадр.
Из вырезанного фрагмента, сохранённого уже без сжатия можно отдельным вызовом ffmpeg получить последний кадр.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы