Grave e exiba áudio e vídeo do Kinect via avconv

2

Estou tentando gravar áudio e vídeo de um Kinect usando o avconv, mas parece que tenho problemas para especificar as opções certas.

avconv -f video4linux2 -video_size 640x480 -c:v h264 -c:a ac3 -i /dev/video1 test.mp4

resulta em:

avconv: /build/buildd/libav-extra-0.8.3ubuntu0.12.04.1/libav/libavutil/mathematics.c:79: av_rescale_rnd: Assertion 'c > 0' failed.
Aborted (core dumped)

Cheese está perfeitamente feliz em gravar o áudio e o vídeo do Kinect, por isso não é um problema de configuração. Para mais diversão, também preciso exibir o vídeo ao mesmo tempo.

    
por ThomasH 12.07.2012 / 14:26

2 respostas

0

O uso correto do avconv é:

avconv [global options] [input options] -i input [output options] output

Você está colocando todas as suas opções antes da sua entrada, e assim a avconv está tratando todas as opções como opções de entrada. Isso seria melhor:

avconv -f video4linux2 -i /dev/video1 -s 640x480 -c:v libx264 -c:a ac3 test.mp4

As configurações padrão podem não ser ideais para você; para libx264 você pode querer definir um valor -crf (entre 0 e 51, 23 é padrão, 18-28 é um intervalo sã para usar, menor = melhor qualidade, mas um arquivo maior) e um -preset (normalmente uso muito rápido) . Para mais informações, veja aqui . Normalmente eu recomendo usar a codificação VBR para áudio, mas eu realmente não sei sobre a codificação do AC3, então você pode precisar usar uma taxa de bits fixa (-b: um 192k provavelmente será OK para som estéreo).

Além disso, o redimensionamento do vídeo pode não ser necessário, use somente -s 640x480 se você precisar reduzir uma entrada maior para esse tamanho.

Quanto a visualizá-lo enquanto você grava, posso pensar em duas soluções. A primeira é simplesmente abrir o arquivo que você está criando com o seu software de player de vídeo preferido. Isso significará um ligeiro atraso na visualização.

A segunda solução é enviar uma segunda saída de avconv para stdout e, em seguida, usar o redirecionamento de E / S para inserir as informações em um player de vídeo. Isso será mais rápido, mas levará cerca de duas vezes a capacidade de processamento, já que, como está, só pode fazer isso codificando uma segunda vez (isso pode mudar no futuro).

avconv -f video4linux2 -i /dev/video1 -s 640x480 -c:v libx264 -c:a ac3 test.mp4 \
-s 640x480 -c:v libx264 -c:a ac3 -f mp4 - | vlc -

Estou usando o VLC como exemplo, mas todos os players de vídeo linux que conheço podem fazer isso. Como o avconv normalmente determina qual formato de contêiner usar da extensão do arquivo, mas - (stdout) não tem um, então você precisa declarar o formato do contêiner com -f mp4 .

    
por evilsoup 04.01.2013 / 12:57
0

Eu não consegui fazer o método acima funcionar, mas consegui fazer o streamer funcionar.

streamer -q -c /dev/video0 -f rgb24 -r 3 -t 00:30:00 -o ~/outfile.avi

Eu também estou brincando com o Kinect. Ainda não tenho áudio funcionando.

    
por Goddard 30.10.2013 / 05:03