Eu tenho um arquivo grande, um stream de vídeo h264 de um CCTV. Analiso esse arquivo com ffprobe e o resultado é este:
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] non-existing PPS 0 referenced Last message repeated 1 times
[h264 @ 0000000002d24480] decode_slice_header error
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] non-existing PPS 0 referenced Last message repeated 1 times
[h264 @ 0000000002d24480] decode_slice_header error
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] non-existing PPS 0 referenced Last message repeated 1 times
[h264 @ 0000000002d24480] decode_slice_header error
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] non-existing PPS 0 referenced Last message repeated 1 times
[h264 @ 0000000002d24480] decode_slice_header error
[h264 @ 0000000002d24480] no frame!
[h264 @ 0000000002d24480] concealing 890 DC, 890 AC, 890 MV errors in I frame
[h264 @ 0000000002d24480] sps_id 1 out of range
Input #0, h264, from 'E:\example_1':
Duration: N/A, bitrate: N/A Stream #0:0: Video: h264 (Main), yuv420p, 704x576, 25 fps, 25 tbr, 1200k tbn, 50 tbc
Tenho dois pequenos problemas:
- Posso saber se o arquivo existe em uma data específica (por exemplo, 1º de janeiro de 2014)? Posso analisar o fluxo de metadados do h264?
- No stream de vídeo, há imagens de diferentes câmeras, uma após a outra, ciclicamente. Posso dividir o stream de vídeo com base nas câmeras? É possível? Se for possível, também gostaria de mesclar os clipes de câmera separados em um vídeo de câmera.
Obrigado
Responder1
Posso saber se o arquivo existe em uma data específica (por exemplo, 1º de janeiro de 2014)? Posso analisar o fluxo de metadados do h264?
Não, porque o fluxo é simplesmente um fluxo de bits H.264 com (simplesmente falando) um quadro após o outro.
Ele não contém nenhum metadado. Quando você deseja metadados, você precisa de um contêiner, por exemplo, um fluxo de transporte MPEG-2, que é comumente escolhido para streaming de mídia, ou um arquivo MP4.
No stream de vídeo, há imagens de diferentes câmeras, uma após a outra, ciclicamente. Posso dividir o stream de vídeo com base nas câmeras? É possível?
Aparentemente, o stream usa um formato proprietário. O ffmpeg não pode decodificar esse tipo de vídeo com várias câmeras. Normalmente, um fluxo de bits H.264 Anexo B contém apenas quadros que pertencem à mesma sequência.
Você teria que escrever um analisador H.264 (ou começar com algo comoh264bitstream
) e divida as unidades NAL do fluxo de bits em fluxos de bits separados, um por câmera.
Então, para decodificá-lo, seus fluxos de bits precisam conterUnidades SPS e PPS NAL. No seu fluxo não há nenhum, que é o que os erros informam, pois os quadros fazem referência a SPS/PPS que nunca foram declarados.