Содержание

Мультимедиа

Микшировать два аудиофайла

ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex amix=inputs=2:duration=longest output.mp3

https://stackoverflow.com/questions/14498539/how-to-overlay-downmix-two-audio-files-using-ffmpeg

Выделение голоса в аудио

ffmpeg -i input.aac -af "arnndn=model=std.rnnn:mix=1" out.aac

input.aac - исходное аудио
out.aac - результат
std.rnnn - файл модели из https://github.com/richardpl/arnndn-models (arnndn-models-master.zip)

https://qna.habr.com/q/1149584

Видео в png и png в видео

ffmpeg -i input.mkv "%08d.png"
ffmpeg -framerate 10 -i "%08d.png" -vcodec huffyuv output.mkv

Все png файлы в jpg

mogrify -format jpg *.png
mogrify -format jpg *.png && rm *.png

Скачивание видеофайла с URL с ограничением скорости и продолжительности

youtube-dl --hls-prefer-native -r 3m -o - <URL> | ffmpeg -y -i - -t 300 -c copy test.ts

Скачивает файл «<URL>» со скоростью не более 3-х мегабайт/сек (-r 3m) продолжительностью 5 минут (-t 300) в файл «test.ts»

Сглаживание перехода между кадрами (minterpolate)

ffmpeg -i inpit.mkv -filter:v "minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1" -vcodec huffyuv output.mkv

https://drive.google.com/file/d/1GjHINk-mZDbf_-egTIL-h8TyP2zHJUVw/view?usp=sharing

Видео в webp (ffmpeg)

На март 2021г. в репах rpmfusion для Fedora 33 ffmpeg (4.3.2) был собран без возможности кодирования в webp, поэтому был использован ffmpeg 4.3.1 статической сборки:

4.3.2:

$ ffmpeg -hide_banner -codecs | grep webp
D.VILS webp                 WebP

4.3.1-static:

$ ffmpeg-alt -hide_banner -codecs | grep webp
DEVILS webp                 WebP (encoders: libwebp_anim libwebp )
ffmpeg-alt -i input.mp4 -vcodec libwebp -lossless 1 -q 60 -loop 0 -preset default -an -vsync 0 output.webp

WebP (9.1 Mb) vs Gif (58.1 Mb):

Поворот видео на 90º без перекодирования

ffmpeg -i in.mp4 -metadata:s:v rotate=-90 -c copy -y out.mp4

или

ffmpeg -display_rotation -90 -i in.mp4 -c copy out.mp4

Поворачивает видео на 90º по часовой стрелке. Не сохраняет метаданные в MKV.

Записать ffmpeg-ом поток в виде фрагментированного MP4

ffmpeg по умолчанию записывает нефрагментированный поток MP4, из-за чего, невозможно просматривать записываемый файл одновременно с записью, а так-же получить параметры записываемого файла тем-же mediainfo.

Для получения фрагментированного MP4 файла, необходимо добавить параметр -movflags frag_keyframe и, как правило, параметр -bsf:a aac_adtstoasc. Перекодирование не требуется, параметры влияют только на контейнер.

Изменение FPS без перекодирования

Из исходного файла in.mp4 удаляется звук, устанавливается 10 fps и сохраняется в файл in-10fps.mkv:

mkvmerge --output in-10fps.mkv --no-audio --default-duration 0:10p in.mp4

И, уже с 10 fps в mp4:

ffmpeg -i in-10fps.mkv -c copy out-10fps.mp4

Анимационный gif с плавным переходом из двух (или более) картинок

convert 1.png 1.png 2.png 2.png 1.png -morph 10 -set delay 10 out.gif

Из документации по ImageMagick

Опции FFMPEG для захвата HTTP потока плохого качаства

ffmpeg -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 2 -timeout 10000000 -i ...

Из документации по FFMPEG

Получение из одной картинки видео заданной продолжительности (10 секунд)

ffmpeg -filter_complex aevalsrc=0 -loop 1 -i picture.png -t 10 -vcodec huffyuv -y out.avi

или одна картинка с аудиотреком:

ffmpeg -loop 1 -i picture.jpg -i sound.mp3 -t 05:40 -c:v libx264 -c:a copy -y out.mkv

Добавление текста к видео

