Audio desynced from avconv commands

1

Atualmente, estou tentando combinar vários vídeos de dispositivos diferentes em um vídeo. A configuração é a seguinte:

  1. O usuário registra três vídeos em um telefone (android ou iOs)
  2. O sistema envia estes vídeos (formato mp4) para o nosso servidor
  3. O servidor move os arquivos e os transforma em arquivos TS (por que? porque achamos que seria bom formatar cada vídeo para esse formato)

Após esses passos, gostaríamos de combiná-lo com 4 dos nossos vídeos. Isso significaria que, chamando nossos vídeos de 'ov', as etapas combinadas finais seriam:

ov1 > sent video 1 > ov2 > sent video 2 > ov3 > sent video 3 > ov4

Isso traz alguns problemas. Nós temos formatado cada vídeo para os mesmos formatos, mesmos canais de áudio e com tantas linhas (a única coisa que muda é o nome do arquivo)

avconv -ss 0 -i "48_0.85825500-14815530815710.mp4" -vcodec libx264 -acodec aac -bsf:a aac_adtstoasc -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y "tmp_48_0.ts"

Isso significa, no que nos diz respeito, que cada vídeo será compilado no mesmo formato de vídeo (h264_mp4toannexb) e áudio (aac_adtstoasc). Ao combinar esses vídeos assim, o áudio desyncs:

avconv -i concat:"2connect-ae.ts|tmp_48_1.ts" -c copy -bsf:a aac_adtstoasc -bsf:v h264_mp4toannexb -y "output.mp4"

Estamos tentando mudar a maneira como compactamos / compile / transformamos vídeos de diferentes maneiras, de diferentes fontes, mas não tivemos sucesso. Temos 4 arquivos .wov exportados do Final Cut Pro e do Adobe After Effects. Mudar nossas ferramentas não funcionou.

De alguma forma, o som de nossos vídeos (ov1, ov2, ov3, ov4) está sobreposto nos vídeos enviados pelo usuário, resultando em um atraso de som que continua aumentando a cada segundo. Nós somos um tipo de mente explodida porque isso continua ocorrendo, qualquer ajuda seria muito apreciada.

Se estivermos anexando os vídeos enviados uns aos outros, não haverá atrasos. Se adicionarmos qualquer vídeo de nós mesmos à lista, ele começa a atrasar o áudio. Se você gostaria de ter mais algumas informações, por favor me avise.

Informações sobre nossas versões:

avconv version 9.11-6:9.11-2ubuntu2, Copyright (c) 2000-2013 the Libav developers built on Mar 24 2014 06:12:33 with gcc 4.8 (Ubuntu 4.8.2-17ubuntu1) avconv 9.11-6:9.11-2ubuntu2 libavutil 52. 3. 0 / 52. 3. 0 libavcodec 54. 35. 0 / 54. 35. 0 libavformat 54. 20. 3 / 54. 20. 4 libavdevice 53. 2. 0 / 53. 2. 0 libavfilter 3. 3. 0 / 3. 3. 0 libavresample 1. 0. 1 / 1. 0. 1 libswscale 2. 1. 1 / 2. 1. 1

Editar para os comentários fornecidos: Atualmente, estamos tentando transformar todos os vídeos nas mesmas dimensões usando a opção ths: -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2'

Cada vídeo é transformado em 1920x1080. Também estamos tentando tirar todas as opções que temos e construir nosso caminho de volta para o que tivemos que ver onde deu errado. Mas isso parece ser um passo enorme e também desesperado.

edit2

Estes são os comandos que estamos executando atualmente:

avconv -i "33_0.98002500-14821542538733.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_0.ts"
avconv -i "33_0.57471800-14821542544448.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_1.ts"
avconv -i "33_0.27939600-14821542541226.mp4" -f mpegts -filter:v 'scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2' "tmp_ruud_2.ts"

avconv -i "templates/v2/wiebenik-v2.mov" -f mpegts "wiebenik-v5.ts"
avconv -i "templates/v2/ikkanjehelpenmet-v2.mov" -f mpegts "ikkanjehelpenmet-v5.ts"
avconv -i "templates/v2/ikbenopzoeknaar-v2.mov" -f mpegts "ikbenopzoeknaar-v5.ts"

