Подтвердить что ты не робот

Создайте видео с jpeg с avconv => поврежденным видео

Я пытаюсь сделать видео (независимо от формата) из каталога, полного jpeg-кадров.

Я попытался использовать avconv (v0.8), как видно из многих тем в Интернете, а также документацию libav:

avconv -i samples/*.jpeg output.mpeg

Кажется, что он работает хорошо и создает файл output.mpeg.

Но файл не может быть прочитан никаким читателем (vlc, banshee, totem,...). Нет ошибки, но ничего не происходит, когда я нажимаю Play.

Если я проверю размер видеофайла, это примерно 20 кБ, тогда как исходное видео - 10 МБ. Таким образом, мы можем предположить, что данные не были сохранены в файле (это около 20 кБ независимо от количества кадров, заданных на входе)

Я сделал паштет журнала отладки обработки. Я не знаком с миром кодека, поэтому я не понимаю многих вещей: http://pastebin.com/9dfxFWZe.

Я также пытаюсь использовать множество комбинаций с -s, -r, -b, -vcodec, -f и т.д., но проблема все еще существует.

Я делаю что-то неправильно?

Спросите меня все, что может вам помочь, я отвечу очень быстро.

Благодарим за помощь:)

4b9b3361

Ответ 1

avconv ожидает, что вы укажете входные имена файлов в синтаксисе типа printf. Просто использовать shell-символы (например, samles/*. Jpeg) недостаточно.

Ваши образцы, кажется, называются sample/lapinsnipermin/.jpeg, поэтому попробуйте следующую командную строку:

avconv -f image2 -i samples/lapinsnipermin/%03d.jpeg output.mpeg

Это работает? Вы также можете добавить параметры для битрейта (например, -r 25).

Ответ 2

Воскрешайте это, поскольку он появился, когда Googling для решения. Я, наконец, начал работать с этим:

[email protected]:~$ avconv -r 1 -i /tmp/photo%d.jpg -r 24 -s 320x240 -vsync cfr /tmp/video.mpg

Я не мог заставить avconv распознавать входные файлы в исходных именах; это показывает, почему:

[email protected]:~$ strace avconv -i /media/sdb1/DCIM/188_0408/IMGP%04d.JPG /tmp/video.mpg 2>&1 | grep 188_0408
execve("/usr/bin/avconv", ["avconv", "-i", "/media/sdb1/DCIM/188_0408/IMGP%0"..., "/tmp/video.mpg"], [/* 36 vars */]) = 0
stat64("/media/sdb1/DCIM/188_0408/IMGP0000.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0001.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0002.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0003.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
stat64("/media/sdb1/DCIM/188_0408/IMGP0004.JPG", 0xbf925b00) = -1 ENOENT (No such file or directory)
write(2, "/media/sdb1/DCIM/188_0408/IMGP%0"..., 66/media/sdb1/DCIM/188_0408/IMGP%04d.JPG: No such file or directory

Я не видел опции для установки стартового номера, поэтому я сделал это:

i=0; for file in /media/sdb1/DCIM/188_0408/IMGP28*.JPG; do cp $file /tmp/photo$i.jpg; i=$((i+1)); done

Конечным результатом является видео моих фотографий, показывающее один за каждую секунду; -vsync cfr сообщает avconv для ввода входных кадров в соответствии с выходной частотой кадров.

Ответ 3

Я нашел, что лучше подключить файл jpg, чтобы вы могли управлять выбором с помощью стандартных подстановочных знаков, попробуйте что-то вроде этого. Это также выводит видео, которое вы можете использовать в Интернете и мобильном устройстве (например, с помощью стандартного тега браузера):

cat samples/*.jpeg | avconv -r 30 -f image2pipe -codec:v mjpeg -i - -pix_fmt yuvj420p -r 30 -c:v libx264 -vf scale=480:300 -y output.mp4