ffmpeg -i input.mkv -vf drawtext="text='Текст для вывода': \
  font=URW Chancery L: \
  fontcolor=red@.5: \
  shadowcolor=gray@.5: \
  shadowx=1: \
  shadowy=1: \
  fontsize=20: \
  x=5: y=5" \
  -acodec copy -crf 20 -vcodec libx264 -y output.mkv

ffmpeg filter "drawtext"

Комбинирование нескольких видео в одно (мозаика)

Исходные видео:

Необходимо получить видео с общим размером 1920×1080.

Команда:

ffmpeg -i 1-up.avi -i 2-bt.avi -filter_complex "nullsrc=size=1920x1080 [base];[0:v]setpts=PTS-STARTPTS,scale=1920x768[upperleft];[1:v]setpts=PTS-STARTPTS,scale=1920x312[lowerleft];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][lowerleft]overlay=shortest=1:y=769" -vcodec huffyuv -acodec copy -y 3-all.avi

Подробнее здесь.

Ещё один пример («hstack» стыкует видео по горизонтали, «vstack» - по вертикали):

ffmpeg -i left.mkv -i right.mkv -filter_complex "[0:v][1:v]hstack" -acodec copy -vcodec huffyuv -y out.mkv
ffmpeg -i top.mkv -i bottom.mkv -filter_complex "[0:v][1:v]vstack" -acodec copy -vcodec huffyuv -y out.mkv

«left.mkv» и «right.mkv» имеют одинаковую высоту.
«top.mkv» и «bottom.mkv» имеют одинаковую ширину.

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

ffmpeg -hide_banner -y -i big.mp4 -i little.mkv -map 1:1 -filter_complex "[1]scale=iw/5:-1[pip];[0][pip]overlay=W-w-20:H-h-20:shortest=1[v];[0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -c:a aac -c:v huffyuv out.mkv

Полупрозрачный

ffmpeg -hide_banner -y -i big.mp4 -i little.mkv -map 1:1 -filter_complex "[1]scale=iw/5:-1,format=rgba,colorchannelmixer=aa=0.4[pip];[0][pip]overlay=W-w-20:H-h-20:shortest=1[v];[0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -c:a aac -c:v huffyuv out.mkv

Встраиваемая (little.mkv) уменьшается в пять раз (scale=iw/5:-1) и располагается в правом нижнем углу с отступом от края 20 пикс. (W-w-20:H-h-20). Звук из little.mkv ( -map 1:1).

Добавить логотип в видео

ffmpeg -i input.mkv -i logo.png -filter_complex "[0:v][1:v]overlay=8:8" -vcodec libx264 -acodec ac3 -y output.mkv

input.mkv - Входной видео файл
logo.png - Файл логотипа
output.mkv - Выходной видео файл
8:8 - координаты логотипа (0:0 - верхний левый угол).

Ещё варианты

Сжатие динамического диапазона для аудио (DRC)

Выравнивает громкость аудио.

sox input.wav output.wav compand 0.3,.8 -120,-10 -10 -100 .1

Исходник и результат:

Аналогичный фильтр в AudaCity - "Компрессор...":

Для ffmpeg.

ffmpeg -i input.ts -vcodec copy -af "compand=0 0:1 1:-60/-24 -48/-12 0/0:6:2:0:0" -acodec ac3 output.mkv

Отсюда, отсюда и отсюда

Для PulseAudio.

Установить пакет ladspa-swh-plugins
В файл /etc/pulse/default.pa добавляем:

load-module module-ladspa-sink sink_name=drc sink_master=speakers plugin=sc4_1882 label=sc4 control=1,1.5,401,-24,10,10,12
update-sink-proplist drc device.description="Dynamic Range Compressor (DRC)"

В данном примере, родительским синком для DRC канала является виртуальный синк speakers.

Собрать анимационный GIF из видеофайла

mplayer -vo jpeg input.avi
convert *.jpg -delay 100 -layers optimize output.gif

А можно ещё проще:

ffmpeg -i input.avi output.gif

Более качественный вариант:

ffmpeg -i input.avi -r 10 -f image2pipe -vcodec ppm - | convert -delay 5 -loop 0 -layers Optimize - output.gif

Прямое и обратное проигрывание.
Прямой файл:

convert in.avi forward.gif

Обратный файл:

convert in.avi -reverse reverse.gif

Слияние полученных файлов:

convert -coalesce forward.gif reverse.gif out.gif

Просмотр потока с ТВ тюнера на VLC

