尝试使用 FFmpeg 以 60000/1001 (59.94) FPS 捕获采集卡。在我将文件拖到另一个程序(如 Adobe Premiere)之前,一切似乎都正常,它似乎无法判断视频是丢帧时间码。
当我探测视频ffprobe -i [input] -show_streams
时它说时间码=N/A,我如何在录制时将正确的时间码注入文件的元数据?我什至理解正确吗?只是当我将视频拖入 Premiere 并“从剪辑创建序列”时,它会自动将时间码设置为 59.94 非丢帧,这显然是 A/V 同步的问题。我可以手动更改序列的时间码,但我更喜欢它以某种方式从文件中提取时间码。
我用来记录的命令:
ffmpeg -y -hide_banner `
-thread_queue_size 9999 -indexmem 9999 -f dshow -rtbufsize 2147.48M -video_size 3840x2160 -framerate 60000/1001 `
-pixel_format yuyv422 -i video="AVerMedia HD Capture GC573 1":audio="SPDIF/ADAT (1+2) (RME Fireface UC)" `
-map 0:0,0:1 -map 0:1 -c:v h264_nvenc -preset: hp -r 60000/1001 -rc-lookahead 120 `
-pix_fmt yuv420p -b:v 288M -minrate 288M -maxrate 288M -bufsize 288M -c:a aac -ar 44100 -b:a 320k `
-af "aresample=async=250" -max_muxing_queue_size 9999 `
C:\Users\djcim\Videos\FFmpeg\AM\AM.mov
我不知道 Premiere 的具体工作原理,但时间码与项目帧率不同。时间码只是分配给帧的标签,用于指示它们在
HH:MM:SS;FF
形式上的时间戳。因为时间码由整数元素组成,所以它们无法准确地保持与具有小数帧率的流中的实际帧数的对应关系。如果未更正,这会导致帧的实际时间戳不断扩大。因此,发明了丢帧时间码以定期跳过一些时间码标签,因此漂移会定期减少(但很少为零)。无论标签方案如何,Premiere 都应在内部保持帧之间准确的时间间隔。尽管如此,为了将时间码流附加到输出,您可以添加
-timecode 00:00:00;00
到您的命令。