Soft/FFmpeg: различия между версиями
(Пожалуйста, не убирать. У меня при попытке сконвертировать одно видео без указания этого кодека у видео получался черный экран) |
|||
(не показано 35 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
''' | [[en:FFmpeg commands]] | ||
{|class="wikitable" style="float: right; margin-left: 2em" | |||
! colspan="2" | FFmpeg | |||
|- | |||
| colspan="2" | [[Изображение:User-menu-ffmpeg.png |64px|center]] | |||
|- | |||
| colspan="2" | [[Изображение: Ffmpeg-screen.png |300px|center|]] | |||
|- | |||
| '''Разработчик(и)''' | |||
| Фабрис Беллар | |||
|- | |||
| '''Первый выпуск''' | |||
| 2000 | |||
|- | |||
| '''Лицензия''' | |||
| LGPLv2.1+ | |||
|- | |||
| '''Сайт''' | |||
| [https://ffmpeg.org/ ffmpeg.org] | |||
|} | |||
'''FFmpeg''' - библиотека для преобразования, воспроизведения, потоковой передачи и обработки аудио и видео. | |||
{{note|В P8 пакет и команда называются avconv, в P9 ffmpeg}} | {{note|В P8 пакет и команда называются avconv, в P9 ffmpeg}} | ||
== | ==Avconv/FFmpeg== | ||
Изначально был проект FFmpeg. Между разработчиками произошел конфликт, проект [https://www.heyiamindians.com/is-libav-dead/ раскололся] на два проекта FFmpeg и Libav (Avconv) - сторонники FFmpeg хотели сохранить скорость разработки в пользу большего количества функций, а сторонники Libav хотели улучшить состояние кода и уделить время разработке лучших API. Но на апрель 2020 года [https://web.archive.org/web/20200812182017/https://lists.libav.org/pipermail/libav-devel/2020-April/086589.html Avconv заброшен]. | |||
== | ==Установка== | ||
$ su - | |||
# apt-get install ffmpeg | |||
==Возможности== | ==Возможности== | ||
===Конвертирование видео=== | ===Конвертирование видео=== | ||
====AVI==== | ====AVI==== | ||
ffmpeg -i "/run/media/input.mkv" "/home/output.avi" | |||
ffmpeg -i "input.mkv" "output.avi" #Для работы с одним файлом в текущем каталоге. | |||
ffmpeg -i "/run/media/input.mkv" -vcodec libx264 "/home/output.avi" #Если не помогает кодек по-умолчанию | |||
====MP4==== | |||
ffmpeg -i "/run/media/input.mkv" "/home/output.mp4" | |||
ffmpeg -i "input.mkv" "output.mp4" #Для работы с одним файлом в текущем каталоге. | |||
ffmpeg -i "/run/media/input.mkv" -vcodec libx264 "/home/output.mp4" #Если не помогает кодек по-умолчанию | |||
====WMV==== | |||
ffmpeg -i "/run/media/input.mkv" "/home/output.wmv" | |||
ffmpeg -i "input.mkv" "output.wmv" #Для работы с одним файлом в текущем каталоге. | |||
====Webm в MP4==== | |||
ffmpeg -i "/run/media/input.mkv" "/home/output.mp4" | |||
ffmpeg -i "input.mkv" "output.mp4" #Для работы с одним файлом в текущем каталоге. | |||
=== | ===Изменить кодек звуковой дорожки, не затрагивая само видео=== | ||
[https://alt-gnome.wiki/ffmpeg.html#%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C-%D0%BA%D0%BE%D0%B4%D0%B5%D0%BA-%D0%B7%D0%B2%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B8-%D0%B4%D0%BE%D1%80%D0%BE%D0%B6%D0%BA%D0%B8-%D0%BD%D0%B5-%D0%B7%D0%B0%D1%82%D1%80%D0%B0%D0%B3%D0%B8%D0%B2%D0%B0%D1%8F-%D1%81%D0%B0%D0%BC%D0%BE-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE] | |||
Ключ для копирования кодека аудио (-c:a copy) заменяется другим ключом: -c:a ac3 | |||
ffmpeg -hide_banner -i "/run/media/input.mkv" -map 0:v:0 -map 0:a:0 -map 0:s:1 -c:v copy -c:a ac3 -c:s copy "/home/output.mp4" | |||
===Конвертирование аудио=== | ===Конвертирование аудио=== | ||
ffmpeg -i "/run/media/input.mp3" "/home/output.ogg" | |||
Где -i входной файл, а следующий путь выходной. | Где -i входной файл, а следующий путь выходной. Окончанием выходного файла может быть любой аудио-формат. | ||
===Сжатие видео без потери качества=== | |||
ffmpeg -i "/run/media/input.mp4" -crf 18 -preset veryslow -c:a copy "/home/output.mp4" | |||
crf 18 — переменный биттрейт. Если указать более низкий CRF, файл будет большего размера с лучшим визуальным качеством. | |||
* 18 — часто считается сжатием «без визуальных потерь» | |||
* 23 — считается стандартом. | |||
Какие пресеты скорости можно использовать: (Если не указать будет использоваться "-preset medium") | |||
* -preset ultrafast: Самый быстрый пресет, но с наихудшим качеством. | |||
* -preset superfast: Быстрый, но с небольшим снижением качества. | |||
* -preset veryfast: Быстрый, с небольшим снижением качества. | |||
* -preset faster: Быстрый, с небольшим снижением качества. | |||
* -preset fast: Достаточно быстрый, с небольшим снижением качества. | |||
* -preset medium: Средняя скорость, среднее качество. | |||
* -preset slow: Достаточно медленный, с улучшенным качеством. | |||
* -preset slower: Медленный, с хорошим качеством. | |||
* -preset veryslow: Самый медленный, но с наилучшим качеством. | |||
===Сжатие видео без потери качества с аппаратным ускорением=== | |||
[https://alt-gnome.wiki/ffmpeg.html#%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BE%D1%80%D0%B8%D0%B3%D0%B8%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BD%D1%82%D0%B0-%D0%BF%D1%80%D0%B8-%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8] | |||
ffmpeg -i "/run/media/input.mp4" -crf 18 -c:v h264_nvenc "/home/output.mp4" #Аппаратное ускорение NVIDIA NVENC | |||
ffmpeg -i "/run/media/input.mp4" -crf 18 -c:v h264_amf "/home/output.mp4" #Аппаратное ускорение AMD AMF | |||
ffmpeg -i "/run/media/input.mp4" -crf 18 -c:v h264_qsv "/home/output.mp4" #Аппаратное ускорение Intel Quick Sync Video | |||
===Изменение разрешения видео=== | ===Изменение разрешения видео=== | ||
ffmpeg -i "/run/media/input.mkv" -s 320x240 "/home/output.mp4" | |||
===Обрезка видео=== | |||
ffmpeg -i "/run/media/input.mkv" -t 00:05:00 -c copy "/home/output.mp4" | |||
''-ss'' | |||
* Указывает начало отрезка видео, с которого начинается обработка. | |||
Например -ss 00:00:10 начнет обработку с 10-й секунды видео. | |||
''-t'' | |||
* Указывает длительность отрезка видео, который будет обработан. | |||
* Например, -t 00:00:30 будет обрабатывать первые 30 секунд видео. | |||
''-ss 0:07:27 -t 0:00:07'' | |||
* Используя эти две опции совместно можно вырезать нужный отрезок видео или звука. | |||
''-c copy'' | |||
* Копирование видео, аудио и субтитров без конвертирования. | |||
===Извлечение аудиодорожки=== | ===Извлечение аудиодорожки=== | ||
ffmpeg -i "/run/media/input.mkv" -vn -c:a copy "/home/output.aac" | |||
#-vn игнорирует видео | |||
#-c:a copy копирует аудио без перекодирования | |||
===Изменение структуры контейнера видео файла без изменения качества видео=== | |||
[https://alt-gnome.wiki/ffmpeg.html#%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B8%D0%BD%D0%B5%D1%80%D0%B0-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D1%84%D0%B0%D0%B8%D0%BB%D0%B0-%D0%B1%D0%B5%D0%B7-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE] | |||
Допустим, у нас есть видеофайл с 5 аудио дорожками и 3 дорожками субтитров, а нам необходимо видео конкретно с первой аудио дорожкой и вторым потоком субтитров. | |||
ffmpeg -hide_banner -i "/run/media/input.mkv" -map 0:v:0 -map 0:a:0 -map 0:s:1 -c:v copy -c:a copy -c:s copy "/home/output.mkv" | |||
* Выбираем первую видео дорожку: -map 0:v:0 | |||
* Выбираем первую аудио дорожку: -map 0:a:0 | |||
* Выбираем второй поток субтитров: -map 0:s:1 | |||
* Применение -c copy равносильно указанию -c:v copy -c:a copy -c:s copy, если ранее были выбраны нужные дорожки. | |||
'''Будьте внимательны!''' | |||
''Индексация дорожек начинается с нуля, поэтому первая дорожка будет иметь номер 0, а не 1.'' | |||
===Конвертация видео в изображения=== | ===Конвертация видео в изображения=== | ||
Строка 41: | Строка 119: | ||
mkdir ~ images | mkdir ~ images | ||
2.Переведите видео в изображения | 2.Переведите видео в изображения | ||
ffmpeg -ss 0:04:00 -t 0:00:16 -i "/run/media/petr/TRANSCEND/Видео/Мультфильмы/Домовенок Кузя/1 Приключения домовенка.avi" -vf fps=10 /home/petr/images/kuzya%03d.png | |||
===Создание GIF из видео=== | ===Создание GIF из видео=== | ||
Строка 48: | Строка 126: | ||
mkdir ~ frames | mkdir ~ frames | ||
2. Сконвертируйте видео на маленькое разрешение и вырежьте приблизительный кусок (-ss - начало видео, -t - продолжительность.)<br> | 2. Сконвертируйте видео на маленькое разрешение и вырежьте приблизительный кусок (-ss - начало видео, -t - продолжительность.)<br> | ||
ffmpeg -ss 0:04:00 -t 0:00:16 -i "/run/media/petr/TRANSCEND/Видео/Ч_б мультфильмы/Советские 1920-е/Одна из многих (1927).mp4" -strict experimental -vf scale=320:240 /home/petr/ffout.mp4 | |||
3.Переведите видео в изображения | 3.Переведите видео в изображения | ||
ffmpeg -i "/home/petr/ffout.mp4" -vf fps=10 /home/petr/frames/ffout%03d.png | |||
Данная команда сконверитрует видео в изображения.<br> | Данная команда сконверитрует видео в изображения.<br> | ||
4.Перейдите в папку и если надо, удалите лишние кадры.<br> | 4.Перейдите в папку и если надо, удалите лишние кадры.<br> | ||
====Часть II==== | ====Часть II==== | ||
*[[ImageMagick - обработка изображений#Часть II|С помощью ImageMagick]] | *[[ImageMagick - обработка изображений#Часть II|С помощью ImageMagick]] | ||
[ | |||
{{Category navigation|title= | ===Пакетное конвертирование=== | ||
Предположим, вам нужно сконвертировать все видео *avi, *.mkv, *.mp4 и *.mov в каталоге с определенными параметрами. | |||
Для этого создадим в текстовом редакторе следующий скрипт (где выделено жирным, вставьте нужные вам параметры): | |||
#!/bin/sh | |||
mkdir conv | |||
for f in *.avi; do | |||
ffmpeg -i "$f" '''-acodec copy -strict experimental -s 1280x720''' conv/"${f%.*}".'''mkv''' | |||
done | |||
for f in *.m{p4,kv,ov}; do | |||
ffmpeg -i "$f" '''-acodec copy -strict experimental -s 1280x720''' conv/"${f%.*}".'''mkv''' | |||
done | |||
Сохраним его как '''conv.sh''' и сделаем исполняемым: | |||
chmod +x conv.sh | |||
Переходим в каталог с файлами и выполняем данный скрипт.[https://forum.ubuntu.ru/index.php?topic=248799.msg1964419#msg1964419] | |||
{{Category navigation|title=Софт в ALT Linux|category=Soft|sortkey={{SUBPAGENAME}}}} | |||
[[Категория:Soft]] | |||
[[Категория:CookBook]] |
Версия от 14:45, 27 сентября 2024
FFmpeg | |
---|---|
Разработчик(и) | Фабрис Беллар |
Первый выпуск | 2000 |
Лицензия | LGPLv2.1+ |
Сайт | ffmpeg.org |
FFmpeg - библиотека для преобразования, воспроизведения, потоковой передачи и обработки аудио и видео.
Avconv/FFmpeg
Изначально был проект FFmpeg. Между разработчиками произошел конфликт, проект раскололся на два проекта FFmpeg и Libav (Avconv) - сторонники FFmpeg хотели сохранить скорость разработки в пользу большего количества функций, а сторонники Libav хотели улучшить состояние кода и уделить время разработке лучших API. Но на апрель 2020 года Avconv заброшен.
Установка
$ su - # apt-get install ffmpeg
Возможности
Конвертирование видео
AVI
ffmpeg -i "/run/media/input.mkv" "/home/output.avi" ffmpeg -i "input.mkv" "output.avi" #Для работы с одним файлом в текущем каталоге. ffmpeg -i "/run/media/input.mkv" -vcodec libx264 "/home/output.avi" #Если не помогает кодек по-умолчанию
MP4
ffmpeg -i "/run/media/input.mkv" "/home/output.mp4" ffmpeg -i "input.mkv" "output.mp4" #Для работы с одним файлом в текущем каталоге. ffmpeg -i "/run/media/input.mkv" -vcodec libx264 "/home/output.mp4" #Если не помогает кодек по-умолчанию
WMV
ffmpeg -i "/run/media/input.mkv" "/home/output.wmv" ffmpeg -i "input.mkv" "output.wmv" #Для работы с одним файлом в текущем каталоге.
Webm в MP4
ffmpeg -i "/run/media/input.mkv" "/home/output.mp4" ffmpeg -i "input.mkv" "output.mp4" #Для работы с одним файлом в текущем каталоге.
Изменить кодек звуковой дорожки, не затрагивая само видео
[1] Ключ для копирования кодека аудио (-c:a copy) заменяется другим ключом: -c:a ac3
ffmpeg -hide_banner -i "/run/media/input.mkv" -map 0:v:0 -map 0:a:0 -map 0:s:1 -c:v copy -c:a ac3 -c:s copy "/home/output.mp4"
Конвертирование аудио
ffmpeg -i "/run/media/input.mp3" "/home/output.ogg"
Где -i входной файл, а следующий путь выходной. Окончанием выходного файла может быть любой аудио-формат.
Сжатие видео без потери качества
ffmpeg -i "/run/media/input.mp4" -crf 18 -preset veryslow -c:a copy "/home/output.mp4"
crf 18 — переменный биттрейт. Если указать более низкий CRF, файл будет большего размера с лучшим визуальным качеством.
- 18 — часто считается сжатием «без визуальных потерь»
- 23 — считается стандартом.
Какие пресеты скорости можно использовать: (Если не указать будет использоваться "-preset medium")
- -preset ultrafast: Самый быстрый пресет, но с наихудшим качеством.
- -preset superfast: Быстрый, но с небольшим снижением качества.
- -preset veryfast: Быстрый, с небольшим снижением качества.
- -preset faster: Быстрый, с небольшим снижением качества.
- -preset fast: Достаточно быстрый, с небольшим снижением качества.
- -preset medium: Средняя скорость, среднее качество.
- -preset slow: Достаточно медленный, с улучшенным качеством.
- -preset slower: Медленный, с хорошим качеством.
- -preset veryslow: Самый медленный, но с наилучшим качеством.
Сжатие видео без потери качества с аппаратным ускорением
ffmpeg -i "/run/media/input.mp4" -crf 18 -c:v h264_nvenc "/home/output.mp4" #Аппаратное ускорение NVIDIA NVENC ffmpeg -i "/run/media/input.mp4" -crf 18 -c:v h264_amf "/home/output.mp4" #Аппаратное ускорение AMD AMF ffmpeg -i "/run/media/input.mp4" -crf 18 -c:v h264_qsv "/home/output.mp4" #Аппаратное ускорение Intel Quick Sync Video
Изменение разрешения видео
ffmpeg -i "/run/media/input.mkv" -s 320x240 "/home/output.mp4"
Обрезка видео
ffmpeg -i "/run/media/input.mkv" -t 00:05:00 -c copy "/home/output.mp4"
-ss
- Указывает начало отрезка видео, с которого начинается обработка.
Например -ss 00:00:10 начнет обработку с 10-й секунды видео.
-t
- Указывает длительность отрезка видео, который будет обработан.
- Например, -t 00:00:30 будет обрабатывать первые 30 секунд видео.
-ss 0:07:27 -t 0:00:07
- Используя эти две опции совместно можно вырезать нужный отрезок видео или звука.
-c copy
- Копирование видео, аудио и субтитров без конвертирования.
Извлечение аудиодорожки
ffmpeg -i "/run/media/input.mkv" -vn -c:a copy "/home/output.aac"
- -vn игнорирует видео
- -c:a copy копирует аудио без перекодирования
Изменение структуры контейнера видео файла без изменения качества видео
[3] Допустим, у нас есть видеофайл с 5 аудио дорожками и 3 дорожками субтитров, а нам необходимо видео конкретно с первой аудио дорожкой и вторым потоком субтитров.
ffmpeg -hide_banner -i "/run/media/input.mkv" -map 0:v:0 -map 0:a:0 -map 0:s:1 -c:v copy -c:a copy -c:s copy "/home/output.mkv"
- Выбираем первую видео дорожку: -map 0:v:0
- Выбираем первую аудио дорожку: -map 0:a:0
- Выбираем второй поток субтитров: -map 0:s:1
- Применение -c copy равносильно указанию -c:v copy -c:a copy -c:s copy, если ранее были выбраны нужные дорожки.
Будьте внимательны! Индексация дорожек начинается с нуля, поэтому первая дорожка будет иметь номер 0, а не 1.
Конвертация видео в изображения
Например, мне нужны кадры "Кузи" с 4 минуты в течении 16 секунд:
1.Создайте каталог для картинок
mkdir ~ images
2.Переведите видео в изображения
ffmpeg -ss 0:04:00 -t 0:00:16 -i "/run/media/petr/TRANSCEND/Видео/Мультфильмы/Домовенок Кузя/1 Приключения домовенка.avi" -vf fps=10 /home/petr/images/kuzya%03d.png
Создание GIF из видео
Часть I
1.Создайте каталог для временных картинок
mkdir ~ frames
2. Сконвертируйте видео на маленькое разрешение и вырежьте приблизительный кусок (-ss - начало видео, -t - продолжительность.)
ffmpeg -ss 0:04:00 -t 0:00:16 -i "/run/media/petr/TRANSCEND/Видео/Ч_б мультфильмы/Советские 1920-е/Одна из многих (1927).mp4" -strict experimental -vf scale=320:240 /home/petr/ffout.mp4
3.Переведите видео в изображения
ffmpeg -i "/home/petr/ffout.mp4" -vf fps=10 /home/petr/frames/ffout%03d.png
Данная команда сконверитрует видео в изображения.
4.Перейдите в папку и если надо, удалите лишние кадры.
Часть II
Пакетное конвертирование
Предположим, вам нужно сконвертировать все видео *avi, *.mkv, *.mp4 и *.mov в каталоге с определенными параметрами.
Для этого создадим в текстовом редакторе следующий скрипт (где выделено жирным, вставьте нужные вам параметры):
#!/bin/sh mkdir conv for f in *.avi; do ffmpeg -i "$f" -acodec copy -strict experimental -s 1280x720 conv/"${f%.*}".mkv done for f in *.m{p4,kv,ov}; do ffmpeg -i "$f" -acodec copy -strict experimental -s 1280x720 conv/"${f%.*}".mkv done
Сохраним его как conv.sh и сделаем исполняемым:
chmod +x conv.sh
Переходим в каталог с файлами и выполняем данный скрипт.[4]