ffmpeg видео

Содержание статьи:


Обрезать видео в ffmpeg

ffmpeg -ss 01:10:35 -i video.mp4 -c copy -t 00:15:10 output.mp4

Эта команда вырежет отрезок из video.mp4 начиная с 01:10:35 длительностью 15 минут 10 секунд и сохранит его в файл output.mp4

Нарезать видео на ролики одинаковой длины

ffmpeg -i video.mp4 -c copy -map 0 -segment_time 15 -reset_timestamps 1 -f segment output_%05d.mp4

Нарезаем video.mp4 на ролики длительностью 15 секунд.

Склеить видео

ffmpeg -i video1.mov -i video2.webm -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mkv

Объединяем два видео разных форматов с перекодировкой - это процесс небыстрый.

ffmpeg -i video1.mov -i video2.mp4 -i video3.webm -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4

Объединяем три видео разных форматов с перекодировкой. Далее по аналогии.

Если у наших видео одинаковый формат, то можно сильно ускорить процесс и не потерять в качестве - объединить видео без перекодирования.
Если у нас видео в формате mp4 или в чем-то похожем, то для начала предварительно преобразуем видео в формат .ts

ffmpeg -i video1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp1.ts
ffmpeg -i video2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp2.ts

И затем склеиваем эти видео без перекодировки

ffmpeg -i "concat:tmp1.ts|tmp2.ts" -vcodec copy -acodec copy output.mp4


Если у нас видео в форматах .m2ts или .mts, то сначала их необходимо перевести в формат .mkv

ffmpeg -i video1.mts -acodec copy -vcodec copy -sn video1.mkv
ffmpeg -i video2.mts -acodec copy -vcodec copy -sn video2.mkv

И затем склеить без перекодировки

mkvmerge -o output.mkv video1.mkv + video2.mkv


Если хотим вставить другую аудиодорожку, то сначала убираем прежнюю,

ffmpeg -i video.mp4 -c copy -an deaf.mp4

обрезаем новую аудиодорожку до длины ролика,

ffmpeg -i long-sound.mp3 -ss 00:00:00 -t 00:05:13 -acodec copy sound.mp3

добавляем к видео звук

ffmpeg -i deaf.mp4 -i sound.mp3 -vcodec copy output.mp4


Захват видео

Запись в видео файл того, что происходит на рабочем столе

ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 output.mp4

где 1024x768 - размер записываемой области,
25 - количество кадров в секунду,
100,200 - отступ в пикселях от левого верхнего угла экрана.
Для окончания записи видео переходим в окно терминала и нажимаем Ctrl+C

Видео из картинок

Кладем необходимое количество изображений в директорию и называем их image001.png, image002.png, image003.png и т.д., затем выполняем команду

ffmpeg -framerate 1/5 -i image%03d.png -c:v libx264 -r 25 -pix_fmt yuv420p output.mp4

где -framerate 1/5 время в секундах, которое будет показываться каждая картинка,
-r 25 - количество кадров в секунду в получившемся видео.
Разрешение видео будет равно разрешению первого изображения в серии.
Если видео надо создать из картинок в формате .jpg, а не .png, то в директорию кладем image001.jpg и т.д. и в команде image%03d.png меняем на image%03d.jpg
Если необходимо видео более чем из 999 картинок, то необходимо называть изображения image0001.png и т.д. и в команде image%03d.png заменить на image%04d.png

Видео с плавным переходом из image001.png в image002.png

ffmpeg -loop 1 -i image001.png -loop 1 -i image002.png -filter_complex "[0:0]format=rgba,trim=duration=10,fade=in:st=0:d=1:alpha=1,fade=out:st=4:d=1:alpha=1[a];[1:0]format=rgba,trim=duration=10,fade=in:st=5:d=1:alpha=1,fade=out:st=9:d=1:alpha=1[b];[a][b]overlay=[out1]" -map [out1] -qscale 25 output.mp4


