尝试使用 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
答案1
我不知道 Premiere 具体是如何工作的,但时间码与项目帧速率不同。时间码只是分配给帧的标签,以指示其时间戳的形式HH:MM:SS;FF
。由于时间码由整数元素组成,因此它们无法准确地与具有分数帧速率的流中的实际帧数保持一致。如果不进行校正,这将导致帧的实际时间戳产生不断扩大的漂移。因此,发明了丢帧时间码以定期跳过一些时间码标签,因此漂移会定期减少(但很少变为零)。
无论标签方案如何,Premiere 内部都应保持帧之间的准确时间间隔。不过,为了将时间码流附加到输出,您可以将其添加-timecode 00:00:00;00
到命令中。