ffmpeg로 MediaRecorder 비디오 수정

ffmpeg로 MediaRecorder 비디오 수정

나는 사용하고있다미디어 레코더 APIFirefox의 웹캠에서 비디오를 생성하지만 일부 오류가 있는 비디오 파일을 생성합니다.여기는 이런 방식으로 만들어진 비디오의 예입니다. VLC Player에서 실행하면 오디오가 매우 잘못되었습니다.

다음은 ffprobe입니다(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)

이 명령은 대부분의 오디오 문제를 해결하는 데 도움이 되었지만 이제는 동기화되지 않았습니다.

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

동기화하거나 다른 방법으로 수정해야 하지만, 이런 방식으로 녹화된 다른 비디오에 사용할 수 있는 일반 명령이 필요합니다.

답변1

다음 명령을 사용하여 오디오를 수정하여 문제를 해결했습니다.

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

그런 다음 변환된 비디오에서 ffprobe를 사용하여 비디오 및 오디오 지속 시간을 얻었고 두 지속 시간을 모두 빼서 오프셋을 얻은 다음 이를 사용하여 비디오 및 오디오를 동기화했습니다.

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

관련 정보