Видео из одного изображения длительностью 10 секунд

ffmpeg -loop 1 -i image0001.png -c:v libx264 -t 10 -pix_fmt yuv420p output.mp4


Пережать webm в mp4

ffmpeg -i video.webm video.mp4


То же самое, но используя пресеты: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower and veryslow.

ffmpeg -i video.webm -preset veryfast video.mp4

Где ultrafast самое быстрое и наименее качественное сжатие, а veryslow - наоборот. Как показывает практика, разницы в качестве видео между slow и veryslow практически нет, а разница во времени сжатия очень ощутимая.

То же самое, но с указанием crf

ffmpeg -i video.webm -crf 26 video.mp4

Значение crf может находиться в диапазоне от 0 до 51, где 51 - самое плохой качество видео. Если crf не указывать явно, то его значение будет равно 23.


Пережать mp4 в webm

ffmpeg -i video.mp4 -b:v 6203.788829380261k -crf 40 -aq-mode 1 -threads 4 -f webm output.webm

Где -threads 4 указывает, что процесс сжатия надо проводить в 4 потока. Количество потоков лучше устанавливать равным количеству физических ядер вашего процессора.

Обрезать видео

ffmpeg -i video.mp4 -vf crop=1280:720 -b:v 3000K output.mp4

Обрезаем до размера 1280x720 пикселей и сжимаем с битрейтом 3000 килобайт в секунду.

Если мы хотим вырезать не середину видео, а с некоторым смещением, то меняем команду до следующего вида

ffmpeg -i video.mp4 -vf crop=1280:720:200:100 -b:v 3000K output.mp4

в данном случае мы указали отступить 200 пикселей от левого края и 100 пикселей - от верхнего.

Повернуть видео

Повернуть видео можно двумя способами. Первый способ - изменение метаданных видео (перекодировки не происходит), но плейер должен поддерживать этот способ.

ffmpeg -i input.mp4 -metadata:s:v rotate="90" -codec copy output.mp4

Второй способ - с перекодировкой видео - подходит для всех видеоплейеров.

ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

Значения transpose:
0 - на 90 градусов против часовой стрелки и вертикальное отзеркаливание
1 - на 90 градусов по часовой стрелке
2 - на 90 градусов против часовой стрелки
3 - на 90 градусов по часовой стрелке и вертикальное отзеркаливание

Для вращения видео на 180 градусов -vf "transpose=2,transpose=2"

Уменьшить частоту кадров

ffmpeg -y -i video.mp4 -r 25

Где -r 25 указывает, что частота кадров в секунду будет урезана до 25.
Если мы не указываем в конце команды название итогового файла, то будет перезаписан исходный файл.
Ключ -y указывает на то, что существующие файлы надо перезаписывать без подтверждения.


Устранение чересстрочности - "гребенки"

ffmpeg -i video.avi -vf w3fdif -c:v libx264 -preset slow -crf 12 -pix_fmt yuv420p -c:a aac -b:a 320k output.mp4

Где -vf w3fdif указывает алгоритм устранения чересстрочности. Всего существует четыре алгоритма: w3fdif bwdif kerndeint yadif.

Стабилизация видео

ffmpeg -i video.mp4 -vf deshake output.mp4

В новых версиях ffmpeg появился более продвинутый алгоритм стабилизации - vidstabtransform, только вот далеко не у всех установлена свежая версия ffmpeg.

Картинки из видео

ffmpeg -ss 00:00:28 -i video.mp4 -t 10 -q:v 2 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 0 image%03d.jpg

Сохранить из видео все ключевые кадры, начиная с 28-ой секунды и в течение 10 секунд.

Посмотреть информацию о ролике

ffmpeg -i video.mp4


Сжать видео

ffmpeg -i video.mp4 -c:v libx264 -preset slow -crf 18 -c:a copy out.mp4


Воспроизвести видео

ffplay video.mp4

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *