4

Я пытаюсь сделать серию снимков, сделанных с интервалом в 1 секунду, чтобы создать видео с интервальной съемкой. Я подумал, что это будет легко с ffmpeg, но я сталкиваюсь с загадочными ошибками.

Все изображения в формате JPEG yuv420, взятые с камеры Android. Они сохраняются в виде отдельных файлов JPEG в папке, все они имеют одинаковый размер и формат. Они называются как последовательность из 7-значных имен, начиная с нуля (например, от «0000000.jpg» до «0001000.jpg»).

Это моя строка (имена папок отредактированы для ясности):

avconv -r 1 -f image2 -i %07d.jpg -vcodec libx264 -crf 18 -preset slower video.mp4

Кажется здорово, я вижу много сообщений от людей, которые говорят, что это работает для них.

Однако ffmpeg дает мне это (жирный шрифт указывает на ошибку)

ffmpeg version 0.8.5-6:0.8.5-1, Copyright (c) 2000-2012 the Libav developers
  built on Jan 13 2013 12:05:48 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[mjpeg @ 0x233aea0] overread 8
Input #0, image2, from '%07d.jpg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: mjpeg, yuvj420p, 640x480 [PAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
File 'video.mp4' already exists. Overwrite ? [y/N] y
[buffer @ 0x233b340] w:640 h:480 pixfmt:yuvj420p
[libx264 @ 0x2339fa0] using SAR=1/1
[libx264 @ 0x2339fa0] using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT
[libx264 @ 0x2339fa0] profile Main, level 3.1
[libx264 @ 0x2339fa0] 264 - core 123 r2189 35cf912 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=8 deblock=1:0:0 analyse=0x1:0x131 me=umh subme=9 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=2 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=0 b_adapt=2 b_bias=0 direct=3 weightb=0 open_gop=1 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=60 rc=crf mbtree=1 crf=18.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.25 aq=1:1.00
Output #0, mp4, to 'video.mp4':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: libx264, yuvj420p, 640x480 [PAR 1:1 DAR 4:3], q=-1--1, 25 tbn, 25 tbc
Stream mapping:
  Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
[mjpeg @ 0x233aea0] overread 8
frame=    0 fps=  0 q=0.0 Lsize=       0kB time=10000000000.00 bitrate=   0.0kbits/s    
video:0kB audio:0kB global headers:0kB muxing overhead 610.000000%

Строки импорта (которые выделены красным цветом) - это строки с надписью « [mjpeg @ 0x233aea0] overread 8 ».

Это заставляет меня думать, что, возможно, он пытается прочитать изображения в формате motion jpegs вместо простых файлов jpeg и как-то терпит неудачу. Я пробовал с / без "-f image2", с тем же результатом. И я также попытался использовать avconv, с тем же результатом.

Я должен отметить, что изображения действительны, и если я преобразую их все в * .png (дорогостоящий и трудоемкий процесс), все это работает. Но я бы предпочел просто иметь возможность использовать JPEG, без промежуточного преобразования. В конце концов, для ffmpeg это и есть перекодировка.

У кого-нибудь есть хороший способ конвертировать * .jpg в видео с помощью ffmpeg?

1 ответ1

6

[mjpeg @ 0x233aea0] overread 8 - это ошибка, которая выдается , когда ffmpeg пытается читать изображение JPEG (или кадр из потока MJPEG) блок за блоком, но все еще остаются оставшиеся биты.

В этом случае, даже если ваши изображения могут хорошо отображаться в других средствах просмотра, это то, что FFmpeg не может (или не будет) обрабатывать. Чтобы это исправить, вам нужно повторно сохранить изображения в формате PNG, как вы пробовали ранее, или в формате JPEG. Вы можете сделать такое пакетное преобразование с помощью ImageMagick, например:

for f in *.JPG; do mogrify "$f"; done

Это позволит повторно сохранить файлы JPEG под тем же именем. Обратите внимание, что в этом процессе вы потеряете качество, поэтому он не идеален, и я бы использовал PNG в качестве промежуточных звеньев, поскольку они без потерь.

Кстати: всегда полезно использовать последнюю версию FFmpeg, которую вы можете загрузить в виде статической сборки (просто скачать, извлечь, использовать) или скомпилировать самостоятельно. Пакеты, которые поставляются с Ubuntu, всегда устарели, и - в зависимости от вашей версии Ubuntu - даже не "настоящий" FFmpeg, а разветвленная библиотека Libav (которую можно использовать, но нужно знать разницу).

Не забывайте, что изображения должны иметь последовательные имена при использовании синтаксиса %07d.jpg для ffmpeg без пропущенных чисел. См. Также документацию по мьюксеру image2 для получения дополнительной информации.

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