Đồng bộ hóa hai video với tốc độ khung hình khác nhau bằng FFmpeg


1

Nó sẽ dễ dàng. Trên thực tế, nó có thể là dễ dàng. Có lẽ tôi chỉ bị câm. Tôi có hai video, quay cùng một lúc nhưng với hai máy ảnh khác nhau. Một video là 1920x1080 @ 60, video còn lại là 640x480 @ 29,85. Tôi muốn tạo một video trong đó cả hai đều chạy đồng thời (hình ảnh trong ảnh, màn hình chia nhỏ, bất cứ điều gì; đó không phải là vấn đề). Khi tôi làm điều này, một trong những video kết thúc vài giây trước video kia. Tôi chắc chắn điều này là do tốc độ khung hình khác nhau, nhưng không có sự kết hợp giữa -framerator hoặc -r, dù là tham số đầu vào hoặc đầu ra (hoặc cả hai), sẽ mang lại cho tôi các video được đồng bộ hóa. Họ bắt đầu đồng bộ, nhưng cuối cùng có một vài giây khác biệt.

Tôi đã thử một số thứ, như được chỉ ra ở trên. Dưới đây là một số thử nghiệm (đừng bận tâm đến các giá trị thực tế; hầu hết chúng chỉ đang cố gắng xem hiệu ứng là gì):

ffmpeg -i% 1 -r% outrate% -c: v libx264 -profile: v high -level 4.1 -preset rất nhanh -y% đầu ra%

ffmpeg -i% 1 -filter: v "setpts = 0.25 * PTS" -c: v libx264 -profile: v high -level 4.1 -preset rất nhanh -y% đầu ra%

ffmpeg -r% inrate% -i% 1 -r% outrate% -c: v libx264 -profile: v high -level 4.1 -preset Veryfast -shortest -y% output%

Dưới đây là thông tin cho mỗi tệp:

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

Tôi biết điều này là đơn giản. Nhưng tôi không thể nghĩ ra được, và những ngày tìm kiếm của tôi đã không đến với nó. Kung Fu của tôi kém hơn. Tôi cúi cho bạn.


Async không phải do tốc độ khung hình cơ sở. Âm thanh như máy ảnh thứ 2 có tốc độ khung hình thay đổi (có phải là máy ảnh webcam / điện thoại không?). Chia sẻ nhật ký củaffmpeg -i 60fps.mp4 -i 29fps.mp4 2> logfile.txt
Gyan

@gyan: Chỉnh sửa thông tin nhật ký vào câu hỏi.
Brian
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.