Corrigir vídeos do MediaRecorder com ffmpeg

0

Estou usando a API MediaRecorder para criar vídeos a partir da webcam no Firefox, mas Cria arquivos de vídeo com algumas falhas. Aqui é um exemplo de vídeo criado dessa maneira. Quando eu executo no VLC Player, o áudio está muito errado.

Aqui está o ffprobe (é um vídeo da webm):

ffprobe version git-2015-12-11-df2ce13 Copyright (c) 2007-2015 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)
  configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-version3 --enable-x11grab
  libavutil      55. 10.100 / 55. 10.100
  libavcodec     57. 17.100 / 57. 17.100
  libavformat    57. 19.100 / 57. 19.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 20.100 /  6. 20.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, matroska,webm, from 'original.wmv':
  Metadata:
    encoder         : QTmuxingAppLibWebM-0.0.1
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
    Stream #0:1(eng): Audio: vorbis, 44100 Hz, mono, fltp (default)

Esses comandos funcionaram para mim para corrigir a maioria dos problemas de áudio, mas agora estão fora de sincronia:

ffmpeg -i original.wmv -r 30000/1001 -pix_fmt yuv420p -vsync 1 -g 60 -vcodec libx264 -refs 1 -bf 0 -subq 3 -acodec libfaac -ac 2 -ab 128k -ar 100 -filter_complex asetnsamples=n=1234:p=0 novo.mp4

ffmpeg -y -i original.wmv -r 30000/1001 -pix_fmt yuv420p -vsync 1 -g 60 -vcodec libx264 -refs 1 -bf 0 -subq 3 -acodec libfaac -ac 2 -ab 128k - 44100 -filter_complex silenceremove=0:5 new.mp4

Eu preciso sincronizá-lo ou corrigi-lo de outra forma, mas com um comando genérico para usar em qualquer outro vídeo gravado dessa maneira.

    
por Filipe Roberto 11.12.2015 / 18:08

1 resposta

1

Eu resolvi meu problema usando este comando para corrigir o áudio:

ffmpeg -i original.wmv -r 30000/1001 -pix_fmt yuv420p -vsync 1 -g 60 -vcodec libx264 -refs 1 -bf 0 -subq 3 -acodec libfaac -ac 2 -ab 128k -ar 100 -filter_complex asetnsamples=n=1234:p=0 new.mp4

Em seguida, obteve durações de vídeo e áudio usando ffprobe de vídeo convertido, subtraiu as durações para obter um deslocamento e usou isso para sincronizar vídeo e áudio:

ffmpeg -y -i new.mp4 -itsoffset "calculatedOffset" -i new.mp4 -vcodec copy -acodec copy -map 1:0 -map 0:1 new_sync.mp4
    
por 17.12.2015 / 18:52