С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C/C++ Перевести на с функцию с питона https://www.cyberforum.ru/ c-cpp/ thread3067817.html
всего 4 строчки, ну первая и последняя понятны, а вот 2 средние это какой то взрыв мозга для меня. def _decode(x): scrambled = ((x & 0xf000f000) >> 12, (x & 0x0f000f00) >> 8, (x & 0x00f000f0) >> 4, (x & 0x000f000f)) decoded = tuple(decode for i, v in enumerate(scrambled)) unscrambled = tuple(((i >> 4) << 16) | (i & 15) for i in decoded) return (unscrambled << 12) | (unscrambled << 8) |...
C/C++ Вывести несколько раз строки матрицы
К примеру дана матрица, в которой есть значения 4 12 3 8 9 1 6 2 7 Подскажите, как можно вывести каждую строчку N раз, то есть, к примеру 4 12 3
C/C++ Рендер в консоли из проекта Adobe Premiere Pro Здравствуйте, стоит такая задача. Необходимо осуществить рендер готового проекта в программе Adobe Premiere Pro, но не запускать сам Premiere, то-есть сделать это без gui, чисто в консоли. Весь интернет прошерстил, ничего стоящего не нашел. https://www.cyberforum.ru/ c-cpp/ thread3066408.html C/C++ Написание програмы на С++, работа с передачей параметра 1. Первое задание: Внести изменения в этот проект и протестировать проект согласно выбранному варианту. Условия варианта:Разработать метод "Сравнить год двух дат". Вторую дату передать как параметр по значению. Вот начальный код: #include <iostream> #include <conio.h> using std::cout; using std::endl; class date{ https://www.cyberforum.ru/ c-cpp/ thread3065930.html
C/C++ Инструментарий для создания сайтов
ANSI C - самый "шустрый" и уступает по скорости только assembler, который жостко "привязывает" к конкретному "железу". С++ совсем чуть-чуть уступает ANSI C, но зато существенно расширяет возможности. Эти языки - универсальные, в чём их преимущество и, одновременно, и недостаток. Так всегда - в чем-то выигрываешь, а в чём-то проигрываешь! Так вот С/С++ не ориентирован на создание сайтов, в отличие...
C/C++ Команды и протоколы опроса серверов https://www.cyberforum.ru/ c-cpp/ thread3064453.html
Очень прошу помочь в ликвидации ликбеза по алгоритмам, процедурам, командам и протоколам опроса серверов, применительно для С/С++. Уж больно надо, а не знание этого всё сдерживает! Пишите, по-возможности, подробнее.
C/C++ Программа для подбора кодов Программа создает случайно сгенерированный код например: 79YQU-RSCEX-D2FRT-GHWT5 После записывает в блокнот и выводит из него в консоль(для проверки). Но в ручную это все в водить слишком муторно, а как написать чтобы она сохраняла в буфер и вводила в окошко в другом приложении не знаю(единственное что смог придумать, но с реализацией не получается). Заранее спасибо за помощь ! //lib.h... https://www.cyberforum.ru/ c-cpp/ thread3063454.html Константный конструктор C/C++
Добрый вечер. Люди, для чего нужен константный конструктор и каковы отличия от обычного конструктора? Чем он примечателен? class Person { public: int age; // константный конструкор const Person(int a) { age = b; } };
C/C++ Реализовать конечный автомат https://www.cyberforum.ru/ c-cpp/ thread3062641.html
Реализовать конечный автомат, принимающий строки, задаваемые следующим регулярным выражением: ( | | _ )*
C/C++ Как защитить исполняемый файл от декомпиляции? https://www.cyberforum.ru/ c-cpp/ thread3061915.html
Мы тут немного разобрались с процессом декомпиляции, а потому переходим к главному - как можно защитить исполняемый файл от декомпиляции? Прошу, по возможности, сообщать свои решения подробнее!
Программа вылетает при создании глобальной переменной в Debug режиме (Visual Studio) C/C++
Есть глобальная переменная: //E_Window.h extern sf::RenderWindow Window; //E_Window.cpp sf::RenderWindow Window; При компиляции в Release режиме всё запускается нормально, а в Debug режиме программа моментально закрывается, а дебаггер visual studio ругается на эту самую глобальную переменную: Необработанное исключение по адресу 0x770EFEE5 (ntdll.dll) в progname.exe: 0xC0000005: нарушение...
C/C++ Как сделать грамотно вывод очереди в с++ Нужно реализовать вывод по приоритету, всё в принципе понятно. Проблема в том что я не знаю как выводить эту очередь. Не знаю как сделать для вектора оператор вывода.. И так не могу найти статью как работать с векторами классов так тут ещё и очередь.. #include<iostream> #include<cctype> #include<string.h> #include<math.h> #include <cstring> #include <vector> #include<map>... https://www.cyberforum.ru/ c-cpp/ thread3060788.html
70 / 14 / 3
Регистрация: 10.07.2018
Сообщений: 284
08.01.2023, 11:23  [ТС] 0

FFmpeg - нужна консультация, как я могу узнать что кадр был прочитан? - C/C++ - Ответ 16682967

08.01.2023, 11:23. Показов 1179. Ответов 4
Метки (Все метки)

Ответ

Может кто то все же подскажет, сохраняет в файл но файл весит прям много 18 гб.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
#include <Windows.h>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <cstring>
#include <math.h>
#include <string.h>
 
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavformat/avio.h>
#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
#include <libswresample/swresample.h>
#include "libavcodec/avcodec.h"
#include "libavcodec/avfft.h"
#include "libavdevice/avdevice.h"
#include "libavfilter/avfilter.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavformat/avformat.h"
#include "libavformat/avio.h"
#include "libavutil/opt.h"
#include "libavutil/common.h"
#include "libavutil/channel_layout.h"
#include "libavutil/imgutils.h"
#include "libavutil/mathematics.h"
#include "libavutil/samplefmt.h"
#include "libavutil/time.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/file.h"
#include "libswscale/swscale.h"
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/timestamp.h>
#include <libavformat/avformat.h>
 
}
#define INBUF_SIZE 4096
 
 
static void save_gray_frame(unsigned char* buf, int wrap, int xsize, int ysize, char* filename)
{
    return;
    FILE* f = NULL;
    int i;
    f = fopen(filename, "w");
    if (f == NULL) {
        fprintf(stderr, "ffmpeg: Не удалось создать новый файл\n");
    }
    fprintf(f, "P5\n%d %d\n%d\n", xsize, ysize, 255);
    for (i = 0; i < ysize; i++)
        fwrite(buf + i * wrap, 1, xsize, f);
    fclose(f);
}
 