vlc v4l2:///dev/video0 :v4l2-standard=SECAM :input-slave=alsa://hw:1,0

/dev/video0 - тюнер
SECAM - стандарт вещания
hw:1,0 - аудио устройство («звук по шине PCI»)


Перекодировка тегов mp3 файлов из CP1251 в UTF8

find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1

Необходим пакет python-mutagen
forum.russianfedora.ru


Захват части экрана в видеофайл

Изменено 25 мая 2013г. (Fedora 18).

ffmpeg -y -t 600 -s 800x600 -f x11grab -i :0.0+100,200 -vpre libx264-lossless_ultrafast /mnt/cap/screen.avi

Опции:

-y                               - Перезаписывать существующий файл
-t 600                           - Продолжительность записи в секундах
-s 800x600                       - Размер захватываемой области
-f x11grab                       - Устройство захвата (экран)
-i :0.0+100,200                  - Параметры устройства захвата. Номер экрана - :0.0, координаты захватываемой области - +100,200
-vpre libx264-lossless_ultrafast - Предустановки видеокодека (быстрый способ, почти без сжатия)
/mnt/cap/screen.avi              - Сохраняемый файл

В Fedora 27 вместо «-vpre libx264-lossless_ultrafast» используется «-preset speed».

Содержимое файла предустановок («/usr/share/ffmpeg/libx264-lossless_ultrafast.ffpreset»):

vcodec=libx264
flags=+loop+cgop
partitions=-parti8x8-parti4x4-partp8x8-partp4x4-partb8x8
me_method=dia
subq=0
me_range=16
g=250
keyint_min=25
sc_threshold=40
i_qfactor=0.71
b_strategy=1
qcomp=0.6
qmin=0
qmax=69
qdiff=4

Ролик, снятый таким способом (youtube.com, 1920x1080)

Со звуком:

ffmpeg -y -t 600 -s 1920x1080 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i pulse -vpre libx264-lossless_ultrafast /mnt/cap/screen.avi

Весь экран с кодеком HuffYUV:

ffmpeg -y -s 1920x1080 -f x11grab -i :0.0+0,0 -vcodec huffyuv -y screen.avi

Сохранение в wmv без перекодирования

Сохраняются дорожки 1 (audio) и 4 (video):

mencoder input.wmv -of lavf -ovc copy -oac copy -aid 1 -vid 4 -o output.wmv

Кодирование звукового файла DTS -> AC3

Исходный файл DTS (audio.dts):

Audio
Format                           : DTS
Format/Info                      : Digital Theater Systems
Format profile                   : MA / Core
Duration                         : 3h 9mn
Bit rate mode                    : Variable
Bit rate                         : 1 750 Kbps / 1 510 Kbps
Channel(s)                       : 8 channels / 6 channels
Channel positions                : Front: L C R, Side: L R, Back: L R, LFE / Front: L C R, Side: L R, LFE
Sampling rate                    : 48.0 KHz
Bit depth                        : 16 bits
Compression mode                 : Lossless / Lossy

Команда:

ffmpeg -i audio.dts -ab 448000 -ar 48000 -ac 6 -acodec ac3 -y audio.ac3

Результат AC3 (audio.ac3):

Audio
Format                           : AC-3
Format/Info                      : Audio Coding 3
Mode extension                   : CM (complete main)
Duration                         : 2h 0mn
Bit rate mode                    : Constant
Bit rate                         : 448 Kbps
Channel(s)                       : 6 channels
Channel positions                : Front: L C R, Side: L R, LFE
Sampling rate                    : 48.0 KHz
Bit depth                        : 16 bits
Compression mode                 : Lossy
Stream size                      : 388 MiB (100%)

Преобразовать DVD в один vob файл с сохранением всех аудиодорожек.

vobcopy -i VIDEO_TS -l -n 3

-i VIDEO_TS - Папка с структурой DVD.
-l - Возможность создать vob файл размером более 2Гб.
-n 3 - Создавать файл из третьего заголовка.

Параметры DVD можно узнать командой
Краткая информация:

lsdvd VIDEO_TS

Полная информация:

lsdvd VIDEO_TS -x

Параметры аудиофильтра "pan" mencoder.

Нумерация каналов:

