mkv文件与线性漂移不同步

时间:2017-04-24 18:56:48

标签: audio video ffmpeg synchronization flac

我有一堆mkv文件,FLAC作为音频编解码器,FFV1作为视频编解码器。

使用来自VCR模拟源的EasyCap aquisition加密狗创建文件。具体来说,我使用了VLC"开放式采集设备"提示并选择PAL。然后,我使用

将文件(音频PCM,视频原始YUV)转换为(FLAC,FFV1)
ffmpeg.exe -i input.avi -acodec flac -vcodec ffv1 -level 3 -threads 4 -coder 1 -context 1 -g 1 -slices 24 -slicecrc 1 output.mkv

现在,文件逐渐不同步。这可能是因为虽然(可能)视频具有恒定的帧速率,但FLAC轨道具有可变的帧速率。那么,有没有办法将音轨同步到音频或类似的东西? FFmpeg可以这样做吗?感谢

修改

在Mulvya的提示中,我在不同时间绘制了同步的差异;第一列显示经过的秒数,第二列显示差异 - 以秒为单位。该图似乎表现为线性,0.0078为恒定斜率。注意:用手进行测量,通过计时器

enter image description here

编辑2

使用VirtualDub,我发现将帧速率从原始24.889(Video - > Frame rate... - > Change frame rate to)更改为25 fps并使用转换为的轨道wav肯定能奏效。但是有两个问题:导入原始FFV1-FLAC mkv文件时VirtualDub崩溃,所以我不得不将视频转换为H264来试用它;更多,我发现很难使用外部编码器来保存VirtualDub输出。

那么,我可以避免使用VirtualDub,只需使用ffmpeg吗?这是导出的vdscript:

    VirtualDub.audio.SetSource("E:\\Cassette\\Filmini\\masters\\Cassetta 4_track2_ita.wav", "");
    VirtualDub.audio.SetMode(0);
    VirtualDub.audio.SetInterleave(1,500,1,0,0);
    VirtualDub.audio.SetClipMode(1,1);
    VirtualDub.audio.SetEditMode(1);
    VirtualDub.audio.SetConversion(0,0,0,0,0);
    VirtualDub.audio.SetVolume();
    VirtualDub.audio.SetCompression();
    VirtualDub.audio.EnableFilterGraph(0);
    VirtualDub.video.SetInputFormat(0);
    VirtualDub.video.SetOutputFormat(7);
    VirtualDub.video.SetMode(3);
    VirtualDub.video.SetSmartRendering(0);
    VirtualDub.video.SetPreserveEmptyFrames(0);
    VirtualDub.video.SetFrameRate2(25,1,1);
    VirtualDub.video.SetIVTC(0, 0, 0, 0);
    VirtualDub.video.SetCompression();
    VirtualDub.video.filters.Clear();
    VirtualDub.audio.filters.Clear();

第一行导入经过wav转换的音轨。 我可以在ffmpeg中设置一个等效的管道(可能,使用FLAC - 而不是wav)? SetFrameRate2可能是关键,在这里。

0 个答案:

没有答案