I have an ffmpeg video player that has the same AVFilter Graph text string inputs as the command line ffmpeg. You could try looking at how I setup the code and compare with what you’re doing.
The key bits are in this file: https://github.com/bsenftner/ffvideo/blob/master/ffvideolib_src/ffvideo_frameMgr.h There’s a frame manager class implementing frame filters starting around line 110. Note, this does not do audio, but I’ve been told by a dev with a similar playback library the audio handling is very similar. From: Libav-user <[email protected]> On Behalf Of Sushma Sent: Saturday, October 15, 2022 7:36 AM To: This list is about using libavcodec, libavformat, libavutil, libavdevice and libavfilter. <[email protected]> Subject: Re: [Libav-user] Slow down video Thanks for the reply. If pix_fmt=0 does not work, what are the other pixel formats that I can use to achieve my requirement? >>atrim gets from [in1], i.e. buffer, while in the other version atrim is connected to [0:a], i.e. a abuffer. Do you think I need to use it in a similar way in the API as well? If possible, can you share a sample filter string that I could use? I tried all possible ways but with no luck. Regards, Madhukar On Fri, Oct 14, 2022 at 6:43 PM Nicolas George <[email protected] <mailto:[email protected]> > wrote: Sushma (12022-10-14): > Hello All, > > I'm trying to use FFMPEG to slow down part of video and audio using C++ > FFMPEG API. I was able to achieve it from the command line but however, > argument parsing fails using api. > > Here is the command line input > > ffmpeg -i "inputvideo.mp4" -filter_complex > "[0:v]trim=0:2,setpts=PTS-STARTPTS[v1];[0:v]trim=2:10,setpts=2*(PTS-STARTPTS)[v2];[0:v]trim=10,setpts=PTS-STARTPTS[v3];[0:a]atrim=0:2,asetpts=PTS-STARTPTS[a1];[0:a]atrim=2:10,asetpts=PTS-STARTPTS,atempo=0.5[a2];[0:a]atrim=10,asetpts=PTS-STARTPTS[a3];[v1][a1][v2][a2][v3][a3]concat=n=3:v=1:a=1" > -preset superfast -profile:v baseline output.mp4 > > Here is the filter string i used in avfilter_graph_parse() > > buffer=video_size=1920x1080:pix_fmt=0:time_base=1/30:pixel_aspect=0/1:frame_rate=30/1 > [in_1]; [in_1] trim = 0:2, setpts = PTS - STARTPTS [in_2]; [in_2] trim = > 2:10, setpts = 2 * (PTS - STARTPTS)[in_3]; [in_3] trim = 10, setpts = PTS - > STARTPTS[in_4]; [in_1] atrim = 0:2, asetpts = PTS - STARTPTS[in_5]; [in_5] > atrim = 2:10, asetpts = PTS - STARTPTS, atempo = 0.5[in_6]; [in_6] atrim = > 10, asetpts = PTS - STARTPTS[in_7]; [in_1] [in_2] [in_5] [in_3] [in_6] > [in_4] [in_7] concat = n = 3:v = 1 : a = 1 [result]; [result] buffersink > > Can anyone let me know where I'm wrong? What changes do I need to make in > the filter string? Kindly help I see several issues: pix_fmt=0 will probably not work. atrim gets from [in1], i.e. buffer, while in the other version atrim is connected to [0:a], i.e. a abuffer. You have several pads that are connected multiple times. Regards, -- Nicolas George _______________________________________________ Libav-user mailing list [email protected] <mailto:[email protected]> https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email [email protected] <mailto:[email protected]> with subject "unsubscribe".
_______________________________________________ Libav-user mailing list [email protected] https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
