Skip to content
FFMPEG
Утилита для обработки мультимедийного контента, такого как аудио, видео, субтитры и связанные с ними метаданные.
Разработчик
FFMPEG Community
Лицензия
LGPL v2.1+
Сайт проекта
ffmpeg.org
Сообщить о проблеме
trac.ffmpeg.org

FFMPEG

FFmpeg — утилита для Linux, для обработки мультимедийного контента, такого как аудио, видео, субтитры и связанные с ними метаданные.

Установка из репозитория

FFmpeg можно установить через терминал:

shell
su -
apt-get update
apt-get install ffmpeg
shell
epm -i ffpmeg

Получите информацию о медиафайле

Отображение информации о медиафайле, введите:

shell
ffmpeg -i file_name

Получить информацию можно, как для аудио, так и для видео файлов:

shell
ffmpeg -i video_file.mp4
ffmpeg -i audio_file.mp3

Для получения краткой информации, воспользуйтесь -hide_banner, введите:

shell
ffmpeg -i video_file.mp4 -hide_banner
ffmpeg -i audio_file.mp3 -hide_banner

Конвертируйте медиафайлы

Конвертируйте различные мультимедийными форматами. Вам нужно только указать входные и выходные файлы, поскольку ffmpeg получит требуемый формат из расширений файлов. Это работает для преобразования видео в видео и аудио в аудио.

Примеры:

shell
ffmpeg -i "video_input.mp4" "video_output.avi"
ffmpeg -i "video_input.webm" "video_output.flv"
ffmpeg -i "audio_input.mp3" "audio_output.ogg"
ffmpeg -i "audio_input.wav" "audio_output.flac"

Ознакомится со всем списком всех поддерживаемых форматов, используйте:

shell
ffmpeg -formats

Измените разрешение видео или соотношение сторон

