FFmpeg / AVconc - Capture vídeo sem emendas

1

Eu tenho várias câmeras IP que eu quero capturar vídeo de forma contínua. Eu estou construindo um script que irá envolver o ffmpeg para capturar as várias fontes RTSP. Mas estou lutando para capturar e armazenar os dados. Especificamente, como faço para capturar clipes perfeitos?

Para esclarecer, se eu apenas executar um comando como este:

ffmpeg -i rtsp://ip_cam file.mp4

Isso vai durar para sempre até encher o meu disco rígido (ou até eu atingir algum limite superior do ffmpeg ou do sistema de arquivos). Então meu pensamento era fazer algo assim:

ffmpeg -i rtsp://ip_cam -fs 104857600 file-1.mp4

Isso limitaria os arquivos a 100MB cada. Meu script de wrapper pode iniciar uma nova instância assim que esta terminar:

ffmpeg -i rtsp://ip_cam -fs 104857600 file-2.mp4

E assim por diante (eu posso ter um processo separado que irá limpar os arquivos antigos conforme necessário para recuperar espaço). O problema com esta abordagem é que leva 1-2 segundos para o ffmpeg iniciar, o que significa que durante esse tempo a câmera em questão não está gravando nada .

Uma coisa adicional a ser considerada é que, para cada arquivo, preciso saber o carimbo de data / hora de início e término, por exemplo, file-1.mp4 pode se referir a "2015-09-12 09:03:42" até "2015-09" -12 11:24:21 ". Dessa forma, se um usuário quiser recuperar um clipe específico, eu sei onde obtê-lo. E se eu estou começando ffmpeg para cada clipe e, em seguida, ele termina no final de cada clipe, eu posso capturar e armazenar essas informações. Mas se uma abordagem sugerida for dizer ao ffmpeg para ser executado indefinidamente enquanto salva a saída em partes separadas (se o ffmpeg puder fazer isso), isso pode não funcionar, já que não poderei coletar essa informação.

Qualquer ideia seria apreciada.

    
por Nick Coons 12.09.2015 / 20:27

1 resposta

1

Experimente o segmento muxer .

ffmpeg -i rtsp://ip_cam -c copy -f segment -segment_list out.list -segment_time 900 \
-segment_atclocktime 1 -strftime 1 "%Y-%m-%d_%H-%M-%S.mkv"
  • -segment_list Gere um arquivo de lista.

  • -segment_time Define a duração do segmento. O valor deve ser uma especificação de duração. O valor padrão é 2. Observe que a divisão pode não ser precisa, a menos que você force os quadros-chave do fluxo de referência no momento especificado. Consulte a documentação do muxer de segmentos para obter mais informações.

  • -segment_atclocktime Se definido como "1" dividido em intervalos regulares, a partir das 00:00 horas. O valor de tempo especificado em -segment_time é usado para definir o tamanho do intervalo de divisão. Por exemplo, com segment_time definido como "900", isso possibilita criar arquivos às 12:00, 12:15, 12:30, etc.

  • -strftime Permite que os segmentos sejam nomeados pelo tempo de criação do arquivo.

Exemplo de nomes de arquivos de saída:

$ ls -m1
2015-09-12_14-10-02.mkv
2015-09-12_14-10-14.mkv
2015-09-12_14-10-24.mkv
2015-09-12_14-10-34.mkv
2015-09-12_14-10-44.mkv
2015-09-12_14-10-54.mkv

Veja os docs para mais opções e informações.

    
por 13.09.2015 / 00:17