Удалите метаданные частоты кадров / длительности из h264 с помощью ffmpeg - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно видео в кодировке H264 без метаданных частоты кадров и длительности, поскольку они хранятся и рассчитываются извне.

Это то, что я использую:

ffmpeg -r 30 -f image2 -i xyz -c:v libx264 -f h264 1579516080101.h264

Это то, что возвращает mediainfo:

General
Complete name                            : 1579516080101.h264
Format                                   : AVC
Format/Info                              : Advanced Video Codec
File size                                : 866 KiB
Duration                                 : 1 s 0 ms
Overall bit rate                         : 7 096 kb/s

Video
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L4
Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 4 frames
Duration                                 : 1 s 0 ms
Bit rate                                 : 7 096 kb/s
Width                                    : 1 920 pixels
Height                                   : 1 080 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Variable
Frame rate                               : 30.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.114
Stream size                              : 866 KiB (100%)

Как мне избавиться от этих записей? Я пробовал -map_metadata -1 и не устанавливал частоту кадров, но это просто привело к использованию частоты кадров по умолчанию 25.

Спасибо

1 Ответ

0 голосов
/ 05 мая 2020

Я мог бы решить эту проблему, изменив исходный код ffmpeg и перекомпилировав его.

Соответствующий бит, который необходимо закомментировать, находится в: FFmpeg/libavcodec/h264_metadata_bsf.c строка 171 и далее:

if (ctx->tick_rate.num && ctx->tick_rate.den) {
    int num, den;

    av_reduce(&num, &den, ctx->tick_rate.num, ctx->tick_rate.den,
              UINT32_MAX > INT_MAX ? UINT32_MAX : INT_MAX);

    sps->vui.time_scale        = num;
    sps->vui.num_units_in_tick = den;

    sps->vui.timing_info_present_flag = 1;
    need_vui = 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...