2009-11-25 10 views
0

J'essaie de diviser un grand fichier AVI 2.0 (format OpenDML) en plus petites parties (moins de 1 Go dans mon cas) afin de pouvoir ouvrir les pièces avec VFW (avifil32.dll).Comment diviser des fichiers AVI

Quelle est la meilleure façon d'obtenir cette division (de préférence en C#)?

L'une des options est de le copier image par image. J'ai trouvé quelques exemples sur le net, qui font la même chose. Mais la plupart d'entre eux utilisent VFW qui ne peut pas lire les fichiers au-dessus de 2 Go en général et les fichiers AVI 2.0 au-dessus de 1 Go en raison de la taille maximale des pièces RIFF de 1 Go.

J'aurais besoin de DirectShow au lieu de VFW. Je suis assez sûr que je voudrais aussi gâcher la synchronisation audio si j'essaie de copier manuellement les cadres. Je cherche quelque chose de similaire à ce que fait VirtualDub avec "direct stream copy" qui n'affecte pas la compression actuelle, juste scinde le fichier et crée des index AVI appropriés.

+0

J'ai trouvé un bon point de départ en utilisant DirectShow et un simple fichier de filtre dans -> avi splitter -> avi mux -> sortie de fichier sans filtre de compression entre les deux. Pour référence: http://social.msdn.microsoft.com/Forums/en-US/windowsdirectshowdevelopment/thread/ca127590-a35f-4928-a75f-785b4a4cae0f http://msdn.microsoft.com/en- us/library/ms779733% 28VS.85% 29.aspx – Vlad

Répondre

2

Les fichiers Avi peuvent être encodés de différentes manières, en fonction du codec utilisé. Avi est un fichier wrapper, pas une méthode d'encodage. Cela signifie qu'il n'y a pas vraiment de moyen générique de diviser les fichiers avi en utilisant C#.

Le faire à partir de zéro serait une entreprise majeure. Cela dit, vous pouvez tricher en utilisant mencoder et en l'appelant de C# - pas idéal, mais beaucoup plus facile et plus fiable que d'essayer de réinventer la roue. Alternativement, il existe un certain nombre de wrappers ffmpeg C# qui vous donneront accès aux outils ffmpeg (mais je n'en ai pas trouvé un qui ne soit pas buggé comme un diable)

Qu'est-ce que vous essayez de faire exactement? Pourquoi avez-vous besoin avifil32.dll et comment l'utilisez-vous? Si vous essayez simplement de lire un fichier avi très volumineux, il existe des alternatives. Essayez aforge.net, par exemple.

+1

Heh, ça fait 2 ans que j'ai posé cette question, pendant ce temps j'ai commencé à utiliser ffmpeg et je n'ai donc pas besoin de séparer les fichiers pour contourner les limitations de taille de fichier VFW. J'ai mon propre wrapper ffmpeg mais je vois que aforge.net utilise aussi ffmpeg donc je vais le vérifier pour voir si leur implémentation est meilleure que ce que j'ai. Merci pour l'indice. – Vlad

1

mencoder pouvez split files pour vous. Une autre option est ffmpeg

+0

Merci, mais je voulais dire le faire en code, pas une application externe. – Vlad