Запись FFmpeg AVI для H264 @ 1fps не работает

Я записываю H.264 (640x480 @1fps 10seconds) в контейнер avi, используя FFMPEG. Когда я воспроизвожу записанный файл в VLC, он воспроизводит только первый кадр, а остальные кадры не воспроизводятся. я получаю

главное предупреждение: последнее изображение пропущено (555293 > -305)

Вывод ffprobe:

FFprobe version 0.6.2-4:0.6.2-1ubuntu1.1~ppa1~lucid1, Copyright (c) 2007-2010 the Libav developers
  built on Jan  3 2012 18:16:35 with gcc 4.4.3
  configuration: --extra-version='4:0.6.2-1ubuntu1.1~ppa1~lucid1' --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --disable-stripping --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.19. 0 /  1.19. 0
  libswscale     0.11. 0 /  0.11. 0
  libpostproc   51. 2. 0 / 51. 2. 0
[h264 @ 0x9feb230]insane cropping not completely supported, this could look slightly wrong ...
[avi @ 0x9fea010]max_analyze_duration reached
Input #0, avi, from 'h2641fps.avi':
  Metadata:
    ISFT            : Lavf52.7.0
  Duration: 00:00:11.00, start: 0.000000, bitrate: 95 kb/s
    Stream #0.0: Video: h264, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 1 fps, 1 tbr, 1 tbn, 60 tbc
[h264 @ 0x9feb230]insane cropping not completely supported, this could look slightly wrong ...
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
codec_type=video
codec_time_base=1/60
codec_tag_string=H264
codec_tag=0x34363248
width=640
height=480
has_b_frames=0
sample_aspect_ratio=1:1
display_aspect_ratio=4:3
pix_fmt=yuv420p
r_frame_rate=1/1
avg_frame_rate=1/1
time_base=1/1
start_time=0:00:00.000000
duration=0:00:11.000000
nb_frames=11
[/STREAM]

Есть ли что-то, что я делаю неправильно? Тот же код отлично работает для частоты кадров выше 3


person Alam    schedule 20.02.2012    source источник
comment
любые указатели будут оценены.   -  person Alam    schedule 20.02.2012
comment
@Alam Какую командную строку вы использовали?   -  person sashoalm    schedule 20.02.2012
comment
@Dmitry, да, я могу играть с помощью ffplay. Я также могу играть с помощью AVIdemux. Но VLC не может играть   -  person Alam    schedule 20.02.2012
comment
@satuon: я захватываю кадры прямо с камеры и использую av_write_frame(oc, &pkt); для написания рамок. c-›time_base.den = частота кадров * 100; c-›time_base.num = 100;. Я не устанавливаю значения pts или dts.   -  person Alam    schedule 20.02.2012
comment
@Alam AVI не следует использовать с H.264, если используются b-кадры.   -  person llogan    schedule 21.02.2012
comment
@LordNeckbeard: Поскольку частота кадров равна 1, все кадры - это I кадр. Выход ffprobe имеет has_b_frames=0. В любом случае, я хотел бы знать, почему я не могу использовать кадры H.264 b в AVI? Это связано с дтс?   -  person Alam    schedule 21.02.2012


Ответы (1)


Я отвечаю на свой вопрос, это может помочь кому-то с похожими проблемами:

VLC воспроизводит потоки, когда я увеличиваю размер кеша с 300 мс до 900 мс. Я не уверен, что это правильный метод или нет. Поскольку заголовок avi содержит информацию о частоте кадров, VLC должен ждать следующего кадра не менее 900 или 1000 мс. «позднее изображение пропущено» должно появиться через 1000 мс.

person Alam    schedule 27.02.2012