2013-03-22 2 views
2

Я ищу способ разделить или вырезать видеофайл mp4, закодированный h264, без повторного кодирования. До сих пор для редактирования файла с кодировкой mp4 h264 я использовал Microsoft Expression Encoder 4 Pro. Проблема в том, что мне всегда нужно перекодировать файл, и это требует времени, ненужного времени, если я хочу только разрезать или разбить видеофайл. Любая помощь или указание в правильном направлении ценится.Редактирование видеофайла mp4 h264 без повторного кодирования

+0

зависит от способа кодирования видео. если вы не разделились на границе ключевого кадра, обычно требуется повторное кодирование, по крайней мере, часть его требуется. –

+0

раскол на границе ключевого кадра будет для меня прекрасным, но я не нашел ни одной библиотеки, которую я мог бы использовать для этой «легкой» задачи в C# – Kevkong

ответ

0

libmp4v2 дает вам примитивы, чтобы создать что-то для этого. Im не осведомлен о свободном от шельфа решении, которое делает именно это, хотя было бы относительно легко реализовать, если вы сокращаете границы I-кадра.

+0

, спасибо, но я ищу что-то связанное C#. – Kevkong

+0

@ Kevkong Я не верю, что он существует. Скорее всего, вам нужно будет p/invoke сделать что-то, чтобы сделать многое, если какие-либо манипуляции с низкими уровнями данных из C#. – Yaur

+0

Если вы хотите сделать жестокие произвольные сокращения в файле MP4 и просто изменить заголовок, я действительно надеюсь, что ему не понадобится супер оптимизированный низкоуровневый код C. Что бы я делал, это проверить спецификации формата, а затем провести некоторое тестирование, чтобы увидеть, как декодер переваривает разбитые последовательности. На новых платформах, таких как WP и WinRT, меньше. –

3

Я не знаю, как разделить видео без повторного кодирования (перекодирования), но на Windows 8 транскодирования видео было построено в:

Чтобы обрезать файл, вызовите метод Асинхронный PrepareFileTranscodeAsync, а затем вызовите метод TranscodeAsync для объекта PrepareTranscodeResult.

Например:

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

Смежные вопросы