Как получить длительность / битрейт файла H264 с помощью avconv/ffmpeg

Проведение avprobe test.h264 выходы

Input #0, h264, from 'test.h264':
  Duration: N/A, bitrate: N/A
    Stream #0.0: Video: h264 (High), yuv420p, 720x480, 25 fps, 25 tbn, 50 tbc

проведение file test.h264 выходы

test.h264: JVT NAL sequence, H.264 video @ L 30

Обратите внимание, что файл не поврежден или поврежден, я могу воспроизвести его без проблем на VLC.

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

Правка № 1

Я создаю файл H264 с библиотекой Python под названием picamera,

Редактировать № 2

Консольный вывод при запуске avconv -i test.h264 -f null -

avconv version 11.7-6:11.7-1~deb8u1+rpi1, Copyright (c) 2000-2016 the Libav developers
  built on Jun 17 2016 02:13:49 with gcc 4.9.2 (Raspbian 4.9.2-10)
[h264 @ 0x1bcc200] Estimating duration from bitrate, this may be inaccurate
Input #0, h264, from 'test.h264':
  Duration: N/A, bitrate: N/A
    Stream #0.0: Video: h264 (High), yuv420p, 720x480, 25 fps, 25 tbn
 Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf56.1.0
    Stream #0.0: Video: rawvideo, yuv420p, 720x480, q=2-31, 200 kb/s, 25 tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.1.0 rawvideo
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> rawvideo (native))
Press ctrl-c to stop encoding
frame=  208 fps= 68 q=0.0 Lsize=       0kB time=10000000000.00 bitrate=   0.0kbits/s
video:13kB audio:0kB other streams:0kB global headers:0kB muxing overhead: unknown

3 ответа

Решение

Вы можете добавить его в контейнер, а затем проверить

ffmpeg -i test.h264 -c copy test.mp4

ffprobe test.mp4

Вы также можете считать кадры в H264 и делить на частоту кадров

ffprobe test.h264 -count_frames -show_entries stream=nb_read_frames,avg_frame_rate,r_frame_rate

Продолжительность = nb_read_frames / avg_frame_rate

Длительность не указана потому, что файлы H.264 в формате Annexb (необработанные), как правило, не хранят информацию о метках времени или частоте кадров. Частота кадров может быть сохранена в VUI PPS, но этого файла, очевидно, нет, поэтому все, что он знает, - это framecount (путем анализа всего файла), но никак не связанный с меткой времени.

Одним из способов является декодирование файла с ffmpeg чтобы получить продолжительность:

ffmpeg -framerate 24 -i input.h264 -f null -

Тогда обратитесь к time= в последней строке в выводе консоли для продолжительности. Например, 5-секундный вход:

frame=  125 fps=0.0 q=-0.0 Lsize=N/A time=00:00:05.00 bitrate=N/A speed= 189x
Другие вопросы по тегам