Преобразование PNG структурирует к видео на уровне 1 кадр/с

Ваш вопрос читает довольно отличающийся "способом как инструменты???", таким образом, я точно не знаю, будет ли это работать на Вас:

system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******
21
18.08.2014, 14:56
4 ответа

Что, если Вы увеличиваете свой второй пример немного следующим образом:

$ ffmpeg -r 1 -i data/input-%4d.png -c:v libx264 out.mp4

-r 1 потребности прибыть перед .png файлами, не после.

Из документации FFmpeg:

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

3
27.01.2020, 19:43

Если Вы хотите остроту для FFMPEG, который генерирует видео, которое играет в 1 кадре в секунду, что Вы хотите сделать, указывают framerates для обоих вводов и выводов, как это:

% ffmpeg-r 1-i data/input-4d.png-pix_fmt yuv420p-r 10 data/output.mp4

-r 1 означает, что видео будет играть в 1 из исходных изображений в секунду.
-r 10 означает, что видео будет играть в 10 кадрах в секунду.

( -pix_fmt yuv420p должен просто там гарантировать совместимость с широким спектром программ воспроизведения. Это требуется здесь, например, для видео быть играемым Windows Media Player.)

Я протестировал многих, другой вывод framerates, и 10, кажется, самое низкое количество, которое можно использовать, который все еще произведет видео, которое будет играть VLC.

Конечно, команда выше означает, что каждое исходное изображение умножается, но это - более простой метод, чем "медленный это вниз", один Вы упомянули, и в зависимости от кодека это не может произвести видео, намного больше, чем истинное видео на 1 кадр/с.

Для тестирования этого я просто произвел истинное видео на 1 кадр/с, которое вышло к 2,24 кибибитам. Я затем произвел видео с теми же входными изображениями, но вывод на уровне 24 кадр/с, и оно вышло к 5,76 кибибитам. Это только свыше дважды размера, и нигде около 24 раза размера.:)

19
27.01.2020, 19:43
  • 1
    +1 на-pix_fmt. Легкий забыть некоторых людей настаивают на том, чтобы использовать WMP :-) –  Smalltown2k 14.07.2014, 17:37

Используйте оба параметра -framerate и -r

Например, чтобы конечное видео выглядело как 1 кадр / с:

ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
    -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4

Это похоже на то, что Преобразование кадров PNG в видео при 1 кадре в секунду | Unix & Linux Stack Exchange говорит, но мне нужно было -framerate вместо -r , чтобы он работал.

Это упоминается в вики по адресу: http://trac.ffmpeg.org/wiki/Slideshow#Framerates

Он устанавливает выходную частоту кадров на 30 , которую VLC может обрабатывать. , и копирует каждое изображение 30 раз, так что выходное видео выглядит со скоростью 1 кадр / с. См. Также: Проблемы с воспроизведением в VLC видео с низкой частотой кадров из изображений с использованием ffmpeg | Stack Overflow

После этого VLC сможет нормально воспроизводить видео.

Проверено на Ubuntu 16.10, VLC 2.2.4, ffmpeg 3.0.5 в каталоге с 10 PNG.

См. Также: https://stackoverflow.com/questions/19267443/vlc-freezes-for-low-1-fps-video-created-from-images-with-ffmpeg

5
27.01.2020, 19:43

Это ошибка в VLC (, которая все еще существует в версии 3.0.6 ). После некоторых экспериментов я понял, что VLC вылетает для видео с FPS менее 10 . Так что все видео с 10 FPS и более не должны быть проблемой. Таким образом, в настоящее время нет простого способа получить видео с частотой 1 кадр/с, которое можно было бы воспроизвести в VLC (, не сдавайтесь, продолжайте читать).

Одним из обходных путей является -, как показано в ответе выше -, чтобы имитировать эффект 1 FPS путем дублирования изображений (, когда на самом деле у нас есть FPS, равный 10 или более, что нормально для VLC ).

Пример:Если у вас есть папка с 12 изображениями, и вы хотите создать видео с частотой 1 кадр/с (, которое можно воспроизвести в VLC ), тогда вам нужно продублировать каждое изображение несколько раз (. ] скажем, 10 раз ), а затем скажите FFMPEG сгенерировать видео со скоростью 10 кадров в секунду. Таким образом, мы получим видео с общим количеством кадров 120, где каждое изображение будет воспроизводиться в течение 1 секунды (, так как оно дублируется 10 раз ), что является просто фейком для 1 FPS.

Я предпочитаю использовать параметр fps, а не -r(, который показан в другом ответе ), который в некоторых случаях может быть проблематичным (в соответствии с официальной документацией).

ffmpeg -framerate 1 -i "img (%d).jpg" -c:v libvpx-vp9 -vf "fps=10,format=yuv420p" out.mkv

Поскольку входное значение -framerateменьше выходного fps, FFMPEG будет дублировать кадры для достижения желаемой частоты кадров на выходе (, равной 10 в соответствии с приведенной выше командой ).

Также важно отметить , что порядок -framerateи -vf fpsважен ,поскольку эта конфигурация будет применена к следующему упомянутому видео (в -или выходу ). Это согласно официальным документам :

.

options are applied to the next specified file. Therefore, order is important...

2
27.01.2020, 19:43

Теги

Похожие вопросы