-pattern_type glob
Цей чудовий варіант полегшує вибір зображень у багатьох випадках.
Показ слайд-шоу з одним зображенням в секунду
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Додайте до нього музику, зрізану, коли імовірно довший звук, коли зображення закінчуються:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Ось дві демонстрації на YouTube:
Будьте хіпі і використовуйте формат відео, не обмеженого патентом Theora :
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
Зображення слід, звичайно, сортувати за алфавітом, як правило:
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
і так далі.
Я також спочатку переконаюся, що всі використовувані зображення мають однакове співвідношення сторін, можливо, попередньо обрізавши їх imagemagick
або номаки , так що ffmpeg не доведеться приймати важкі рішення. Зокрема, ширина повинна ділитися на 2, інакше перетворення не вдається: "ширина не ділиться на 2".
Відео із звичайною швидкістю з одним зображенням на кадр при 30 кадрів в секунду
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-c:v libx264 -pix_fmt yuv420p out.mp4
Ось як це виглядає:
GIF, створений за допомогою: /ubuntu/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Додайте до нього звук:
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
Результат: https://www.youtube.com/watch?v=HG7c7lldhM4
Це тестовий носій, який я використав: a
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
Зображення, згенеровані за допомогою: Як використовувати GLUT / OpenGL для візуалізації у файл?
Приємно спостерігати, наскільки відео стискає послідовність зображень краще, ніж ZIP, оскільки воно здатне стискати через кадри спеціалізованими алгоритмами:
opengl-rotating-triangle.mp4
: 340К
opengl-rotating-triangle.zip
: 7,3М
Перетворіть один музичний файл у відео з фіксованим зображенням для завантаження на YouTube
Відповів за адресою: /superuser/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572
Повна реалістична настройка тематичного слайд-шоу крок за кроком
Для створення слайд-шоу є трохи більше, ніж виконання однієї команди ffmpeg, тому тут подається більш цікавий докладний приклад, натхненний цією шкалою .
Отримайте вхідний носій:
mkdir -p orig
cd orig
wget -O 1.png https://upload.wikimedia.org/wikipedia/commons/2/22/Australopithecus_afarensis.png
wget -O 2.jpg https://upload.wikimedia.org/wikipedia/commons/6/61/Homo_habilis-2.JPG
wget -O 3.jpg https://upload.wikimedia.org/wikipedia/commons/c/cb/Homo_erectus_new.JPG
wget -O 4.png https://upload.wikimedia.org/wikipedia/commons/1/1f/Homo_heidelbergensis_-_forensic_facial_reconstruction-crop.png
wget -O 5.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Sabaa_Nissan_Militiaman.jpg/450px-Sabaa_Nissan_Militiaman.jpg
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
cd ..
# Convert all to PNG for consistency.
# /unix/29869/converting-multiple-image-files-from-jpeg-to-pdf-format
# Hardlink the ones that are already PNG.
mkdir -p png
mogrify -format png -path png orig/*.jpg
ln -P orig/*.png png
Тепер ми швидко ознайомимось із усіма розмірами зображення, щоб визначитись із кінцевим співвідношенням сторін:
identify png/*
який виводить:
png/1.png PNG 557x495 557x495+0+0 8-bit sRGB 653KB 0.000u 0:00.000
png/2.png PNG 664x800 664x800+0+0 8-bit sRGB 853KB 0.000u 0:00.000
png/3.png PNG 544x680 544x680+0+0 8-bit sRGB 442KB 0.000u 0:00.000
png/4.png PNG 207x238 207x238+0+0 8-bit sRGB 76.8KB 0.000u 0:00.000
png/5.png PNG 450x600 450x600+0+0 8-bit sRGB 627KB 0.000u 0:00.000
тому класичне співвідношення сторін 480p (640x480 == 4/3) здається відповідним.
Зробіть одну конверсію з мінімальними розмірами, щоб зробити ширину рівномірною (TODO автоматизується для будь-якої ширини, тут я просто вручну подивився на identify
вихід та зменшив ширину та висоту на одну):
mkdir -p raw
convert png/1.png -resize 556x494 raw/1.png
ln -P png/2.png png/3.png png/4.png png/5.png raw
ffmpeg -framerate 1 -pattern_type glob -i 'raw/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p raw.mp4
Це дає жахливий вихід, тому що, як видно з:
ffprobe raw.mp4
ffmpeg просто приймає розмір першого зображення, 556x494, а потім перетворює всі інші на той самий розмір, порушуючи їх співвідношення сторін.
Тепер давайте перетворимо зображення в цільове співвідношення сторін 480p автоматично, обрізаючи відповідно до ImageMagick: як мінімально обрізати зображення до певного співвідношення сторін?
mkdir -p auto
mogrify -path auto -geometry 640x480^ -gravity center -crop 640x480+0+0 png/*.png
ffmpeg -framerate 1 -pattern_type glob -i 'auto/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p auto.mp4
Тож тепер співвідношення сторін добре, але неминуче потрібно було зробити обрізку, яка нарізала цікаві частини зображень.
Інший варіант - накладка з чорним фоном, щоб мати таке ж співвідношення сторін, як показано на: Змініть розмір, щоб розмістити у полі і встановити фон чорним на "порожній" частині
mkdir -p black
ffmpeg -framerate 1 -pattern_type glob -i 'black/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p black.mp4
Взагалі кажучи, ви в ідеалі зможете вибрати зображення з однаковими або подібними співвідношеннями сторін, щоб уникнути цих проблем в першу чергу.
Про параметри CLI
Зауважте, що, незважаючи на назву, -glob
це не так загально, як оболонки Glob patters, наприклад: -i '*'
fails: https://trac.ffmpeg.org/ticket/3620 (мабуть, тому, що тип файлу виводиться з розширення).
-r 30
робить -framerate 1
відео 30 FPS для подолання помилок у програвачах, таких як VLC для низьких кадрів: VLC заморожується для низького 1 FPS відео, створеного із зображень з ffmpeg. Тому він повторює кожен кадр 30 разів, щоб зберегти бажаний ефект 1 зображення в секунду.
Наступні кроки
Ви також хочете:
TODO: навчіться вирізати та об'єднати кілька аудіофайлів у відео без проміжних файлів, я впевнений, що це можливо:
Випробуваний на
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Бібліографія