void pgm_save(unsigned char* buf, int wrap, int xsize, int ysize, FILE* f) {
    fprintf(f, "P5\n%d %d\n%d\n", wrap, xsize, ysize);
    for (int i = 0; i < ysize; i++) {
        fwrite(buf + i * wrap, 1, xsize, f);
    }
}
 
void decode(AVCodecContext* dec_ctx, AVFrame* Frame, AVPacket* pkt, FILE* f)
{
    int ret;
    ret = avcodec_send_packet(dec_ctx, pkt);
    if (ret < 0) {
        fprintf(stderr, "Ошибка отправки пакета в кодирование.\n");
        exit(1);
    }
 
    while (ret >= 0) {
        ret = avcodec_receive_frame(dec_ctx, Frame);
        if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
            return;
        }
        else if (ret < 0) {
            fprintf(stderr, "during decoding.\n");
            exit(1);
        }
        printf("sawing frame %3d\n", dec_ctx->frame_number);
        fflush(stdout);
        pgm_save(Frame->data[0], Frame->linesize[0], Frame->width, Frame->height, f);
    }
}
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Rus");
 
    const AVCodec* codec = NULL;
    AVCodecParserContext* parser = NULL;
 
    // содержит данные о конфигурации медиаконтента, такой как битрейт, 
    // частота кадров, частота дискретизации, каналы, высота и многое другое.
    AVCodecContext* AVCodecContext_ = NULL;
    AVCodecParameters* AVCodecParametr_ = NULL;
    FILE* f = NULL;
 
    //Эта структура описывает декодированные (необработанные) аудио- или видеоданные.
    AVFrame* frame = NULL;
    uint8_t inbuf[INBUF_SIZE + AV_INPUT_BUFFER_PADDING_SIZE];
    uint8_t* data = NULL;
    size_t   data_size = NULL;
    int ret;
    int eof;
    AVFormatContext* AVfc = NULL;
    int ERRORS;
    //AVCodec* codec;
    char buf[1024];
 
    // Хранит сжатый один кадр.
    AVPacket* pkt = NULL;
 
    //**********************************************************************
    // Ниже переменные которые я задействовал для части кодирования, что бы небыло перехлеста
    // с теми которые используются для декодирования. 
    //**********************************************************************
 
    const AVCodec* AVCodecDE = NULL;
    AVCodecContext* AVCodecContextDE = NULL;
    AVFrame* AVframeDE = NULL;
    AVPacket* AVpktDE;
    FILE* fDE;
 
    //Входящий видео файл AVI
    const char* InputFileName = "c:\\1.avi";
    // Адрес с видеокамеры. 
    const char* InputCam = "rtsp://admin:admin192.168.1.75:554/11";
    //Определение видео файла для сохранения как видео.
    const char* OutFileNameDE = "C:\\Users\\Users\\Desktop\\2.yuv";
    //Определяем имя файла для сохранения картинки.
    const char* FileName1 = "C:\\Users\\Users\\Desktop\\NyFile.PGM";
 
    //**********************************************************************
    // Начало чтения видео с камеры. 
    //**********************************************************************
 
    avdevice_register_all();
 
    // Открываем поток видео (это файл или камера). 
    ERRORS = avformat_open_input(&AVfc, InputCam, NULL, NULL);
    if (ERRORS < 0) {
        fprintf(stderr, "ffmpeg: не смог открыть файл\n");
        return -1;
    }
 
    // После открытия, можем распечатать информацию о видеофайле (iformat = название формата; 
    // duration = длительность). Но так как у меня подключена камера мне написал: Duration: N/A, 
    // start: 0.000000, bitrate: N/A
    printf("Format %s, duration %lld us", AVfc->iformat->long_name, AVfc->duration);
 
    ERRORS = avformat_find_stream_info(AVfc, NULL);
    if (ERRORS < 0) {
        fprintf(stderr, "ffmpeg: Unable to find stream info\n");
        return -1;
    }
 
    int CountStream;
 
    // Узнаем кол-во потоков. 
    CountStream = AVfc->nb_streams;
 
    // Поищим кодек. 
    int video_stream;
    for (video_stream = 0; video_stream < AVfc->nb_streams; ++video_stream) {
        if (AVfc->streams[video_stream]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
 
            // В ДАННОЙ ТОЧКЕ ЧАСТО ОШИБКА ПРИ ИСПОЛЬЗОВАНИЕ IP КАМЕРЫ.
            break; // Тут вылетает ошибка, что типа не обнаружен поток, надо заново пустить. 
        }
    }
 
    if (video_stream == AVfc->nb_streams) {
        fprintf(stderr, "ffmpeg: Unable to find video stream\n");
        return -1;
    }
 
    // Тут определяем вид кодека, для моей камеры он равен как AV_CODEC_ID_HEVC (Это то в чем вещает моя камера)
    codec = avcodec_find_decoder(AVfc->streams[video_stream]->codecpar->codec_id);
 
    // Функции для запроса возможностей libavcodec,
    AVCodecContext_ = avcodec_alloc_context3(codec);
    if (!AVCodecContext_) {
        fprintf(stderr, "Не удалось выделить контекст видеокодека, т.к. он не поддрерживается\n");
        exit(1);
    }
 
    // Эта функция используется для инициализации 
    // AVCodecContext видео и аудио кодека. Объявление avcodec_open2() находится в libavcodecavcodec.h
    // Открываем кодек. 
 
    ERRORS = avcodec_open2(AVCodecContext_, codec, NULL);
    if (ERRORS < 0) {
        fprintf(stderr, "ffmpeg: Не удается открыть кодек\n");
        return -1;
    }
 
    // Это для обработки звука - задел.
    //swr_alloc_set_opts()
    // swr_init(); 
 
    // Вывести всю информацию о видеофайле. 
    av_dump_format(AVfc, 0, argv[1], 0);
 
    //=========================================================================================
    // Далее, получаем фреймы..до этого мы только получили всю инфомрацию о входящем видео.
    //=========================================================================================
 
    // Теперь мы собираемся прочитать пакеты из потока и декодировать их в кадры, но сначала 
    // нам нужно выделить память для обоих компонентов(AVPacket и AVFrame).
    frame = av_frame_alloc();
 
    f = fopen(OutFileNameDE, "w");
    if (!f) {
        fprintf(stderr, "Could not open %s\n", OutFileNameDE);
        exit(1);
    }
 
    if (!frame) {
        fprintf(stderr, "Не удается выделить память для видеокадра\n");
        exit(1);
    }
    // Выделяем память для пакета 
    pkt = av_packet_alloc();
 
    // Чтение данных если они есть. 
    while (av_read_frame(AVfc, pkt) >= 0) {
        // Это пакет из видеопотока? Потомучто есть еще звуковая дорожка.
        if (pkt->stream_index == video_stream)
        {
            int ret;
 
            // Обновление 1, типа сохраняем декодированое видео в файл. 
            decode(AVCodecContext_, frame, pkt, f);
        }
        av_packet_unref(pkt);
    }
 
 
    if (codec)
        av_free(&codec);
    if (parser)
        av_free(&parser);
    if (AVCodecContext_)
        av_free(&AVCodecContext_);
    if (AVCodecParametr_)
        av_free(&AVCodecParametr_);
    if (f)
        av_free(&f);
    if (AVfc)
        av_free(&inbuf);
 
    if (pkt)
        av_free(&pkt);
 
}


