====== Мультимедиа ====== ===== Изменение соотношения сторон (aspect) в видеофайле без перекодирования ===== ffmpeg -i input.mp4 -aspect 2.21 -c copy output.mkv ---- ===== Послать команду Play/Pause посредством DBUS всем запущенным медиа плеерам ===== #!/bin/bash qdbus | grep org.mpris.MediaPlayer2 | while read Player;do qdbus ${Player} /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause done Работает в mpv, vlc, amarok, firefox, chrome. ===== Все файлы текушей папки в mp3 ===== mkdir -p mp3; for fn in *; do ffmpeg -i "${fn}" "mp3/${fn%.*}.mp3"; done ===== Микшировать два аудиофайла ===== 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 ({{ :fedora:arnndn-models-master.zip |}})\\ https://raw.githubusercontent.com/richardpl/arnndn-models/refs/heads/master/std.rnnn 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 ===== Скачивание видеофайла (hls потока) с URL с ограничением скорости и продолжительности ===== yt-dlp --hls-prefer-native -r 3m -o - | ffmpeg -y -i - -t 300 -c copy test.ts Скачивает файл "" со скоростью не более 3-х мегабайт/сек (-r 3m) продолжительностью 5 минут (-t 300) в файл "test.ts" yt-dlp --hls-prefer-native -o - | ffmpeg -re -i - -t 300 -c copy "test.ts" Скачивает файл "" с скоростью, соответствующей частоте кадров исходника (-re) продолжительностью 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, поэтому был использован [[https://johnvansickle.com/ffmpeg/|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 [[https://www.imagemagick.org/Usage/anim_mods/#morph|Из документации по ImageMagick]] ===== Опции FFMPEG для захвата HTTP потока плохого качаства ===== ffmpeg -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 2 -timeout 10000000 -i ... [[https://ffmpeg.org/ffmpeg-protocols.html#http|Из документации по 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 [[https://ffmpeg.org/ffmpeg-filters.html#drawtext|ffmpeg filter "drawtext"]] ===== Комбинирование нескольких видео в одно (мозаика) ===== Исходные видео: * **1-up.avi** - Размер 1920x768 (должно будет располагаться сверху) * **2-bt.avi** - Размер 1920x312 (должно будет располагаться снизу) Необходимо получить видео с общим размером 1920x1080. Команда: 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 Подробнее [[https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos|здесь]]. Ещё один пример (**"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 - верхний левый угол). [[http://superuser.com/questions/683643/how-to-add-my-logo-for-the-first-30-seconds-in-a-video-with-ffmpeg|Ещё варианты]] ===== Сжатие динамического диапазона для аудио (DRC) ===== Выравнивает громкость аудио. sox input.wav output.wav compand 0.3,.8 -120,-10 -10 -100 .1
Исходник и результат: {{:fedora:input.jpg|}} {{:fedora:output.jpg|}}
Аналогичный фильтр в AudaCity - "Компрессор...": {{:fedora:audacity-drc.png|}}
=== Для 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 [[http://forum.videohelp.com/threads/366765-FFMPEG-Compand-settings-suggestions-please?p=2347254&viewfull=1#post2347254|Отсюда]], [[https://ffmpeg.org/pipermail/ffmpeg-user/2013-November/018656.html|отсюда]] и [[http://ffmpeg.org/ffmpeg-filters.html#compand|отсюда]] === Для 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 * Создаёт кучу JPG файлов в текущей папке. * input.avi должен быть того разрешения, которое необходимо для GIF. * Частота кадров должна соответствовать задержке анимации. convert *.jpg -delay 100 -layers optimize output.gif * Собирает из кучи JPG файлов анимированный output.gif. * Задержка между картинками в GIF файле - 100 миллисекунд, что соответствует 10 кадров секунду. А можно ещё проще: 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\\ [[http://forum.russianfedora.ru/viewtopic.php?p=309#p309|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 [[http://youtu.be/hTe7sz-lHsU|Ролик, снятый таким способом (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 | {{ mencoder-pan.png?640}} Т.е.:\\ * Передний Левый входной на 0.5 громкости в Левый выходной,\\ * Передний Левый входной на 0 громкости в Правый выходной,\\ * Передний Правый входной на 0 громкости в Левый выходной,\\ * Передний Правый входной на 0.5 громкости в Правый выходной,\\ * Задний Левый входной на 0.5 громкости в Левый выходной,\\ * Задний Левый входной на 0 громкости в Правый выходной,\\ * Задний Правый входной на 0 громкости в Левый выходной,\\ * Задний Правый входной на 0.5 громкости в Правый выходной,\\ * Передний Центральный входной на 1 громкости в Левый выходной,\\ * Передний Центральный входной на 1 громкости в Правый выходной,\\ * Сабвуфер входной на 0.5 громкости в Левый выходной,\\ * Сабвуфер входной на 0.5 громкости в Правый выходной,\\ Первый параметр устанавливает количество выходных каналов. **-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: {{:fedora:mp3splt-2.4.3-11.fc18.x86_64.rpm|}}\\ {{:fedora:mp3splt-gtk-0.7.3-11.fc18.x86_64.rpm|}}\\ {{:fedora: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 файлов. ===== Для объединения двух (и более) avi файлов: mencoder -oac copy -ovc copy -o out.avi in-1.avi in-2.avi ---- ===== Указание выходного контейнера видео.===== mencoder -of mpeg mencoder -of help (доступные контейнеры) ----