MediaRecorder-Videos mit ffmpeg reparieren

MediaRecorder-Videos mit ffmpeg reparieren

Ich benutzeMediaRecorder APIum Videos von der Webcam in Firefox zu erstellen, aber die Erstellung der Videodateien weist einige Fehler auf.Hierist ein Beispiel für ein auf diese Weise erstelltes Video. Wenn ich es auf dem VLC-Player ausführe, ist der Ton völlig falsch.

Hier ist die ffprobe (es ist ein WebM-Video):

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)

Mit diesen Befehlen konnte ich die meisten Audioprobleme beheben, aber jetzt ist alles nicht mehr synchron:

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

Ich muss es synchronisieren oder auf andere Weise reparieren, aber mit einem allgemeinen Befehl, der in allen anderen auf diese Weise aufgezeichneten Videos verwendet werden kann.

Antwort1

Ich habe mein Problem gelöst, indem ich den Ton mit diesem Befehl korrigiert habe:

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

Dann habe ich mit ffprobe die Video- und Audiodauer aus dem konvertierten Video ermittelt, beide Dauern abgezogen, um einen Versatz zu erhalten, und diesen zum Synchronisieren von Video und Audio verwendet:

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

verwandte Informationen