5

Я новичок в ffmpeg.

Я хочу конвертировать несколько изображений в слайд-шоу и придумал эту команду:

ffmpeg -y -r 1/5 -i *.jpg -r 25 output.mp4

Довольно прямо вперед. Тем не менее, видео кажется только одним кадром (это слишком быстро для меня)

Вот выход вышеупомянутой команды:

    ffmpeg version 0.8.9-4:0.8.9-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
  built on Nov  9 2013 19:12:07 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, image2, from 'swirl3777.jpg':
  Duration: 00:00:05.00, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: mjpeg, yuvj444p, 1600x1200 [PAR 72:72 DAR 4:3], 0.20 tbr, 0.20 tbn, 0.20 tbc
Incompatible pixel format 'yuvj444p' for codec 'mjpeg', auto-selecting format 'yuvj420p'
[buffer @ 0x86e2040] w:1600 h:1200 pixfmt:yuvj444p
[avsink @ 0x86e8920] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x86e8d80] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuvj420p flags:0x4
Incompatible pixel format 'yuvj444p' for codec 'mjpeg', auto-selecting format 'yuvj420p'
[buffer @ 0x86e8c00] w:1600 h:1200 pixfmt:yuvj444p
[avsink @ 0x87159a0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x86f1860] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuvj420p flags:0x4
Incompatible pixel format 'yuvj444p' for codec 'mpeg4', auto-selecting format 'yuv420p'
[buffer @ 0x86f17c0] w:1600 h:1200 pixfmt:yuvj444p
[avsink @ 0x870f4a0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x8737e60] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuv420p flags:0x4
Output #0, image2, to 'swirl3786.jpg':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: mjpeg, yuvj420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 0.20 tbc
Output #1, image2, to 'swirl3787.jpg':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #1.0: Video: mjpeg, yuvj420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 0.20 tbc
Output #2, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #2.0: Video: mpeg4, yuv420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.0 -> #1.0
  Stream #0.0 -> #2.0
Press ctrl-c to stop encoding
frame=    1 fps=  0 q=10.2 Lq=10.2 q=9.5 size=      -0kB time=0.04 bitrate=  -4.4kbits/s    
video:584kB audio:0kB global headers:0kB muxing overhead -100.003680%

Я также пробовал avconv, но это тот же вывод, даже тот же размер файла. Если я изменю значения -r на что-то смешное, например, 3434321, он все равно получит тот же размер файла. Если я добавлю -b 512k или -b 1024, он снова получит тот же размер файла ... Кажется, что варианты в некотором роде игнорируются.

Три изображения в папке обнаружены правильно.

Есть ли проблемы с несовместимым форматом пикселей?

Я здесь на Ubuntu 12.04 ffmpeg версии 0.8.9-4:0.8.9-0ubuntu0.12.04.1

Любое предположение, что я мог бы сделать не так здесь? ТИА

2 ответа2

6

Glob

ffmpeg из FFmpeg поддерживает шаблоны glob, поэтому ваши входные файлы могут быть названы практически как угодно, если они находятся в нужном вам порядке:

ffmpeg -framerate 1/5 -pattern_type glob -i "*.jpg" -vf "fps=25,format=yuv420p" out.mp4

Ubuntu использует avconv и багги, поддельный " ffmpeg " из Libav, форка FFmpeg, и они не поддерживают шаблоны глобусов. Посмотрите, кто может подсказать мне разницу между ffmpeg, libav и avconv?

Получить ffmpeg

Чтобы получить ffmpeg , вы можете просто загрузить сборку ffmpeg для Linux или выполнить пошаговое руководство по компиляции ffmpeg.


Потенциальные проблемы

Первое изображение пропущено

Существуют некоторые нерешенные проблемы или несоответствия, связанные с -r и видеофильтром fps. Иногда первое изображение ввода пропускается или отображается только для кадра. Вы можете использовать фильтр fps чтобы избежать проблемы пропуска, как показано в моем примере выше. Смотрите билеты # 1578 и # 3164 для получения дополнительной информации.

Последнее изображение пропущено

Может показаться, что последнее изображение пропущено или отображается для одного кадра. Я не нашел элегантного решения для такого поведения, но вы можете просто сделать копию последнего файла изображения для компенсации.

Еще больше пропуская

Если ваши входные изображения не имеют одинаковый формат пикселей и / или размер кадра, то ffmpeg может пропустить неопределенное количество кадров. Убедитесь, что все входные изображения похожи, чтобы избежать этого. Вы можете увидеть вывод консоли, в котором будут указаны различия во входном файле.

На выходе MP4 видео не воспроизводится

Используйте менее дрянной плеер, или используйте фильтр format как показано в моем примере, или используйте параметр вывода -pix_fmt yuv420p . В противном случае ffmpeg попытается избежать или минимизировать подвыборку цветности (в зависимости от вашего ввода, используемого вами кодера, вашей версии ffmpeg и используемых вами вариантов кодирования), и хотя это может быть полезно в техническом смысле, он может создать вывод, который не воспроизводится игроками, не основанными на FFmpeg.

0

Попробуй это:

ffmpeg -y -f image2 -r 1/5 -i img%03d.jpg -pix_fmt yuv420p -r 25 output.mp4  

Ваши jpegs должны быть последовательно пронумерованы в формате img001.jpg ... img009.jpg. %03d обозначает трехзначную последовательность - 2 начальных нуля для начала. Если бы у вас было img01.jpg для img 09.jpg, вы бы использовали img%02d.jpg . Синтаксис *.jpg не будет работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .