Reparar vídeos de MediaRecorder con ffmpeg

Reparar vídeos de MediaRecorder con ffmpeg

Estoy usandoAPI de grabación de mediospara crear videos desde la cámara web en Firefox, pero crea archivos de video con algunas fallas.Aquíes un ejemplo de vídeo creado de esta manera. Cuando lo ejecuto en VLC Player, el audio es muy incorrecto.

Aquí está la ffprobe (es un vídeo 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)

Estos comandos me funcionaron para solucionar la mayoría de los problemas de audio, pero ahora no están sincronizados:

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

Necesito sincronizarlo o arreglarlo de otra manera, pero con un comando genérico para usar en cualquier otro video grabado de esta manera.

Respuesta1

Resolví mi problema usando este comando para corregir el audio:

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

Luego obtuve duraciones de video y audio usando ffprobe del video convertido, resté ambas duraciones para obtener un desplazamiento y usé esto para sincronizar video y audio:

ffmpeg -y -i new.mp4 -itsoffset "calculatedOffset" -i new.mp4 -vcodec copy -acodec copy -map 1:0 -map 0:1 new_sync.mp4

información relacionada