2013-03-22 202 views
2

我正在寻找一种方法来分割或剪切用h264编码的mp4视频文件,而无需重新编码。到目前为止编辑mp4 h264编码的文件我使用了Microsoft Expression Encoder 4 Pro。问题是,我总是必须重新编码文件,这需要时间,如果我只想剪切或拆分视频文件,则会花费不必要的时间。任何帮助或指向正确的方向表示赞赏。切割mp4 h264视频文件无需重新编码

+0

取决于视频的编码方式。除非您在关键帧边界上进行分割,否则通常需要对其至少一部分进行重新编码。 – 2013-03-22 21:51:52

+0

分裂在关键帧的边界对我来说会很好,但我没有找到任何库,我可以用这个“简单”的任务在c# – Kevkong 2013-03-23 02:38:41

回答

0

libmp4v2为您提供了构建自己做某些事情的原语。我没有意识到现成的解决方案可以做到这一点,但只要您切割I帧边界,实现起来相对容易。

+0

感谢迄今,但我正在寻找c#相关的东西。 – Kevkong 2013-03-23 02:37:29

+0

@Kevkong我不相信它存在。如果对c#中的媒体进行任何低级别的操作,你很可能不得不对p/invoke进行很多操作。 – Yaur 2013-03-25 00:01:57

+0

如果想要对MP4文件进行残酷的任意裁剪,并修改头文件,我真的希望他不需要超级优化的低级C代码。我会做的是检查格式规格,然后做一些测试,看看解码器如何消化破碎的序列。在像WP和WinRT这样的新平台上,越少越好。 – 2013-06-11 01:08:19

3

我不知道如何分割而无需重新编码(转码)视频,但在Windows 8转码的视频已经内置:

要修剪的文件,调用aysnc方法PrepareFileTranscodeAsync然后调用PrepareTranscodeResult对象上的TranscodeAsync方法。

例如:

async void TrimFile(StorageFile srcFile, StorageFile destFile) 
{ 
    MediaEncodingProfile profile = 
     MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p); 

    MediaTranscoder transcoder = new MediaTranscoder(); 

    // Set the start of the trim. 
    transcoder.TrimStartTime = new TimeSpan(0, 0, 1); 

    // Set the end of the trim. 
    transcoder.TrimStopTime = new TimeSpan(0, 0, 9); 

    PrepareTranscodeResult prepareOp = await 
     transcoder.PrepareFileTranscodeAsync(srcFile, destFile, profile); 

    if (prepareOp.CanTranscode) 
    { 
     var transcodeOp = prepareOp.TranscodeAsync(); 
     transcodeOp.Progress += 
      new AsyncActionProgressHandler<double>(TranscodeProgress); 
     transcodeOp.Completed += 
      new AsyncActionWithProgressCompletedHandler<double>(TranscodeComplete); 
    } 
    else 
    { 
     switch (prepareOp.FailureReason) 
     { 
      case TranscodeFailureReason.CodecNotFound: 
       OutputText("Codec not found."); 
       break; 
      case TranscodeFailureReason.InvalidProfile: 
       OutputText("Invalid profile."); 
       break; 
      default: 
       OutputText("Unknown failure."); 
       break; 
     } 
    } 
} 

How to trim a video file (Windows Store apps using C#/VB/C++ and XAML)

也可以到Splicer(使用DirectShow.Net)用于Windows的早期。

希望它可以帮助别人。

+0

嗨,感谢您的提示。该项目发生了变化,但只要我不得不再次处理这个问题,我就会看看你的解决方案/示例。 – Kevkong 2014-01-24 17:03:04