FFmpeg Comment écrire une vidéo dans un fichier
Ce que je veux, c'est
1. Get video packet from stream source
2. Decode it
3. And write that decoded data as video file(avi, mpeg etc)
Je peux en mesure d'obtenir des Paquets vidéo à partir d'un fichier (comme AVPacket) et également capable de décoder et de les enregistrer comme une image.(brut)( FFmpeg tutoriels montrer comment le faire).
Mais je ne peux pas ( ne sait pas ) écrire des données vidéo dans un fichier(d'autres) qui peut être joué par des acteurs des médias(comme VLC).
Meilleurs Voeux
Ps: de Vrais exemples de code sera grand si possible...
Maintenant, je fais un test avec de l' av_interleaved_writemais j'ai eu d'erreur étrange "non monotone horodateurs" ( je n'ai pas de contrôle sur le pts valeurs de la source de support )
Quelques Informations Supplémentaires
Dans FFmpeg-je
- Lire des paquets de médias de source médiatique ( il est peut-être vrai fichier(.avi,mov) ou même serveur rtsp).
- Puis écrire ces médias paquets de données à un fichier réel (physique .avi, .mov etc fichier)
J'ai besoin de lecteur et d'écrivain. Je peux lire le fichier de média source ( même encoder les paquets selon le format donné). Mais je ne peux pas écrire dans un fichier...(n'importe quel joueur peut jouer)
Et certains pseudo-code
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
Frame decodedFrame = Decode(packet);
VideoPacket encodedPacket = Encode( decodedFrame);
myFile.WriteFile(encodedPacket);
}
Ou tout Simplement écrire le fichier d'origine sans coder décoder
File myFile("MyTestFile.avi");
while ( source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
myFile.WriteFile(packet);
}
Puis
I can able to open MyTest.avi file with a player.
source d'informationauteur NoviceAndNovice
Vous devez vous connecter pour publier un commentaire.
Probablement ce lien peut vous aider à:
Sortie un fichier multimédia dans n'importe quel format démultiplexeur
J'espère que cela aide.
Il existe maintenant un nouvel exemple de transcodage vidéo en doc/exemples/transcodage.c de FFmpeg tronc, et c'est exactement ce dont vous avez besoin: Exemple d'API pour dé-multiplexage vers, de décodage, de filtrage, de codage et de multiplexage.
C'est pour le courant ffmpeg 2.4.4
J'ai fait quelque chose comme ça à un certain point à l'aide de libx264 et vorbis.
Un exemple de code.
https://github.com/Themaister/SSNES/blob/master/record/ffemu.c
L'idée de base est que vous devez définir vous-même les horodatages dans le
AVFrame
lorsque vous souhaitez encoder. Ensuite, vous pouvez prendre le paquet et l'écrire avecav_interleaved_write()
.vous avez besoin d'écrire un encodeur pour convertir les données brutes nécessaires format vidéo