Никогда-никогда не занимайтесь написанием софта для обработки видео.
Глаза повыпадают от количества манов, руки устанут ифы писать и параметры кодекам распихивать.
Например, чтобы нормально в 2 прохода сконвертилось видео в mp4 кодеком h264, надо ввести одну(ну, на самом деле, две, да) команду:
ffmpeg -y -i test.avi -s 400x300 -pass 1 -vcodec libx264 -vpre fastfirstpass -b 512k -bt 512k -threads 0 -f mp4 -an /dev/null && ffmpeg -i test.avi -s 400x300 -pass 2 -acodec libfaac -ab 128k -ac 2 -vcodec libx264 -vpre hq -b 512k -bt 512k -threads 0 -f mp4 test.mp4
А вот кодек h263, например(им кодируется 3gp, которым снимают большинство ваших новомодных телефончиков), не умеет выдавать видео других размеров, кроме как 128x96, 176x144, 352x288, 704x576 и 1408x1152. Причем
-padtop и
-padbottom игнорирует совершенно. И пишет еще так с издёвкой, попробуйте-ка, говорит, h263+, у которого свои заморочки.
Хоть смысл каждого параметра интуитивно понятен, его значение угадать не всегда получается. В 70% случаев в ответ на команду конвертации с новым форматом\кодеком получается не видео, а унылая ничего не проясняющая стандартная фраза ffmpeg'а о том, что кодеку что-то не понравилось.
Error while opening codec for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
Остается только почувствовать себя унылым гавном и уткнуться в гугл. А кодеков много. Вы даже не представляете сколько их. Слава тому же ffmpeg'у, что входные кодеки он умеет сам определять.
А вот вам домашнее задание: слейте-ка два видео(пусть даже с одинаковыми шириной и высотой) в одно через ffmpeg.