LINUX.ORG.RU

Там вроде сжимается не по секунде, а по маленьким кусочкам определенной длительности.
Из решения только гуглить формат mp3 файла и смотреть размеры этих кусков (хотя может есть готовое)

xorik ★★★★★
()
Ответ на: комментарий от xorik

у меня не mp3, у меня h264 + aac

Мне надо хоть по кусочкам. Примерный график распределния построить

namezys ★★★★
() автор топика
Ответ на: комментарий от namezys

Оу, не заметил что видео, тогда сложнее..

xorik ★★★★★
()

Я думаю, график переменного битрейта будет приблизительно соответсвовать графику амплитуд звуковой дорожки. Только цену деления рассчитай и подставь диапазон битрейта.

toney ★★★★★
()

Вот такое сойдёт:

$ ffprobe -show_packets -pretty capture-7.avi 2>/dev/null | grep size=
size=89.798 Kibyte
size=89.656 Kibyte
size=522.000 byte
size=89.712 Kibyte
size=523.000 byte
size=89.731 Kibyte
size=522.000 byte
size=523.000 byte
size=89.747 Kibyte
size=522.000 byte
size=89.725 Kibyte
size=523.000 byte
size=89.796 Kibyte
size=522.000 byte
size=89.754 Kibyte
size=523.000 byte
size=522.000 byte
size=89.590 Kibyte
size=523.000 byte
size=89.645 Kibyte
size=522.000 byte
size=89.534 Kibyte
size=522.000 byte
size=523.000 byte
size=89.645 Kibyte
size=522.000 byte
size=89.742 Kibyte
size=89.584 Kibyte
size=523.000 byte
size=89.516 Kibyte
size=522.000 byte
size=523.000 byte
size=89.620 Kibyte
size=522.000 byte
size=89.556 Kibyte
size=523.000 byte
size=89.550 Kibyte
size=522.000 byte
size=89.715 Kibyte
size=522.000 byte
...
?

Deleted
()
Ответ на: комментарий от namezys

ffprobe с опцией -show_packets выдаёт на каждый фрейм примерно такой выхлоп:

[PACKET]
codec_type=video
stream_index=0
pts=0
pts_time=0.000000 
dts=0
dts_time=0.000000 
duration=1
duration_time=0.033911 
size=91953.000000 
pos=2056
flags=K
[/PACKET]
[PACKET]
codec_type=video
stream_index=0
pts=1
pts_time=0.033911 
dts=1
dts_time=0.033911 
duration=1
duration_time=0.033911 
size=91808.000000 
pos=94018
flags=K
[/PACKET]
Можно скриптом это всё читать, выбирать только фреймы с codec_type=video, с нужным потоком (если их несколько) и усреднять или суммировать значение size по времени (например для каждой секунды отдельно)...

Deleted
()

Когда-то я написал для себя такую штуку (bitgraph.c):

#include <stdio.h>
#include "avilib.h"

int main(int ac, char **av)
    {
    avi_t *avi;
    long count;
    long i;
    long fs;
    double fps;
    long average=1;

    if(3==ac)
        average=atoi(av[2]);
    else if(ac<2 || ac>3)
        {
        puts("Call: bitgraph <file.avi> [average_count]");
        return 1;
        }
    avi=AVI_open_input_file(av[1], 1);
    if(NULL==avi)
        {
        fprintf(stderr, "Can't open avi file '%s'\n", av[1]);
        return 1;
        }
#if 0
    printf("AVI info: %dx%d, %lf fps, %ld frames\n",
         AVI_video_width(avi), AVI_video_height(avi),
         AVI_frame_rate(avi), AVI_video_frames(avi));
#endif
    count=AVI_video_frames(avi);
    fps=AVI_frame_rate(avi);
    fs=0;
    for(i=0; i<count; i++)
        {
        fs+=AVI_frame_size(avi, i);
        if(i%average==average-1)
            {
            printf("%ld\t%ld\n", i, fs*(long)fps*8/average/1024);
            fs=0;
            }
        }
    AVI_close(avi);

    return 0;
    }
Для сборки понядобятся файлы avilib.c, avilib.h и os.h от transcode-1.0.

Запускаем:

$ ./bitgraph file.avi 10 > graph.dat
$ gnuplot
gnuplot> set style data lines
gnuplot> plot "graph.dat"

Любуемся графиком.

cdslow ★★
()
Ответ на: комментарий от namezys

ну так не avi

Ну так сделай ремукс в avi :)

Или замени avilib.c на аналог для твоего контейнера, libavformat например.

cdslow ★★
()
Ответ на: комментарий от cdslow

тут уже лучше решение предолжили

это уж изращение

namezys ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.