Вопрос или проблема
Я заметил, что здесь есть вопросы, связанные с кодированием и ShareX, поэтому я решил спросить на этом портале.
В основном я записывал видео с помощью ShareX 16.1. версия ffmpeg:
ffmpeg version n7.0-14-g2d3ee7c069-20240423 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 13.2.0 (crosstool-NG 1.26.0.65_ecc5e41)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-fontconfig --enable-libharfbuzz --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --enable-libdvdread --enable-libdvdnav --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-libkvazaar --enable-libaribcaption --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --disable-doc --disable-ffplay --disable-ffprobe --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs=-lgomp --extra-ldflags=-pthread --extra-ldexeflags= --cc=x86_64-w64-mingw32-gcc --cxx=x86_64-w64-mingw32-g++ --ar=x86_64-w64-mingw32-gcc-ar --ranlib=x86_64-w64-mingw32-gcc-ranlib --nm=x86_64-w64-mingw32-gcc-nm --extra-version=20240423
libavutil 59. 8.100 / 59. 8.100
libavcodec 61. 3.100 / 61. 3.100
libavformat 61. 1.100 / 61. 1.100
libavdevice 61. 1.100 / 61. 1.100
libavfilter 10. 1.100 / 10. 1.100
libswscale 8. 1.100 / 8. 1.100
libswresample 5. 1.100 / 5. 1.100
libpostproc 58. 1.100 / 58. 1.100
Универсальный медиаконвертер
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Настройки внутри ShareX следующие:
На последнем экране видно, что я скопировал дополнительные аргументы командной строки для записи с микрофоном.
Я записал 2-часовое видео и был рад посмотреть материал на следующий день, но когда я открыл VLC или Media Player Classic (последнюю версию) и хотел перейти на 1 час 5 минут видео, это заняло около ~10 минут…
Не уверен, связано ли это с NVENC (у меня 3770k и GTX1070ti, поэтому я решил использовать GPU, этот процессор перегружен различными программами и т.д.) или это просто поведение ShareX.
Кажется очень странным, что записи ShareX не перематываются быстро. В основном, если я перехожу на 01:05:00, это занимает около ~10 минут. И потом я хочу перейти на 01:30:00, и это снова займет огромное количество времени.
Как будто это видео было записано с использованием ‘монолитного’ блока, а не ‘чанков’, поэтому перемотка занимает огромное количество времени.
Что мне нужно добавить, чтобы сделать перемотку быстрой? Я предполагаю, возможно, мне стоит добавить что-то в Дополнительные аргументы командной строки, так же, как для обычного фильма на YouTube или любого фильма с любого сервиса, например, Netflix? Или, что маловероятно, может быть, я не могу этого сделать?
Я также открыт для других предложений по кодированию и различным параметрам, но основной проблемой является эта проблема с перемоткой.
Один из способов, возможно, решить проблемы с перемоткой – это обеспечить наличие достаточного количества ключевых кадров в видео, поскольку медиаплееры часто используют их для перехода к конкретному времени, выбранному пользователем. Сначала они находят ближайший ключевой кадр, а затем декодируют более оптимизированные кадры, пока не будет достигнуто необходимое время.
Чтобы убедиться, что кодировщик включает достаточное количество ключевых кадров, вы можете добавить -g 60
в раздел дополнительных аргументов ffmpeg ShareX. Этот параметр задает количество кадров между 2 ключевыми кадрами. 60
при 30
FPS означает, что мы добавляем ключевой кадр каждые 2
секунды, так что максимум потребуется декодировать менее 2
секунд.
Конечно, меньший GOP означает больший размер файла, так как больше ключевых кадров = больше полных кадров в вашем видео.
Ответ или решение
Почему видео, записанное с помощью ShareX, медленно перематывается до заданного временного кода
Запись видео длительностью 2 часа с помощью ShareX может вызвать проблемы с Быстро перематыванием в медиаплеерах, таких как VLC или Media Player Classic. Эти проблемы могут быть вызваны несколькими факторами, включая настройки кодирования и использование ключевых кадров. Давайте подробно рассмотрим возможные причины и решения.
1. Проблема с ключевыми кадрами
Одной из основных причин медленной перемотки является недостаточное количество ключевых кадров (I-кадров) в видео. При воспроизведении видео плейер, как правило, ищет ближайший ключевой кадр, а затем декодирует еще несколько кадров до достижения нужного времени. Если ключевых кадров недостаточно, это может привести к значительным задержкам при попытке перемотать до конкретного момента.
Рекомендация: Увеличение количества ключевых кадров
Чтобы ускорить процесс перемотки, рекомендуем добавить аргумент -g
в дополнительные параметры командной строки в ShareX. Этот параметр указывает количество кадров между двумя ключевыми кадрами. Например, добавив -g 60
, вы установите интервал в 60 кадров между ключевыми кадрами. При частоте 30 кадров в секунду это обеспечит наличие ключевого кадра примерно каждые 2 секунды, что значительно уменьшит задержку при перемотке.
2. Размер файла и качество
Следует понимать, что увеличение количества ключевых кадров приведет к увеличению размера файла, так как каждый ключевой кадр занимает больше места, чем дельта-кадры (различия между кадрами). Это компромисс между качеством видео и удобством пользования.
3. Настройки кодирования
Вы упомянули, что используете кодирование с помощью NVENC, что может влиять на качество и размер выходного файла, особенно если другие параметры не оптимизированы. Убедитесь, что вы используете соответствующие настройки для вашего оборудования.
Рекомендация: Проверка настроек кодирования
Убедитесь, что параметры кодирования соответствуют вашим требованиям. Проверьте настройки, такие как скорость передачи данных (bitrate) и разрешение. Попробуйте поэкспериментировать с различными значениями, чтобы найти оптимальное соотношение между качеством и размером файла.
4. Формат файла
Формат контейнера также может сыграть роль в производительности. Форматы, такие как MP4, имеют лучшую поддержку для перемотки, чем другие форматы. Убедитесь, что вы используете оптимальный контейнер для ваших записей.
5. Применение дополнительных параметров
Помимо указанных выше, вы также можете рассмотреть возможность добавления других параметров в командной строке, таких как:
-preset fast
: для быстрого кодирования с минимальными потерями качества.-b:v 2500k
: для установки битрейта, который будет подходить для вашего случая.
Заключение
Чтобы исправить проблему медленной перемотки видео, записанного с помощью ShareX, убедитесь, что вы добавили достаточное количество ключевых кадров, а также оптимизируете настройки кодирования. Применяя предложенные рекомендации и изменения в стратегии кодирования, вы сможете значительно улучшить пользовательский опыт при просмотре ваших видео. Не забывайте также о важности экспериментов с настройками, чтобы найти оптимальный баланс между качеством и удобством использования.