Еще одна простая задача для ffmpeg. Все, что вам нужно сделать, чтобы изменить размер видео, - это указать новое разрешение после флага `-s``:

shell
ffmpeg -i "Файл.avi" -s 1024x576 "Файл.mp4"

Обрезка видео без перекодирования

К примеру первые 45 минут вырезать из видео:

shell
ffmpeg -i "Видео.mkv" -ss 00:45:00 -c copy "Видео2.mkv"

Обрезать видео с определенного времени до определенного времени:

shell
ffmpeg -i "Видео.mkv" -ss 00:45:00 -to 1:55:00 -c copy "Видео2.mkv"

Сохранение оригинальности качества контента при кодировании.

Укажите параметр -qscale 0 перед выходным файлом, чтобы сохранить качество видеофайла:

shell
ffmpeg -hide_banner -i "Файл.avi" -qscale 0 "Файл.mp4"

Подсказка

Опция -qscale 0 стремится к сохранению качества не только видео но так же и аудио дорожки.

В данном примере приведён аналог опции -qscale 0 в котором мы извлекаем битрейт с помощью которого пытаемся сохранить оригинальность качества контента:

shell
bitrate=$(ffmpeg -hide_banner -i "Файл.avi" 2>&1 | grep -oP 'bitrate: \K[0-9]+');
ffmpeg -hide_banner -i "Файл.avi" -c:v libx264 -b:v ${bitrate}k -c:a copy "/путь/куда/сохранить/Файл.mkv"

Подсказка

Обратите внимание что нужно указать нужный файл для кодирования в первой и второй строчке.

Индентичная процедура, но для всех файлов в каталоге:

shell
for i in *.mp4; do ffmpeg -hide_banner -i "$i" -qscale 0 "/путь/к/каталогу/${i%.*}.mkv"; done

В данной команде мы используем кодек x264 для кодирования:

shell
for i in *.mkv; do
  bitrate=$(ffmpeg -hide_banner -i "$i" 2>&1 | grep -oP 'bitrate: \K[0-9]+')
  ffmpeg -hide_banner -i "$i" -map 0:v:0 -map 0:a:0 -c:v libx264 -b:v ${bitrate}k -c:a copy "/путь/к/существующей/директории/где/сохранить/итоговые/файлы/${i%.*}.mkv";
done

Информация

Использовать аппаратное ускорение видеокарты. Отредактируйте строчку -c:v libx264 NVIDIA NVENC -c:v h264_nvenc AMD AMF -c:v h264_amf Intel Quick Sync Video -c:v h264_qsv

Подсказка

Тут указываем что в данном каталоге мы берём для кодирования все файлы с нужным расширением: for i in *.mkv;for i in *.avi;for i in *.mp4; И так далее Так же можно указать без расширения что по итогу затроен абсолютно все файлы в каталоге не зависимо от их расширения for i in *;

Изменение структуры контейнера видео-файла без изменения качества видео

Допустим у нас есть видео файл с 5 аудио дорожками и многочисленным количеством субтитров, а нам необходимо видео конкретно с первой аудио дорожкой и вторыми по порядку субтитрами. -map 0:v:0 тут выделяем первую видео дорожку. -map 0:a:0 тут указываем что нужна только первая аудио-дорожка. -map 0:s:1 тут указываем что нужны только вторые по порядку субтитры:

Подсказка

Порядок начинается не с 1 а с 0, будьте внимательны

shell
ffmpeg -hide_banner -i "файл.mkv" -map 0:v:0 -map 0:a:0 -map 0:s:1 -c:v copy -c:a copy -c:s copy "/путь/к/файлу/куда/сохранить/файл.mkv"

Изменить формат звуквой дорожки не затрагивая видео кодек. Возьмём предыдущию команду в качестве примера.

shell
ffmpeg -hide_banner -i "файл.mkv" -map 0:v:0 -map 0:a:0 -map 0:s:1 -c:v copy -c:a ac3 -c:s copy "/путь/к/файлу/куда/сохранить/файл.mkv"

Обьеденяет видео без перекодирования с расширением .mkv (текущий каталог) аудио с расширением .mka и субтитры с расширением .ass с одинаковыми названиями. Так же сохраняется оригинальность названия и расширения видео-файлов.

Предположим что у вас есть сериал в котором находятся серии и два каталога с нужным аудио-переводом и субтитрами. (Все изначальные расширения в команде вы можете изменить под свои):

shell
for i in *.mkv;
do
  ffmpeg -hide_banner -i "$i" -i "/Путь/к/аудио/файлам/${i%.*}.mka" -i "/Путь/к/субтитрам/${i%.*}.ass" -map 0:v:0 -map 1:a -map 2:s -c:v copy -c:a copy -c:s copy "/Путь/куда/сохранить/${i}";
done

Подсказка

Справка по сокращению опций -c:v copy -c:a copy -c:s copy Вы можете сократить написание этих опций на одну -c copy которая обьеденяет все три опции. Но учтите если вы хотите сделать к примеру видео без субтитров вам следует прописать нужные опции -c:v copy -c:a copy и не прописывать -c:s copy

Информация

Справка по обозначению опций -map 0:v:0 -map 0:a:0 -map 0:s:0

shell
Изменять -map 0:v:0 не рекомендуется так как видео файлы могут содержать в себе определённые обложки и программа за основу может взять не само видео а обложку (картинку)
Изменяя -map 0:a:0 мы выбираем какую аудио дорожку скопировать (-map 0:a:0 первая по порядку, -map 0:a:1 вторая, -map 0:a:2 третья и так далее)
Изменяя -map 0:s:0 принцип схож с аудио дорожками (-map 0:s:0 первая по порядку, -map 0:s:1 вторая, -map 0:s:2 третья и так далее)

Вывод названия аудио кодека, количество каналов аудио, язык и название аудио дорожки.

shell
for file in *; do
  echo "Файл: $file"
  ffprobe -v error -select_streams a -show_entries stream=codec_name,channels,tags:stream_tags=language,title -of csv=p=0 "$file"
done

Информация

Общая информация к каждой из команд. Вы можете указать название файлов без путей к ним но тогда вам нужно в терминале перейти в каталог где лежит изначальный файл. Так же можно указать полные пути к примеру ffmpeg -i "/путь/к/файлу/видео.mp4" "/путь/куда/сохранить/видео2.avi"

Работа с GIF

Конвертировать видео с расширением .mp4 в GIF

ffmpeg -i "файл.mp4" "файл.gif"

Конвертируем .mp4 видео с FPS 3 кадра и масштабированием 320 по ширине (по высоте само подстроится):

shell
ffmpeg -i "видео.mp4" -vf "fps=3,scale=320:-1:flags=lanczos" "гифка.gif"

Делаем анимацию GIF в 2 раза медленеее. Редактируя опцию setpts=PTS*2 мы настраиваем скорость анимации:

shell
ffmpeg -i "гиф.gif" -filter_complex "setpts=PTS*2" "гифка.gif"

Разбиение GIF на отдельные кадры:

shell
ffmpeg -i "гиф.gif" "гифка_%04d.png"

Разбиение GIF на отдельные кадры но самостоятельно регулируем количеством редактируя значение fps=10:

shell
ffmpeg -i "гиф.gif" -vf "fps=10" "гифка_%04d.png"

Обьеденяем изображения в GIF но необходимо их переименовать и пронумеровать чтобы это выглядело так: гифка_0001.png гифка_0002.png гифка_0003.png и так далее:

shell
ffmpeg -i "гифка_%04d.png" -vf "fps=10" "гиф.gif"

Добавление текста внизу по центру:

shell
ffmpeg -i гиф.gif -vf "drawtext=text='ALT Gnome Wiki':x=(w-text_w)/2:y=main_h-text_h-10:fontsize=24:fontcolor=white" текст.gif

Как загрузить короткое видео без звука в Telegram чтобы оно сохранилось как видео а не конвертировалось в GIF:

shell
ffmpeg -i "файл.mp4" -f lavfi -i anullsrc -c:v copy -c:a aac -shortest "файл2.mp4"

Авторы

The avatar of contributor named as konoos56 konoos56
The avatar of contributor named as Олег Щавелев Олег Щавелев
The avatar of contributor named as Кирилл Уницаев Кирилл Уницаев
The avatar of contributor named as Антон Политов Антон Политов
The avatar of contributor named as Давид Султаниязов Давид Султаниязов
The avatar of contributor named as Жора Змейкин Жора Змейкин
The avatar of contributor named as h3try h3try
The avatar of contributor named as Семен Фомченков Семен Фомченков

История изменений