我正在寻找一种在不重新编码的情况下,分割或剪切使用h264编码的mp4视频文件的方法。到目前为止,我使用Microsoft Expression Encoder 4 Pro来编辑mp4 h264编码的文件。问题是,我总是需要重新编码文件,这需要时间,如果我只想裁剪或拆分视频文件,则会浪费不必要的时间。如果您能提供帮助或指向正确的方向,将不胜感激。
我正在寻找一种在不重新编码的情况下,分割或剪切使用h264编码的mp4视频文件的方法。到目前为止,我使用Microsoft Expression Encoder 4 Pro来编辑mp4 h264编码的文件。问题是,我总是需要重新编码文件,这需要时间,如果我只想裁剪或拆分视频文件,则会浪费不必要的时间。如果您能提供帮助或指向正确的方向,将不胜感激。
我不知道如何在不重新编码(转码)的情况下拆分视频,但在Windows 8上,转码视频已经内置了:
要修剪文件,请调用异步方法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;
}
}
}
如何裁剪视频文件(使用C#/VB/C++和XAML的Windows Store应用程序)
对于旧版Windows,也可以使用Splicer(使用DirectShow.Net)。
希望能帮助到有需要的人。
libmp4v2提供了构建自己实现此功能所需的基本工具。虽然我不知道是否有免费的现成解决方案可以做到这一点,但只要您在I帧边界上进行切割,实现起来应该相对容易。