Deve ser fácil. Na verdade, provavelmente é fácil. Eu provavelmente sou apenas idiota. Eu tenho dois vídeos, filmados ao mesmo tempo, mas com duas câmeras diferentes. Um vídeo é 1920x1080 @ 60, o outro é [email protected]. Eu quero fazer um vídeo onde ambos funcionem simultaneamente (picture-in-picture, tela dividida, o que quer que seja; não é esse o problema). Quando faço isso, um dos vídeos termina alguns segundos antes do outro. Eu tenho certeza que isso é por causa das diferentes taxas de quadros, mas nenhuma combinação de -framerate ou -r, seja como um parâmetro de entrada ou saída (ou ambos), está me dando vídeos sincronizados. Eles começam em sincronia, mas no final há alguns segundos de diferença.
Eu tentei várias coisas, conforme indicado acima. Aqui estão alguns testes (não se importe com os valores reais; a maioria deles estava apenas tentando ver qual foi o efeito):
ffmpeg -i% 1 -r% sobrecarga% -c: v libx264 -profile: v alto nível 4.1 -preset muito rápido -y% output%
ffmpeg -i% 1 -filter: v "setpts = 0.25 * PTS" -c: v libx264 -profile: v alto-nível 4.1 -preset muito rápido -y% output%
ffmpeg -r% inrate% -i% 1 -r% sobrecarga% -c: v libx264 -profile: v alto-nível 4.1 -preset veryfast -shortest -y% output%
Aqui estão as informações de cada arquivo:
ffmpeg version N-91330-ga990184007 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 7.3.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil 56. 18.102 / 56. 18.102
libavcodec 58. 20.103 / 58. 20.103
libavformat 58. 17.100 / 58. 17.100
libavdevice 58. 4.101 / 58. 4.101
libavfilter 7. 25.100 / 7. 25.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
libpostproc 55. 2.100 / 55. 2.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000020412f7a040] st: 0 edit list: 1 Missing key frame while searching for timestamp: 1000
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000020412f7a040] st: 0 edit list 1 Cannot find an index entry before timestamp: 1000.
Guessed Channel Layout for Input Stream #0.1 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '60fps.mov':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2015-01-01T00:04:15.000000Z
Duration: 00:05:40.00, start: 0.000000, bitrate: 31673 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 29717 kb/s, 60 fps, 60 tbr, 60k tbn, 120k tbc (default)
Metadata:
creation_time : 2015-01-01T00:04:15.000000Z
handler_name : iCatch Alias Data Handler
encoder : iCatch AVCC
Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 44100 Hz, stereo, s16, 1411 kb/s (default)
Metadata:
creation_time : 2015-01-01T00:04:15.000000Z
handler_name : iCat Alias Data Handler
[avi @ 0000020413a3e280] non-interleaved AVI
Guessed Channel Layout for Input Stream #1.1 : mono
Input #1, avi, from '29fps.avi':
Duration: 00:05:04.36, start: 0.000000, bitrate: 7266 kb/s
Stream #1:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 7071 kb/s, 29.85 fps, 29.85 tbr, 29.85 tbn, 29.85 tbc
Stream #1:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, mono, s16, 128 kb/s
At least one output file must be specified
Eu sei que isso é simples. Mas eu não posso chegar a isso, e meus dias de busca não vêm com isso. Meu Kung Fu é inferior. Eu me inclino para você.