#c #decoding #frame-rate #libav
#c #декодирование #частота кадров #libav
Вопрос:
Есть ли какой-либо способ изменить частоту кадров декодирования libav? В структурах libav есть несколько переменных, ответственных за получение частоты кадров, но, насколько я знаю, все они предназначены только для чтения (в режиме декодирования). Среди них:
AVStream.duration
AVStream.nb_frames
AVStream.r_frame_rate
AVStream.time_base
Первые два сообщают мне количество кадров, а последние два сообщают мне частоту кадров. Но, похоже, я не могу просто установить их, иначе это, вероятно, не вызовет должного эффекта.
Есть предложения?
Ответ №1:
Если я правильно понимаю, вам нужно декодированное видео с более низкой частотой кадров, чем оно было закодировано. Лучшим решением было бы пропустить пакеты кадров перед их декодированием с необходимой вам скоростью (перед вызовом avcodec_decode_video2()). Никогда не пробовал, но это должно сработать. Это сэкономит ненужный процессор, потраченный на декодирование ненужных кадров.
Комментарии:
1. Мне нужно иметь возможность не только уменьшать, но и увеличивать частоту кадров. Более того, многие кодеки используют усеченный флаг, поэтому кадры могут быть сдвинуты в пакетах — не факт, что один пакет будет содержать один кадр. Таким образом, пропуск пакетов, очевидно, может и наверняка вызовет проблемы. Кроме того, видеопоток может содержать некоторые информационные пакеты (обычно в начале потока), несмотря на наличие отдельных потоков данных. Так что это не лучшая идея, если вы хотите написать код для поддержки нескольких форматов.