使用原始格式时,ffmpeg音频和视频不同步

时间:2016-07-14 16:02:52

标签: video ffmpeg yuv

我有2个.webm文件,一个包含视频,另一个包含音频。我需要生成包含视频和音频的单个mp4文件,同步。这是我尝试做的事情:

ffmpeg -ss 00:00:00.33 -i user_17624_1-1762.webm -an -r 15 -f rawvideo -pix_fmt yuv420p -s 1920x1080 ./video.pipe &
ffmpeg -i user_17624_2-1767.webm -vn -ar 44100 -ac 2 -f s16le -acodec pcm_s16le ./audio.pipe &
ffmpeg -an -r 15 -f rawvideo -pix_fmt yuv420p -s 1920x1080 -i ./video.pipe -vn -ar 44100 -ac 2 -f s16le -acodec pcm_s16le -i ./audio.pipe -r 15 output_bad.mp4

-ss by 0.33s是因为视频在音频开始前0.33s开始 - 1762和1767是帧数,所以它们是5帧关闭,15 fs。

这样做,我得到了一个完美的录音,其中视频和音频在整个文件中同步。

但问题是,我需要做一些视频帧的改动,我这样做是一个C应用程序操纵原始视频流中的字节,所以我不能这样做,我需要转码先RAW然后操作,然后从原始编码mp4。从链中删除我的C应用程序以确保它不是问题,它归结为:

public class Program
{
    static bool RedirectionCallback(string url)
    {
        return url.ToLower().StartsWith("computername.domain.contoso.com/EWS/Exchange.asmx");
    }
    static void Main(string[] args)
    {
          ExchangeService myService = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
          myService.Credentials = new NetworkCredential("abc@org.com", "password", "domain");

          myService.AutodiscoverUrl("abc@org.com", RedirectionCallback);
          Console.WriteLine("EWS Endpoint: {0}", myService.Url);
          Folder inbox = Folder.Bind(myService, WellKnownFolderName.Inbox);
          Console.WriteLine("The folder name is " + inbox.DisplayName.ToString());
          Console.WriteLine("EWS Endpoint: {0}", myService.Url);

          FindItemsResults<Item> findResults =   myService.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
          string content = string.Empty;

          foreach (Item item in findResults.Items)
          {
              EmailMessage email = EmailMessage.Bind(myService, item.Id);
              email.Load();

              content += item.Subject + "\n";
              content += email.From.Address + "\n";
              content += email.Body + "\n\n";

              Console.WriteLine(item.Subject);
              Console.WriteLine(email.From.Address);
              Console.WriteLine(email.Body);
        }

        string result = content;
    }

结果是,记录音频和视频彼此偏离,并且似乎也在文件持续时间内波动。

我对这些视频转码做错了什么?请帮帮我:)。

米哈伊尔

2 个答案:

答案 0 :(得分:0)

答案证明很简单,-async 10000

答案 1 :(得分:0)

当我将视频像素格式更改为yuv420时,我也遇到了类似的问题,但是当我提高帧率时,问题就解决了

您可以通过增加fps来尝试: -framerate 120