Показаны различия между двумя версиями страницы.
| Предыдущая версия | |||
| — | fedora:040-multimedia [21.10.2025 11:24] (текущий) – [Послать команду Play/Pause посредством DBUS всем запущенным медиа плеерам] Oleg Kochkin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ====== Мультимедиа ====== | ||
| + | ===== Изменение соотношения сторон (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} / | ||
| + | done | ||
| + | Работает в mpv, vlc, amarok, firefox, chrome. | ||
| + | |||
| + | ===== Все файлы текушей папки в mp3 ===== | ||
| + | mkdir -p mp3; for fn in *; do ffmpeg -i " | ||
| + | |||
| + | ===== Микшировать два аудиофайла ===== | ||
| + | ffmpeg -i input0.mp3 -i input1.mp3 -filter_complex amix=inputs=2: | ||
| + | https:// | ||
| + | |||
| + | ===== Выделение голоса в аудио ===== | ||
| + | ffmpeg -i input.aac -af " | ||
| + | // | ||
| + | //out.aac// - результат\\ | ||
| + | // | ||
| + | https:// | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ===== Видео в png и png в видео ===== | ||
| + | ffmpeg -i input.mkv " | ||
| + | ffmpeg -framerate 10 -i " | ||
| + | |||
| + | ===== Все 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 | ||
| + | Скачивает файл "< | ||
| + | |||
| + | ===== Сглаживание перехода между кадрами (minterpolate) ===== | ||
| + | ffmpeg -i inpit.mkv -filter:v " | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ===== Видео в webp (ffmpeg) ===== | ||
| + | На март 2021г. в репах rpmfusion для Fedora 33 ffmpeg (4.3.2) был собран без возможности кодирования в webp, поэтому был использован [[https:// | ||
| + | |||
| + | 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):< | ||
| + | <a href=" | ||
| + | </ | ||
| + | ===== Поворот видео на 90º без перекодирования ===== | ||
| + | ffmpeg -i in.mp4 -metadata: | ||
| + | или | ||
| + | ffmpeg -display_rotation -90 -i in.mp4 -c copy out.mp4 | ||
| + | Поворачивает видео на 90º по часовой стрелке. Не сохраняет метаданные в MKV. | ||
| + | |||
| + | ===== Записать ffmpeg-ом поток в виде фрагментированного MP4 ===== | ||
| + | ffmpeg по умолчанию записывает нефрагментированный поток MP4, из-за чего, невозможно просматривать записываемый файл одновременно с записью, | ||
| + | |||
| + | Для получения фрагментированного MP4 файла, необходимо добавить параметр **-movflags frag_keyframe** и, как правило, | ||
| + | |||
| + | ===== Изменение 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:// | ||
| + | ===== Опции FFMPEG для захвата HTTP потока плохого качаства ===== | ||
| + | ffmpeg -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 2 -timeout 10000000 -i ... | ||
| + | [[https:// | ||
| + | |||
| + | ===== Получение из одной картинки видео заданной продолжительности (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=" | ||
| + | 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:// | ||
| + | |||
| + | ===== Комбинирование нескольких видео в одно (мозаика) ===== | ||
| + | |||
| + | Исходные видео: | ||
| + | * **1-up.avi** - Размер 1920x768 (должно будет располагаться сверху) | ||
| + | * **2-bt.avi** - Размер 1920x312 (должно будет располагаться снизу) | ||
| + | |||
| + | Необходимо получить видео с общим размером 1920x1080. | ||
| + | |||
| + | Команда: | ||
| + | ffmpeg -i 1-up.avi -i 2-bt.avi -filter_complex " | ||
| + | |||
| + | Подробнее [[https:// | ||
| + | |||
| + | Ещё один пример (**" | ||
| + | ffmpeg -i left.mkv -i right.mkv -filter_complex " | ||
| + | ffmpeg -i top.mkv -i bottom.mkv -filter_complex " | ||
| + | **" | ||
| + | **" | ||
| + | |||
| + | ===== Картинка в картинке из двух видео ===== | ||
| + | ffmpeg -hide_banner -y -i big.mp4 -i little.mkv -map 1:1 -filter_complex " | ||
| + | Полупрозрачный | ||
| + | ffmpeg -hide_banner -y -i big.mp4 -i little.mkv -map 1:1 -filter_complex " | ||
| + | |||
| + | Встраиваемая (little.mkv) уменьшается в пять раз (scale=iw/ | ||
| + | ===== Добавить логотип в видео ===== | ||
| + | |||
| + | ffmpeg -i input.mkv -i logo.png -filter_complex " | ||
| + | |||
| + | input.mkv - Входной видео файл\\ | ||
| + | logo.png - Файл логотипа\\ | ||
| + | output.mkv - Выходной видео файл\\ | ||
| + | 8:8 - координаты логотипа (0:0 - верхний левый угол). | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | ===== Сжатие динамического диапазона для аудио (DRC) ===== | ||
| + | Выравнивает громкость аудио. | ||
| + | sox input.wav output.wav compand 0.3,.8 -120,-10 -10 -100 .1 | ||
| + | < | ||
| + | {{: | ||
| + | < | ||
| + | |||
| + | < | ||
| + | {{: | ||
| + | < | ||
| + | |||
| + | === Для ffmpeg. === | ||
| + | ffmpeg -i input.ts -vcodec copy -af " | ||
| + | [[http:// | ||
| + | |||
| + | === Для PulseAudio. === | ||
| + | Установить пакет ladspa-swh-plugins\\ | ||
| + | В файл / | ||
| + | load-module module-ladspa-sink sink_name=drc sink_master=speakers plugin=sc4_1882 label=sc4 control=1, | ||
| + | update-sink-proplist drc device.description=" | ||
| + | В данном примере, | ||
| + | |||
| + | ===== Собрать анимационный GIF из видеофайла ===== | ||
| + | mplayer -vo jpeg input.avi | ||
| + | |||
| + | * Создаёт кучу JPG файлов в текущей папке. | ||
| + | * input.avi должен быть того разрешения, | ||
| + | * Частота кадров должна соответствовать задержке анимации. | ||
| + | |||
| + | convert *.jpg -delay 100 -layers optimize output.gif | ||
| + | |||
| + | * Собирает из кучи JPG файлов анимированный output.gif. | ||
| + | * Задержка между картинками в GIF файле - 100 миллисекунд, | ||
| + | |||
| + | А можно ещё проще: | ||
| + | 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 - тюнер\\ | ||
| + | SECAM - стандарт вещания\\ | ||
| + | hw:1,0 - аудио устройство (" | ||
| + | ----- | ||
| + | |||
| + | ===== Перекодировка тегов mp3 файлов из CP1251 в UTF8 ===== | ||
| + | find -iname ' | ||
| + | Необходим пакет python-mutagen\\ | ||
| + | [[http:// | ||
| + | ----- | ||
| + | |||
| + | ===== Захват части экрана в видеофайл ===== | ||
| + | // | ||
| + | |||
| + | ffmpeg -y -t 600 -s 800x600 -f x11grab -i : | ||
| + | |||
| + | Опции: | ||
| + | | ||
| + | -y - Перезаписывать существующий файл | ||
| + | -t 600 - Продолжительность записи в секундах | ||
| + | -s 800x600 | ||
| + | -f x11grab | ||
| + | -i : | ||
| + | -vpre libx264-lossless_ultrafast - Предустановки видеокодека (быстрый способ, | ||
| + | / | ||
| + | |||
| + | **В Fedora 27 вместо "-vpre libx264-lossless_ultrafast" | ||
| + | |||
| + | Содержимое файла предустановок ("/ | ||
| + | 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:// | ||
| + | |||
| + | Со звуком: | ||
| + | ffmpeg -y -t 600 -s 1920x1080 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i pulse -vpre libx264-lossless_ultrafast / | ||
| + | Весь экран с кодеком 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 ===== | ||
| + | |||
| + | < | ||
| + | Audio | ||
| + | Format | ||
| + | Format/ | ||
| + | Format profile | ||
| + | Duration | ||
| + | Bit rate mode : Variable | ||
| + | Bit rate : 1 750 Kbps / 1 510 Kbps | ||
| + | Channel(s) | ||
| + | Channel positions | ||
| + | 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 | ||
| + | < | ||
| + | Audio | ||
| + | Format | ||
| + | Format/ | ||
| + | Mode extension | ||
| + | Duration | ||
| + | Bit rate mode : Constant | ||
| + | Bit rate : 448 Kbps | ||
| + | Channel(s) | ||
| + | Channel positions | ||
| + | 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 | ||
| + | |||
| + | ===== Параметры аудиофильтра " | ||
| + | |||
| + | Нумерация каналов: | ||
| + | |||
| + | 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? | ||
| + | Т.е.:\\ | ||
| + | * Передний Левый входной на 0.5 громкости в Левый выходной, | ||
| + | * Передний Левый входной на 0 громкости в Правый выходной, | ||
| + | * Передний Правый входной на 0 громкости в Левый выходной, | ||
| + | * Передний Правый входной на 0.5 громкости в Правый выходной, | ||
| + | * Задний Левый входной на 0.5 громкости в Левый выходной, | ||
| + | * Задний Левый входной на 0 громкости в Правый выходной, | ||
| + | * Задний Правый входной на 0 громкости в Левый выходной, | ||
| + | * Задний Правый входной на 0.5 громкости в Правый выходной, | ||
| + | * Передний Центральный входной на 1 громкости в Левый выходной, | ||
| + | * Передний Центральный входной на 1 громкости в Правый выходной, | ||
| + | * Сабвуфер входной на 0.5 громкости в Левый выходной, | ||
| + | * Сабвуфер входной на 0.5 громкости в Правый выходной, | ||
| + | |||
| + | Первый параметр устанавливает количество выходных каналов. | ||
| + | |||
| + | **-af pan=2: | ||
| + | |||
| + | Преобразование 6 -> 6 с усилением тыловых и переднего центрального каналов и ослаблением сабвуфера: | ||
| + | **-af pan=6: | ||
| + | |||
| + | Пример для ffmpeg:\\ | ||
| + | ffmpeg -i 4359-rus.dts -ab 128000 -vf pan=" | ||
| + | |||
| + | ===== Разобрать DVD на файлы по главам. ===== | ||
| + | $ cat dvd-chapters-to-mpg VIDEO_TS 5 7 | ||
| + | | ||
| + | # | ||
| + | | ||
| + | $folder=@ARGV[0]; | ||
| + | $chapter_start=@ARGV[1]; | ||
| + | $chapter_end=@ARGV[2]; | ||
| + | if (" | ||
| + | print " | ||
| + | print " | ||
| + | exit; | ||
| + | } | ||
| + | if (" | ||
| + | if (" | ||
| + | for ($i=$chapter_start; | ||
| + | $chap=$i; | ||
| + | while (length ($chap)< | ||
| + | print " | ||
| + | `mencoder dvd:// -dvd-device \" | ||
| + | } | ||
| + | |||
| + | Параметры запуска; | ||
| + | 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 - номер дорожки, | ||
| + | |||
| + | Необходимые пакеты, | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | ===== Исправление и декодинг 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: | ||
| + | |||
| + | (второй проход): | ||
| + | mencoder 1.mkv -oac mp3lame -aid 1 -ovc xvid -xvidencopts vhq=1: | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Извлечение звуковой дорожки из видео файлов. ===== | ||
| + | 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 (доступные контейнеры) | ||
| + | |||
| + | ---- | ||