Lo que quiero esFFmpeg Cómo escribir vídeo a un archivo
1. Get video packet from stream source
2. Decode it
3. And write that decoded data as video file(avi, mpeg etc)
puedo capaz de obtener los paquetes de vídeo desde un archivo (como AVPacket) y también puede decodificar y guardar como una imagen. (Cruda) (Los tutoriales de FFmpeg muestran cómo hacerlo). Pero no puedo (no sé) escribir esos datos de video en un archivo (otro) que pueden ser reproducidos por reproductores multimedia (como VLC).
mejores deseos
Sal: ejemplos de código real será grande si es posible ...
ahora hago prueba con av_interleaved_write pero me dio error extraño "marcas de tiempo no monótonas" (no tengo control sobre los valores pts de fuente de medios de comunicación)
algo de información extra
En FFmpeg tengo que
- Lea los paquetes de medios del origen de los medios (puede ser un archivo real (.avi, mov) o incluso el servidor rtsp).
- luego escribir los paquetes de medios a un archivo real (.avi física, .mov archivo etc)
necesito lector y escritor. Puedo leer el archivo fuente de medios (incluso codificar paquetes de acuerdo con el formato dado). Pero no puedo escribir en el archivo ... (que puede jugar cualquier jugador)
Y algunos pseudocódigo
File myFile("MyTestFile.avi");
while (source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
Frame decodedFrame = Decode(packet);
VideoPacket encodedPacket = Encode(decodedFrame);
myFile.WriteFile(encodedPacket);
}
o simplemente escribir el archivo original sin codificar decodificar
File myFile("MyTestFile.avi");
while (source ->hasVideoPackets)
{
packet = source->GetNextVideoPacket();
myFile.WriteFile(packet);
}
Entonces
I can able to open MyTest.avi file with a player.
Bounty Award a la persona que proporciona un enlace a un buen ejemplo que implementa esto. utilizando av_interleaved_write_frame o av_write_frame –
revise este enlace que muestra el archivo de video de escritura usando las librerías FFMPEG: https://stackoverflow.com/a/43464269/6180077 –