I'm working on a new feature for FFQueue but I've got stuck with a problem: The goal is to take a series of images of differens sizes and shapes and make them fit into a video of predefined size. The command I'm trying with is:
The -framereate makes the individual images have a rate of 1 image per 2 seconds. The filtering used: The first "scale" is ment to fit the input image into an area of no more than 800x600 pixels. The second "scale" is ment to prevent images from having odd width and/or height. The "pad" is ment to center the scaled image in a black box of 800x600 pixels. The "fps" forces the output to a framerate of 25, and "format" is used to force the pixel format.Code:ffmpeg -framerate 1/2 -i "%d.jpg" -vf "scale='if(gt(iw,ih),800,-1)':'if(gt(ih, iw),600,-1)', scale='if(mod(iw, 2), iw-1, iw)':'if(mod(ih, 2), ih-1, ih)', pad=800:600:(ow-iw)/2:(oh-ih)/2:black, fps=fps=25, format=yuv420p" -b:v 1000k -shortest -y slideshow.mp4
When running the command I get a lot of "deprecated pixel format" warnings spiced with some "frame size changed" messages - but no errors. The ouput video contains some images - both landscape and portrait that are correctly scaled and padded to 800x600. But annoyingly a lot of frames are irradically dropped. Out of 16 frames 11 are dropped (with no obvious reason) and other frames are duplicated to create a video of 32 seconds (16 imgs, 2 secs per img). Some images are shown for up to 10 seconds and other images are shown for exactly 2 seconds.
I've tried to use different image sets and I've tried to use "-vsync" in various ways. I've tried to use "-r" both before and after the input with various unwanted results. Am I doing something wrong or is ffmpeg just not capable of doing what I want it to?
+ Reply to Thread
Results 1 to 8 of 8
"deprecated pixel format"
-> "-pix_fmt yuv420p", before the output should fix that
about the randomly dropping frames, try using '-f image2 -r 1/2' instead of '-framerate 1/2'users currently on my ignore list: deadrats, Stears555
I've come to the conclusion that it is not possible to do the job with scaling and padding in one batch. First the images must be scaled and padded in a job and then the new images must be used for creating the resulting video in another job. Even then either first or last frame is randomly skipped - but this can bodged with a setpts filter.
For now I've got a working "images to video" tool created for FFQueue - thanks anyway
Strange that setting the pix_fmt doesn't fix the "deprecated pixel format" issue, but happy you found a solution for you tool.
By the way, if you plan to add further features for this, implementing some sort of 'seam carving' (http://en.wikipedia.org/wiki/Seam_carving) would be cool, but that would require more work since ffmpeg doesn't offer this.users currently on my ignore list: deadrats, Stears555
Like I wrote " that would require more work since ffmpeg doesn't offer this".
Don't need it but thought that it might be a nice feature to have assuming you want to ' to take a series of images of differens sizes and shapes and make them fit into a video of predefined size'.users currently on my ignore list: deadrats, Stears555
No problem. If it's not in the scope of your project, that's fine.users currently on my ignore list: deadrats, Stears555