代码之家  ›  专栏  ›  技术社区  ›  ninbura

分段时音频缓慢去同步

  •  2
  • ninbura  · 技术社区  · 6 年前

    我在录制时使用ffmpeg的功能来分割视频,这样我就可以在硬盘不被填满的情况下不断录制。

    它工作得非常好,当文件分段时,音频会与视频不同步。视频似乎是不间断的,但当我稍后加入片段时,我实际上可以听到音频中的微小跳跃。有人会认为ffmpeg会在分段期间将数据包存储在队列中,因此不会丢失任何数据包,但事实似乎并非如此。。。我能强迫它做那样的事吗?

    这是我当前的区块:

    ffmpeg -y -thread_queue_size 5096 -f dshow -video_size 3440x1440 -rtbufsize 2147.48M -framerate 100 -pixel_format nv12 ^
    -itsoffset 00:00:00.012 -i video="Video (00 Pro Capture HDMI 4K+)" -thread_queue_size 5096 -guess_layout_max 0 -f dshow ^
    -rtbufsize 2147.48M -i audio="SPDIF/ADAT (1+2) (RME Fireface UC)" -map 0:0,1:0 -map 1:0 -c:v h264_nvenc -preset: llhp ^
    -pix_fmt nv12 -b:v 250M -minrate 250M -maxrate 250M -bufsize 250M -b:a 384k -ac 2 -r 100 -vsync 1 ^
    -max_muxing_queue_size 5096 -segment_time 600 -segment_wrap 9 -f segment C:\Users\djcim\Videos\PC\PC\PC%02d.mp4 
    

    我正在延迟视频流,因为它刚好在音频前面一点。

    注:aresample或async似乎没有效果,或者至少不是理想的效果。

    1 回复  |  直到 6 年前
        1
  •  2
  •   ninbura    6 年前

    将-reset\u时间戳与编码结合使用。ts代替。mp4基本上解决了这个问题-编码时reset\u时间戳似乎不起作用。mp4,不知道为什么,可能是个bug?

    我之所以这么说,主要是因为音频在第一段后仍会在一帧左右漂移,但不是指数级的。我发现一帧的音频去同步是可以接受的。虽然我现在应该提到的是,当我尝试将这些剪辑重新连接在一起时,我会遇到音频漂移问题,不总是,但有时会。使用aresample=async=250可以修复concat后的漂移,但这样做时,您可以听到音频有点拉伸。不能指望一切都完美。

    ffmpeg - y -thread_queue_size 9999 -indexmem 9999 -guess_layout_max 0 -f dshow -video_size 3440x1440 -rtbufsize 2147.48M ^
    -framerate 200 -pixel_format nv12 -i video="Video (00 Pro Capture HDMI 4K+)":audio="SPDIF/ADAT (1+2) (RME Fireface UC)" ^
    -map 0:0,0:1 -map 0:1 -flags +cgop -force_key_frames expr:gte(t,n_forced*2) -c:v h264_nvenc -preset: llhp -pix_fmt nv12 ^
    -b:v 250M -minrate 250M -maxrate 250M -bufsize 250M -c:a aac -ar 44100 -b:a 384k -ac 2 -r 100 ^
    -af "atrim=0.038, asetpts=PTS-STARTPTS, aresample=async=250" -vsync 1 -ss 00:00:01.096 -max_muxing_queue_size 9999 ^
    -f segment -segment_time 600 -segment_wrap 9 -reset_timestamps 1 C:\Users\djcim\Videos\PC\PC\PC%02d.ts