Вернуться к обсуждению:
FFmpeg - нужна консультация, как я могу узнать что кадр был прочитан? C/C++
0
Заказать работу у эксперта
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2023, 11:23
Готовые ответы и решения:

ffmpeg как сохранить кадр в pgm
Есть код на c++, он должен открывать видео и сохранять из него кадры. Когда ему даешь ссылку на...

ffmpeg Выдернуть кадр из видеофайла
Доброго времени суток. Бьюсь 4й день над проблемкой как при помощи ffmpeg выдернуть определенный...

Не выходит закодировать кадр с помощью FFmpeg
Привет всем. У меня такая проблема - не могу закодировать кадр с помощью FFmpeg, использую эту...

C++ builder + ffmpeg: вывести кадр на TImage
я получаю кадр от ffmpeg в формате AVFrame. как вывести кадр на TImage ?

4
08.01.2023, 11:23
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.01.2023, 11:23
Помогаю со студенческими работами здесь

Как узнать что сайт под фильтром или был там?
Интересует вот что: как узнать был ли сайт под фильтрами яндекса вообще и когда и под какими или...

Как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле?
подскажите пожалуйста, как узнать что при считывание очередного слова в string был сделан переход...

Нужна консультация что такое Pascal Debuy
Вообщем дали мне реферат на тему: Pascal Debuy вообще не чего не нахожу, что это, кто это и с чем...

Нужна консультация по iframe + javascript или что-то другое
Хочу сделать некоммерческий (бесплатный) сервис для людей. Помогите консультацией. По замыслу,...

Аутентификация mode="Forms". Как узнать, что IIS сервер был перезапущен?
Настройка из web.config: &lt;authentication mode=&quot;Forms&quot;&gt; &lt;/authentication&gt; В общем, мне нужно...

Как через FFmpeg узнать продолжительность видео?
Подскажите пожалуйста, как с помощью консольного FFmpeg узнать продолжительность flv-видео. Видео...

Узнать, что курсор до клика был в поле
На текстовое поле вешаю событие search.onclick Вопрос в том, каким образом при клике на поле...

0
Новые блоги и статьи
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
Как создавать приложения для iOS/iPhone
InfoMaster 12.01.2025
Введение в разработку iOS-приложений Разработка приложений для iOS открывает огромные возможности в мире мобильных технологий. С каждым годом количество пользователей iPhone и iPad растет,. . .
Как использовать Kotlin в Android разработке
InfoMaster 12.01.2025
Язык программирования Kotlin, разработанный компанией JetBrains, стал неотъемлемой частью современного мира Android-разработки. Первоначально представленный в 2011 году, Kotlin был официально. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru