audio - FFmpeg - 仅延迟音频链接 dshow 输入的视频流

标签 audio video ffmpeg synchronization delay

我在尝试以可接受的误差幅度同步我的音频和视频时遇到了一个小问题。这是我的命令:

ffmpeg -y -thread_queue_size 9999 -indexmem 9999 -guess_layout_max 0 -f dshow -video_size 3440x1440 -rtbufsize 2147.48M ^
-framerate 100 -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 "aresample=async=250" ^
-vsync 1 -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

我的问题是视频稍微领先于音频,我可以使用 -itsoffset 但我必须将视频和音频称为单独的输入,因为 -itsoffset 会同时偏移音频和视频。虽然这似乎是显而易见的解决方案,但如果没有与视频一起调用音频,它会导致音频同步不一致。基本上,如果没有同时调用音频和视频,则视频现在可以在 2-3 帧边距的前面或后面。当我同时给他们打电话时,视频总是比音频早 2 帧,每次。我只需要一种方法来仅延迟视频流而不延迟音频,同时从一开始就保持音频和视频的链接。我试过这个没有运气:
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)" ^
-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 ^
-filter_complex "[0:v] setpts=PTS-STARTPTS+.032/TB [v]; [0:a] asetpts=PTS-STARTPTS, aresample=async=250 [a]" -map [v] ^
-map [a] -vsync 1 -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

就像 -itsoffset 一样,视频和音频都被延迟了。您可以使用 adelay 仅延迟音频,但似乎没有等效的视频延迟。

任何帮助或建议将不胜感激。

最佳答案

正如 Gyan 在评论中所说, atrim 有效。虽然它没有延迟视频,但它仍然通过丢弃部分音频流来排列所有内容。

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

关于audio - FFmpeg - 仅延迟音频链接 dshow 输入的视频流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49805691/

相关文章:

c# - 在kinect SDK中的图像(视频)的某些部分放置白色像素

c++ - 为什么每次从磁盘读取音频文件时,这种双缓冲方案都会产生可听见的喀哒声?

c++ - 开发插件: DX or VST?

iphone - FFmpeg + iPhone - 有趣(不正确?)的视频编码结果

ios - FFmpegKit 多个覆盖过滤器导致内存错误 - Flutter(仅适用于 iOS)

node.js - ffmpeg 如何获取 node.js 上的持续时间?

java - 在 java ubuntu 中使用 ffmpeg

audio - 哪些工具可用于构建自定义媒体播放器?

flash - 错误 1119 :access of possibly undefined property value through a reference with a static type fl. 控件:标签

ipad - 手刹编码的 MP4 无法通过 VideoJS 在 iPad 上播放