
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