avconv -i concat:"wiebenik-v5.ts|tmp_ruud_0.ts|ikkanjehelpenmet-v5.ts|tmp_ruud_1.ts|ikbenopzoeknaar-v5.ts|tmp_ruud_2.ts" -strict experimental "test.mp4"

Editar 3; No momento, estou convertendo todos os arquivos e alterando seu tamanho para os mesmos formatos, além de normalizá-los, conforme mostrado aqui:

avconv -i "public/videos/44_0.90768300-14822311688474.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_0.mp4"
avconv -i public/videos/tmp_44_0.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_0_normalized.mp4
avconv -i "public/videos/44_0.09416600-14822311719723.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_1.mp4"
avconv -i public/videos/tmp_44_1.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_1_normalized.mp4
avconv -i "public/videos/44_0.37376500-14822311735955.mp4" -filter:v "transpose=1, scale=iw*min(1920/iw\,1080/ih):ih*min(1920/iw\,1080/ih), pad=1920:1080:(1920-iw*min(1920/iw\,1080/ih))/2:(1080-ih*min(1920/iw\,1080/ih))/2" -c:a copy "public/videos/tmp_44_2.mp4"
avconv -i public/videos/tmp_44_2.mp4 -c:v copy -c:a libmp3lame -b:a 128k -ac 2 -ar 48000 public/videos/tmp_44_2_normalized.mp4

Depois dessas mudanças, estou combinando-as assim:

MP4Box public/videos/templates/v2/wiebenik-v2.mp4 -cat public/videos/tmp_44_0_normalized.mp4 -cat public/videos/templates/v2/ikkanjehelpenmet-v2.mp4 -cat public/videos/tmp_44_1_normalized.mp4 -cat public/videos/templates/v2/ikbenopzoeknaar-v2.mp4 -cat public/videos/tmp_44_2_normalized.mp4 -cat public/videos/templates/v2/2connect-v2.mp4 -out public/pitches/44_9b374c31dcaa7433daf0f5163a3789dc.mp4

Mas de alguma forma, mesmo com apenas 2 arquivos, estou recebendo o erro:

Cannot concatenate files: Different AVC Level Indication between source (42) and destination (40)

Acontece que meus arquivos têm uma versão diferente da alta qualidade (4 e 4,2), não sei como resolver isso ainda.

    
por Tosfera 13.12.2016 / 16:13

1 resposta

1

Parece que o problema que você está tendo está relacionado a uma combinação ruim de escolhas.

Você escolheu um fluxo de transporte MPEG como um contêiner: Fluxos de transporte tendem a ser transmitidos como taxa de bits constante (CBR) para manter uma taxa de transmissão consistente, preenchida com bytes de preenchimento quando não é suficiente existem dados. Parece que isso foi complicado pela escolha do x264 como um codec, pois o X264 não possui um modo nativo de taxa de bits constante . Para mim isso parece contra-intuitivo.

Se eu fosse responsável por este projeto, há um número se as coisas que eu gostaria de garantir.

1). Todos os clipes destinados a serem unidos devem ser normalizados (I.E. mesmas dimensões de vídeo, mesmas taxas de amostragem de áudio, mesmas taxas de bits de vídeo e )

2) Os codecs e que escolho tem características compatíveis.

Provavelmente seria prudente fazer todas as edições com amostras sem perda a uma taxa de bits específica para garantir um tempo preciso.

Como você está começando com aac que é a compactação com perdas, seu tempo de áudio será questionável.

Outras pesquisas indicam que há um problema de cópia de aac com aac_adtstoasc quando o contêiner não é flv, m4a, mov ou mp4. Você pode querer ler o comentário final nessa postagem.

Para exemplos de opções reais, veja minha resposta aqui e se você realmente precisar de -f mpegts , execute essa etapa por último após confirmar a sincronização A / V completa.

    
por Elder Geek 19.12.2016 / 15:04