Всякая всячина

Модератор: t800

Полезные команды для FFmpeg

Сообщение t800 » 02 авг 2021, 22:56

Склейка видео

ffmpeg -i "concat:file1.avi|file2.avi" -vcodec copy -acodec copy output.avi

Для склейки используется оператор concat. После двоеточия ему передаются входные файлы, разделённые вертикальной чертой. Соединяемые файлы обязательно должны быть одного формата (видео и аудио), их параметры должны совпадать. Если это не так, то предварительно нужно произвести перекодирование файлов к единому формату.

Файлы mp4 нельзя объединить напрямую с помощью concat, но можно предварительно преобразовать, например, MPEG-TS без перекодирования видео и звука.

ffmpeg -i video1.mp4 -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts video1.ts
ffmpeg -i video2.mp4 -acodec copy -vcodec copy -vbsf h264_mp4toannexb -f mpegts video2.ts

А уже затем объединить в итоговый файл mp4.

ffmpeg -i "concat:video1.ts|video2.ts" -vcodec copy -acodec copy out.mp4

Важно учесть, что, если в одном из фрагментов звуковая дорожка короче по времени чем видеопоток, то звуковые дорожки остальных фрагментов сдвинутся и произойдёт рассинхронизация звука.

Когда входных файлов много, возможно окажется удобным не писать их все в консоль, а создать текстовый файл, как в примере ниже, который затем передать в FFmpeg.

file /home/sk/myvideos/part1.mp4
file /home/sk/myvideos/part2.mp4
file /home/sk/myvideos/part3.mp4
file /home/sk/myvideos/part4.mp4

Команда для объединения будет выглядеть следующим образом.

ffmpeg -f concat -i join.txt -c copy output.mp4

Если получите ошибку.