0 - Front Left (Передний Левый) - FL
1 - Front Right (Передний Правый) - FR
2 - Rear Left (Задний Левый) - RL
3 - Rear Right (Задний Правый) - RR
4 - Front Center (Передний Центральный) - FC
5 - Subwoofer (Сабвуфер) - SW

Преобразование шестиканального звука в двухканальный, с ослаблением всех каналов, кроме Переднего Центрального:

Входные каналы
FL FR RL RR FC SW
0.5 0 0 0.5 0.5 0 0 0.5 1 1 0.5 0.5
Выходные каналы
L R L R L R L R L R L R

Т.е.:

Первый параметр устанавливает количество выходных каналов.

-af pan=2:0.5:0:0:0.5:0.5:0:0:0.5:1:1:0.5:0.5

Преобразование 6 → 6 с усилением тыловых и переднего центрального каналов и ослаблением сабвуфера:
-af pan=6:1:0:0:0:0:0:0:1:0:0:0:0:0:0:2:0:0:0:0:0:0:2:0:0:0:0:0:0:2:0:0:0:0:0:0:0.5

Пример для ffmpeg:

ffmpeg -i 4359-rus.dts -ab 128000 -vf pan="stereo: FL<0.5*FL+1.0*FC+0.1*BC+0.1*SL : FR<0.5*FR+1.0*FC+0.1*BC+0.1*SR" -ac 2 -acodec ac3 -y 4359-rus.ac3

Разобрать DVD на файлы по главам.

$ cat dvd-chapters-to-mpg VIDEO_TS 5 7

#!/usr/bin/perl

$folder=@ARGV[0];
$chapter_start=@ARGV[1];
$chapter_end=@ARGV[2];
if ("$folder" eq ""){
	print "\nCommand:\n";
	print "dvd-chapters-to-mpg dvd_folder [chapter_start] [chapter_end]\n";
	exit;
	}
if ("$chapter_start" eq ""){ $chapter_start=1;}
if ("$chapter_end" eq ""){ $chapter_end=$chapter_start;}
for ($i=$chapter_start;$i<=$chapter_end;$i++){
	$chap=$i;
	while (length ($chap)<3) {$chap="0".$chap;}
	print "Chapter - $chap\n";
	`mencoder dvd:// -dvd-device \"$folder\" -chapter $i-$i -ovc copy -oac copy -of mpeg -o $chap.mpg`;
	}

Параметры запуска; dvd-chapters-to-mpg dvd_folder [chapter_start] [chapter_end]
dvd_folder - папка со структурой DVD диска (VIDEO_TS)
chapter_start - начальная глава (5)
chapter_end - конечная глава (7)

Создание скриншотов из видеофайла.

mplayer file.avi -vo png -nosound -sstep 60

Перекодирование файлов ape в mp3.

Преобразование ape в wav:

mac file.ape file.wav

Преобразование wav в mp3:

lame --preset insane file.wav file.mp3

Разрезание файла mp3 на треки (необходим cue файл):

mp3splt -c file.cue file.mp3 -o "@n - @a - @t"

Где @n - номер дорожки, @a - артист, @t - композиция.

Необходимые пакеты, отсутствующие в репозиториях Fedora 18:

mp3splt-2.4.3-11.fc18.x86_64.rpm
mp3splt-gtk-0.7.3-11.fc18.x86_64.rpm
libmp3splt-0.7.3-11.fc18.x86_64.rpm

Исправление и декодинг AVI файлов.

Исправление индексов:

mencoder -idx input.avi -ovc copy -oac copy -o output.avi

Перекодирование 1.mkv в o1.avi (первый проход):

mencoder 1.mkv -nosound -ovc xvid -xvidencopts vhq=1:pass=1:qpel:trellis -o /dev/null

(второй проход):

mencoder 1.mkv -oac mp3lame -aid 1 -ovc xvid -xvidencopts vhq=1:pass=2:qpel:trellis:bitrate=1563 -o o1.avi

Извлечение звуковой дорожки из видео файлов.

mplayer видеофайл.avi -dumpaudio -dumpfile аудиофайл.ac3

Изменение соотношения сторон в заголовке AVI файла.

mencoder -vf dsize=4/3 ...

Соединение avi файлов.

Для соединения двух (и более) avi файлов:

mencoder -oac copy -ovc copy -o out.avi in-1.avi in-2.avi

Указание выходного контейнера видео.

mencoder -of mpeg
mencoder -of help (доступные контейнеры)