ffmpeg
http://ffmpeg.org/ - официальный сайт
ffmpeg - набор библиотек для записи, конвертации аудио и видео.
sudo apt-get install ffmpeg libavcodec-extra-52 - установка
Примеры:
ffmpeg -i Rihanna.avi -f mp4 -r 25 -ss 10 -t 30 -vcodec mpeg4 -qscale 1 -qmin 7 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.mp4
Разберем такую строку:
ffmpeg -i Wingsuit.mp4 -f mp4 -r 25 -ss 10 -t 30 -vcodec mpeg4 -qscale 1 -qmin 8 -s 480x360 -acodec libmp3lame -ab 256k -ac 2 -benchmark output1_8-1.mp4
-i Wingsuit.mp4 входящий файл
-f mp4 формат контейнера выходного файла
-r 25 скорость кадров выходного видеопотока, по умолчанию - 25, иногда без явного задания параметра декодер не работает
-ss 10 позиция в секундах, с которой начинать, также поддерживается формат "hh:mm:ss[.xxx]
-t 30 -длительность ролика в секундах, также поддерживается формат "hh:mm:ss[.xxx]"
-vcodec mpeg4 устанавливает видео кодек (есть также msmpeg4 -3я версия, msmpeg4v1, msmpeg4v2)
Чтобы иметь постоянное качество но переменную скорость потока данных, нужно использовать опцию -qscale n, где n - число от 1(отличное качество) до 31(наихудшее качество). При конвертации видео файлов можно использовать опцию -sameq, что сохраняет максимально качество, обеспечивая кодирование видео почти без потерь
-qscale 1 -qmin 8 параметры качество выходного видеопотока VBR
qmin выбирать из диапазона 5-8, чем больше - тем хуже качество, слишком маленький qmin обеспечивает хорошее качество, но при этом существенно возрастает и величина файла
-s 480x360 размер кадра (ffmpeg default = same as source)
-acodec libmp3lame аудиокодек libmp3lame (mp3)
-ab 128k битрейт выходного аудиопотока
-ac 2 устанавливает количество аудиканалов(по умолчанию - 1)
-benchmark выводит таймер для определения, скольк времени потрачено на конвертацию
Аудио-кодеки:
ac3 - a52(VLC)
libmp3lame - mpga(VLC)
flac - не кодируется в mp4 контейнер
libvorbis - mp4a(VLC) - кодируется, не проигрывается в VLC
mp2 - mpga(VLC)
nellymoser - не кодируется в mp4 контейнер
pcm_f64le - не кодируется в mp4 контейнер
vorbis - mp4a(VLC) - кодируется, не проигрывается в VLC
Видео-кодеки:
libxvid
mpeg4
libx265
/*Черновик
-b 800k -устанавливает видео битрейт, по умолчанию 200k, чем больше битрейт, тем качетсвеннее видео, при слишком большом битрейте слабые устройства не могут проиграть видеофалйл. Nokia5530 уже не может проиграть файл с битрейтом 800k длительностью в 1час.
-g 300 -"Set the group of pictures size"
-bf 2 -"-bf frames - Use 'frames' B-frames (supported for MPEG-1, MPEG-2 and MPEG-4)"
*/
Эксперименты с libx265
ffmpeg -i input.mp4 -f mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -qscale 1 -qmin 8 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mp4 (818292)
ffmpeg -i input.mp4 -f mkv -r 30 -ss 0 -t 5 -vcodec libx265 -qscale 1 -qmin 8 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mkv (ошибка)
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -qscale 1 -qmin 8 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mp4 (812264)
ffmpeg:
"Please use -q:a or -q:v, -qscale is ambiguous"
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -q:v 1 -qmin 8 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mkv (812264)
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mkv (812264)
Очевидно, что с кодеком h.265 опция качества выходного потока -qscale игнорируются
(C) https://wiki.debian.org/ffmpeg
"-crf set a quality level between 0 and 51 (small number = better quality but more time to process)"
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -crf 0 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mkv (46 772 910 !!! видеоплеер не справляется с потоком)
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -crf 51 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mkv (247 475 - очень плохая картинка)
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -crf 22 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mkv (1 974 445)
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -crf 32 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mkv (542 496 )
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -crf 28 -s 1920x1080 -acodec libmp3lame -ab 256k -ac 2 -benchmark output.h.265.mkv (812264) - -crf 28 - значение по умолчанию
Краткая форма команды для конвертации
Опытным путем установлено, что crf лучше выбирать менее 28. Оптимально - в районе 22
ffmpeg -i input.mp4 -r 30 -ss 0 -t 5 -vcodec libx265 -crf 22 -benchmark output.h.265.mkv - перекодировать с тем же разрешением, что и исходный видеопоток без указания аудикодека. Если аудиокодек выходного файла не задан, то будет испрользоваться vorbis (libvorbis)
Создание клипа из видеофайла
ffmpeg -i input.mp4 -ss 01:28:00 -t 00:00:25 -vcodec copy -acodec copy -benchmark output.mp4 (3 648 849 байт - в начале клипа 5 сек нет видео для коротких клипов, клип делается моментально)
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
ffmpeg -i input.mp4 -ss 01:28:00 -t 00:00:25 -vcodec copy -benchmark output.mp4 (3 615 888 байт - в начале клипа 5 сек нет видео, клип делается моментально)
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
ffmpeg -i input.mp4 -ss 01:28:00 -t 00:00:25 -benchmark output.mp4 (2 466 107 байт - видео идет сначала, клип делается с процессом перекодирования)
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
ffmpeg -i input.mp4 -ss 01:28:00 -t 00:00:25 -vcodec libx265 -crf 22 -benchmark output.mkv (2 017 813 байт, видео идёт сначала)
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> hevc (libx265))
Stream #0:1 -> #0:1 (aac (native) -> vorbis (libvorbis))
Если нужно перекодировать весь файл, то опции -ss и -t можно опустить.
Для плохих исходных файлов с низким разрешением h265 не дает большого выигрыша. в этом случае нужно применять -crf 22 и ниже.
ffmpeg -i input.mp4 -vcodec libx265 -crf 20 -benchmark output.mkv - здесь опущен параметр -profile.
Если preset не указан, то используется его значение medium. Допустимые значения: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo
ffmpeg -i input.mp4 -vcodec libx265 -crf 20 -preset medium -benchmark output.mkv - то же самое, что и предыдущая команда
ffmpeg -i input.mp4 -vcodec libx265 -crf 22 -preset superfast -benchmark output.mkv
Если исходный видеофайл - это DVD с видео MPEG 1/2, то при кодировании в выходном файле появляется "гребенка"(интерлейсинг). Избавиться от этого(выполнить деинтерлейсин) можно добавив фильтр -vf yadif
ffmpeg -i input.iso -vf yadif -vcodec libx265 -crf 22 -preset superfast -benchmark output.mkv
ffmpeg -i input.iso -vf yadif -ss 240 -t 120 -vcodec libx265 -crf 22 -preset superfast -benchmark output.mkv
-ss 240 -t 120 - начать с 240 секунды и кодировать видео длиной в 120с
ffmpeg -i input.mp4 -vcodec libx265 -crf 20 -preset medium -acodec copy -benchmark output.mkv - для музыкального видео иногда желательно указать явно взять кодек из исходного видео
Справка по H.265
https://trac.ffmpeg.org/wiki/Encode/H.265
ffmpeg -i OriginalFile.avi -ss 01:10:00 -t 00:03:00 -vcodec copy -acodec copy ClippedFile.avi
01:10:00 - время начала клипа (1ч.10мин)
00:03:00 - длительность клипа (3мин.)
Простейшие модификации видео
Есть видео в формате 1280x720, у которого имеются две вертикальные черные полосы справа и слева, а сами кадры сжаты по горизонтали.
Требуется убрать полосы и растянуть кадры до их истинного значения.
ffmpeg -i input.mp4 -vf crop=in_w-2*160 -vcodec libx265 -crf 21 -acodec copy -s 1280x720 -aspect 16:9 -benchmark output_cropped_and_resized.mp4
-vf crop=in_w-2*160 - убирает полосы справа и слева по вертикали
-s 1280x720 - выходной кадр кодируется в таком разрешении
-aspect 16:9 - устанавливаем нужное соотношение сторон, которое потерялось при предыдущих трансформациях
ffmpeg -i input.mp4 -ss 01:00:37 -vcodec copy -acodec copy -benchmark output.mp4 - временное смещение нужно указывать после имени файла(input.pm4)
ffmpeg -i "https://master.m3u8" -c copy -bsf:a aac_adtstoasc "output.mp4"
Команда сконвертирует видео из файла input.mov в output.mp4. По умолчанию будет использован кодек H.264. Размер кадра и fps будут взяты из исходного файла.
ffmpeg -i input.mov output.mp4