[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4'
join.txt: Operation not permitted

Попробуйте добавить опцию -safe 0.

ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4

Соотношение сторон

Соотношение сторон устанавливаются опцией -aspect.

ffmpeg -i input.mp4 -aspect 16:9 output.mp4

Еще пример.

ffmpeg -i input.mp4 -aspect 16:9 -vf scale=1280:720 output.mp4

Самые популярные соотношения сторон:

16:9
4:3
16:10
5:4
2:21:1
2:35:1
2:39:1

Конвертация аудиодорожек

Если аудиодорожка одна, изменить ее формат (битрейт/качество аудио по желанию), без перекодирования видео можно следующей командой:

ffmpeg -i input.mkv -c:v copy -c:a ac3 -b:a 320k output.mkv

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

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v:0 copy -c:a:0 copy -c:a:1 copy -c:a:2 ac3 -b:a 320k output.mkv

Пояснение: в примере -map 0:0 это видеодорожка, к ней будет применена опция -c:v:0 copy, что означает, что видео не будет перекодироваться. -map 0:1 -map 0:2 -map 0:3 это 3 аудиодорожки. К первым двум будут применены -c:a:0 copy -c:a:1 copy, что означает, что дорожки останутся в оригинальном формате. А к 3 дорожке будет применена опция -c:a:2 ac3 -b:a 320k, что означает, что она будет сконвертирована в формат AC3 с битрейтом 320k.

Если какие-то дорожки не нужны, просто не указывайте к ним обращение. Например, чтобы убрать аужиодорожки с 4 по 6 из 7 доступных, воспользуйтесь примером ниже.

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:2 -map 0:3 -map 0:7 -c:v:0 copy -c:a:0 ac3 -c:a:1 ac3 -b:a 320k -c:a:2 ac3 -b:a 320k -c:a:3 ac3 -b:a 320k -c:a:7 ac3 -b:a 320k output.mkv

Добавление, извлечение и удаление и аудио

Чтобы добавить звуковую дорожку в видеофайл используйте опцию -i, в которой укажите путь к аудиофайлу.

ffmpeg -i noaudio.mpg -i audio.acc -vcodec copy -acodec copy output.mpg

Удалить из видеофайла звуковую дорожку можно с помощью опции -an (audio not).

ffmpeg -i input.mpg -vcodec copy -an noaudio.mpg

Сохранить аудиодорожку из видеофайла.

ffmpeg -i input.mpg audio.wav

Если требуется сохранить дорожку в определенный формат, укажите параметры явно, как в примере ниже.

ffmpeg -i input.avi -vn -ar 44100 -ac 2 -ab 192K -f mp3 audio.mp3

Опция -ar указывает частоту дискретизации, -ac — количество каналов, -ab — битрейт.

Опция -vn означает, что видео информация будет отброшена, а опция -f указывает формат полученного файла (в примере — это mp3). В новых версиях FFmpeg эти две опции можно не указывать, FFmpeg разберется сам.

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

ffmpeg -i input.avi -map 0:2 audio.wav

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

ffmpeg -i video.avi -i audio1.mp3 -i audio2.mp3 -map 0:0 -map 0:1 -map 0:2 output.mkv

Так как в примере выше только один выходной файл, 0 перед двоеточием можно опустить.

ffmpeg -i video.avi -i audio1.mp3 -i audio2.mp3 -map 0 -map 1 -map 2 output.mkv

Изменение громкости

Для изменения громкости в FFmpeg существует аудиофильтр volume.

Следующая команда в половину уменьшит громкость.

$ ffmpeg -i input.mp3 -af 'volume=0.5' output.mp3

Аналогично, громкость можно увеличить (в примере ниже в полтора раза).

$ ffmpeg -i input.mp4 -c:v copy -af 'volume=1.5' output.mp4

Добавление субтитров

Ниже приведен пример добавления субтитров для файла формата MKV.

ffmpeg -i input.mp4 -i subtitles.srt -c copy -c:s copy output.mkv

В примере, к исходному видеофайлу video.mp4 будут добавлены субтитры из файла subtitles.srt. Опция -c copy означает, что видео и аудио потоки из video.mp4 будут скопированы как есть (без пересжатия), опция -c:s copy, означает, что титры будут вставлены без изменений.

Если нужно вставить несколько дорожек субтитров команда может выглядеть так.

ffmpeg -i input.mp4 -i ru_subtitles.srt -i en_subtitles.srt -map 0:0 -map 1:0 -map 2:0 -c:v copy -c:a copy -c:s copy output.mkv

Формат MKV, может использовать субтитры форматов srt, subrip, ssa или ass, за исключением mov_text.

ffmpeg -i input.mp4 -i subtitles.ass -map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy -c:s copy output.mkv

В свою очередь MP4 поддерживает только один формат субтитров — mov_text. Прочие форматы можно использовать в качестве исходных, но обязательно укажите кодек для субтитров, чтобы на выходе сконвертировать их в mov_text (-c:s mov_text).

ffmpeg -i input.mp4 -i subtitles.srt -c copy -c:s mov_text output.mp4

Пример для нескольких потоков субтитров.

ffmpeg -i input.mp4 -i ru_subtitles.srt -i en_subtitles.srt -map 0:0 -map 1:0 -map 2:0 -c copy -c:s mov_text output.mp4

FFmpeg умеет конвертировать субтитры из одного формата в другой.

ffmpeg -i subtitles.srt subtitles.ass

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

ffmpeg -i input.avi -txt_format text output.srt

А если необходимо удалить субтитры используйте опцию -sn.

ffmpeg -i input.mkv -c copy -sn output.mkv

Разбить видео на кадры

Следующая команда разобьет видео на кадры с именами image1.jpg, image2.jpg, image3.jpg и т.д.

ffmpeg -i video.mp4 image%d.jpg

В некоторых случаях, рекомендуют явно указывать выходной формат, опция -f image2 для изображений. В качестве конечного формата можно использовать jpg, jpeg, png и другие.

ffmpeg -i video.mp4 -f image2 image%d.jpg

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

ffmpeg -i video.mp4 -r 1 image%d.png

Собрать видео из изображений

Операция обратная предыдущей. В некоторых случаях, рекомендуют явно указывать входной формат (опция -f image2 для изображений).

ffmpeg -r 12 -f image2 -i image%d.jpg output.mpg

Преобразовать видео в GIF

Чтобы сконвертировать видео в гифку (без сжатия).

ffmpeg -i input.avi output.gif

Флеш-ролики тоже можно конвертировать.

ffmpeg -i input.flv output.gif

Оптимизация для WEB

Для потоковой передачи видео, может оказаться полезным перенести moov-атомы в начало файла. Это позволит при передачи по сети декодировать видео частями, и начать показ ролика, не заставляя пользователя ждать, пока он скачается целиком.

ffmpeg -i input.avi -c:v libx264 -c:a aac -movflags +faststart output.mp4

Обрезка видео

ffmpeg -i input.mp4 -ss 00:00:05 -t 00:05:15 -c copy output.mp4

Опция -ss задаёт начало обрезки, а опция -t продолжительность фрагмента. Время задаётся в формате «часы:минуты:секунды».

Конвертация видео

При конвертации видео контейнер выходного файла определяется его расширением (avi, mkv, mp4, mov и тд). По умолчанию кодек для кодирования, определяется автоматически, в зависимости от выбранного контейнера (например H.264 для mp4 и mkv, MPEG-2 для mpg). Однако вы можете изменить его, исходя из своих требований или стандартов.

Для видео популярные и широко поддерживаемые видеокодеки H.264, H.265, VP9, а самые известные аудио кодеки — это AAC и MP3.

Кодек и его параметры задаются опциями -c:v для видео, и -c:a для аудио. Для некоторых форматов (MPEG и DV) вместо указанных, используется опция -target.

Пример использования libx265 для видео и aac для аудио.

ffmpeg -i input.avi -c:v libx265 -c:a aac -b:v 15000k -b:a 320k output.mp4

Пример использования libx264 для видео и aac для аудио.

ffmpeg -i input.avi -c:v libx264 -c:a aac -b:v 15000k -b:a 320k output.mp4

Пример использования vp9 для видео и mp3 для аудио.

ffmpeg -i input.avi -c:v vp9 -c:a libmp3lame -b:v 7000k -b:a 256k output.mp4

Вслед за кодеком указывается битрейт для видео и аудио потоков (опции -b:v и -b:a). Чем выше битрейт, тем выше качество, однако и больше размер файла.

Вместо битрейта можно указать опцию -crf (кофициент качества).

ffmpeg -i input.avi -c:v libx264 -preset medium -c:a aac -crf 15 output.mp4

Изменяется в пределах от 0 до 51. Чем ниже значение -crf, тем выше качество будет у выходного файла, однако, как и в случае с высоким битрейтом, увеличится его размер. При значениях 14-17 результат визуально почти неотличим от оригинала. Значение -crf равное 0, будет означать кодирование без потери качества.

Изменение разрешения и кадрирование

Чтобы изменить разрешение конечного видео можно воспользоваться опцией -s.

ffmpeg -i input.mp4 -s 1280x720 output.mp4

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

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

Для кадрирования изображения предназначен фильтр crop. Его параметры имеют следующий вид crop=w:h:x:y, где w — ширина прямоугольника, который нужно вырезать из исходного видео, h — высота прямоугольника, x и y — x координаты точки начала обрезки.

$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4

Команда выше вырежет из кадра прямоугольник шириной 640 и высотой 480 пикселей, начиная с позиции (200,150).

Но мне привычна, другая запись.

ffmpeg -i input.mp4 -vf crop=in_w-2*2:in_h-2*4 output.mp4

В данном примере видео будет обрезано на 4 пикселя сверху и снизу, а так же на 2 пикселя слева и справа.

Фильтры можно комбинировать.

ffmpeg -i input.mp4 -vf crop=in_w-2*2:in_h-2*4,scale=1280:720 output.mp4
Справочник и Форум Green Dragon
T-800 MOD для Heroes of Might and Magic 2

Основатель клуба "Армагеддон"

Основатель клуба "Пещера Гремлинов"

ИзображениеИзображение
Аватара пользователя
t800
Experienced
Experienced
 
Сообщения: 849
Зарегистрирован: 19 окт 2015, 14:52
Откуда: Казахстан, Алматинская область
Благодарил (а): 172 раз.
Поблагодарили: 136 раз.

Re: Всякая всячина

Сообщение t800 » 20 авг 2021, 23:32

Справочник и Форум Green Dragon
T-800 MOD для Heroes of Might and Magic 2

Основатель клуба "Армагеддон"

Основатель клуба "Пещера Гремлинов"

ИзображениеИзображение
Аватара пользователя
t800
Experienced
Experienced
 
Сообщения: 849
Зарегистрирован: 19 окт 2015, 14:52
Откуда: Казахстан, Алматинская область
Благодарил (а): 172 раз.
Поблагодарили: 136 раз.

Re: Всякая всячина

Сообщение t800 » 08 сен 2022, 07:47

Как установить SSL сертификат на сервер с Ubuntu 14.04 в 2022 году.

Задача как оказалось не тривиальная ибо то что можно поставить из доступных пакетов работает только для Ubuntu 16, cборка же исходников доступных с github приводит к ошибкам окружения python 2.7 так как cerbot версии >= 0.40 требуется Python 3.5 и выше.

Соотвественно, как поставить сerbot на Ubuntu 14.04 cerbot v.0.30 в 2022 году.

Код: Выделить всё
sudo apt update


Код: Выделить всё
sudo apt install snapd


Затем удаляем старые версии cerbot (если мы их ставили)

Код: Выделить всё
sudo rm -rf /usr/local/sbin/certbot-auto


Затем используем snap чтобы установить сerbot

Код: Выделить всё
sudo snap install --classic certbot


Создаем символ линк на сerbot из snap

Код: Выделить всё
sudo ln -s /snap/bin/certbot /usr/bin/certbot


Затем, ставим SSL сертификаты для нашего сайта как обычно

Код: Выделить всё
sudo certbot --apache -d my-site.com -d www.my-site.com


Код: Выделить всё
sudo certbot renew --dry-run


Примечание: Возможно еще понадобится в cron расписание обновлений сертификатов добавить, что так же делается стандарно и пример ранее в теме тоже есть
Справочник и Форум Green Dragon
T-800 MOD для Heroes of Might and Magic 2

Основатель клуба "Армагеддон"

Основатель клуба "Пещера Гремлинов"

ИзображениеИзображение
Аватара пользователя
t800
Experienced
Experienced
 
Сообщения: 849
Зарегистрирован: 19 окт 2015, 14:52
Откуда: Казахстан, Алматинская область
Благодарил (а): 172 раз.
Поблагодарили: 136 раз.

Скрипт ChangeIP

Сообщение t800 » 29 ноя 2022, 03:08

Скрипт, позволяющий в один клик (точнее, в одну команду в терминале) сменить IP-адрес компьютера:

Код: Выделить всё
#!/usr/bin/env bash
echo 'Скрипт изменения IP'
echo ' '
echo 'Время работы 30 секунд'
echo ' '
echo 'ВАЖНО! Необходимо дождаться завершения скрипта'

sleep 1
echo 'Даем команду на отключение внешнего интернета'
curl -u admin:admin  -X POST "http://192.168.1.1/wancfg.cmd?action=view"  --data "linkCtrl=0&vpi=0&vci=40&conId=1"
echo 'Ждем 10 секунд'
sleep 10
echo 'Даем команду на подключение внешнего интернета'
curl -u admin:admin  -X POST "http://192.168.1.1/wancfg.cmd?action=view"  --data "linkCtrl=1&vpi=0&vci=40&conId=1"
echo 'Ждем 20 секунд'
sleep 20
echo 'Завешаем работу скрипта'
sleep 1
exit 0


сохранить код в changeip.sh и запускать

Код: Выделить всё
./changeip.sh
Справочник и Форум Green Dragon
T-800 MOD для Heroes of Might and Magic 2

Основатель клуба "Армагеддон"

Основатель клуба "Пещера Гремлинов"

ИзображениеИзображение
Аватара пользователя
t800
Experienced
Experienced
 
Сообщения: 849
Зарегистрирован: 19 окт 2015, 14:52
Откуда: Казахстан, Алматинская область
Благодарил (а): 172 раз.
Поблагодарили: 136 раз.

FFmpeg команда для TM-130

Сообщение t800 » 06 дек 2022, 20:41

Команда для FFmpeg чтобы конвертировать видео для телефона TeXet TM-130

Код: Выделить всё
ffmpeg.exe -y -i ВАШЕВИДЕО.avi -vf rotate=-90*PI/180 -r 15 -s 128x96 -aspect 4:3 -acodec amr_nb -ac 1 -ar 8000 ГОТОВОЕВИДЕО.3gp


ПО FFmpeg распространяется по лицензиям GNU LGPL или GNU GPL
Справочник и Форум Green Dragon
T-800 MOD для Heroes of Might and Magic 2

Основатель клуба "Армагеддон"

Основатель клуба "Пещера Гремлинов"

ИзображениеИзображение
Аватара пользователя
t800
Experienced
Experienced
 
Сообщения: 849
Зарегистрирован: 19 окт 2015, 14:52
Откуда: Казахстан, Алматинская область
Благодарил (а): 172 раз.
Поблагодарили: 136 раз.

Пред.След.

Вернуться в Технические вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

cron