Користувальницькькі налаштування

Налаштування сайту


video

Це стара версія документу!


Просмотр

Локальные файлы

В консоли

mplayer -fs -zoom -vo x11 -display :0.0 /home/Clips/Dakh\ Daughters\ \ Rozy\ \ \ Donbass-IHJprqxIwdc.webm

URL

Youtube

Live streams

youtube-dl -g https://www.youtube.com/watch?v=<video_ID> | vlc -

Извлечение кадров

Fastest way to extract frames using ffmpeg?

ffmpeg -i file.mpg -r 1/1 $filename%03d.bmp

Создание

Съёмка

Захват с экрана

ffmpeg (avconv)

avconv -f x11grab -s 300x140 -r 25 -i :0.0+10,20 -an -sn -vcodec libvpx -vb 20k /tmp/out.mkv

Вырежет из экрана прямоугольник шириной 300 пикселей и высотой 140 пикселей, начиная с координат (10,20). Т.е. смещённый вправо от левого края экрана на 10 пикселей и вниз от верхнего края экрана – на 20 пикселей. При этом кодек может быть какой угодно. Однако, вероятно, стоит придерживаться того правила, что для того, чтобы придерживаться реального времени, компьютер должен успевать обрабатывать заданное число кадров в секунду. В примере выше это 25 кадров в секунду. И при высоком разрешении и относительно слабом компьютере, вероятно, стоит использовать кодек, менее требовательный к ресурсам ПК (например, XviD или даже MPEG2).

Рип

Обработка

Монтаж

OpenShot

OpenShot – простой видеоредактор. Хорош для простого монтажа и создания видео из фрагментов видеофайлов, аудиофайлов, картинок. Графический интерфейс написан на языке Python и использует библиотеку PyQt. Версии 1.X были основаны на библиотеке MLT. Начиная с версии 2.0 используется своя собственная библиотека LibOpenShot.

Соединение роликов

Демультиплескором

Соединять видеоролики таким способом можно только при условии, что они имеют одинаковый формат: размеры кадра, кодеки, … и т.д.

Создаём файл, в котором перечислено, какие фрагменты из каких файлов необходимо соединить1):

concat.txt
file 'part1.mkv'
 
file 'part2.mkv'
duration 00:00:04.080
inpoint 00:00:02.000
outpoint 00:00:03.000
 
file 'part3.mkv'
duration 300
inpoint 15
outpoint 25

В этом файле part1.mkv, part2.mkv и part3.mkv – видеоролики, части которых нам надо соединить. После параметра duration указывается длительность соответствующего ролика. Параметр inpoint показывает начальный момент времени, с которого нужно считывать фрагмент. Параметр outpoint показывает конечный момент времени в ролике, до которого его нужно считывать. Все эти параметры относятся к предшествующему параметру file. Соответственно, аналогичные параметры, стоящие после второго упоминания file, будут относиться уже ко второму ролику.

Как видим, время можно указывать либо в формате чч:мм:сс.мс, либо одним числом в секундах.

Другой вариант этой процедуры – сначала вырезать нужные фрагменты из каждого ролика:

ffmpeg -ss 00:00:02.000 -i video2.mkv -t 1 part2.mkv
ffmpeg -ss 15 -i video3.mkv -t 10 part3.mkv

затем опустить все параметры в файле concat.txt, оставить только имена файлов:

concat.txt
file 'part1.mkv'
file 'part2.mkv'
file 'part3.mkv'

Затем, когда файл тем или иным образом составлен, можно запустить собственно соединение:

ffmpeg -f concat -i concat.txt -codec copy output.mkv

Фильтром

Применяя фильтр concat, можно соединять даже видеоролики, бывшие в разных форматах и закодированные разными кодеками. Использовать этот фильтр удобно в комбинации с фильтром trim, который вырезает нужный фрагмент из видеоролика. Важно при этом не забыть об одновременном применении фильтра atrim, который вырезает нужный фрагмент из аудиодорожки. Как правило, вырезанные фрагменты видео и аудио должны совпадать по времени.

ffmpeg -i part1.mkv -i part2.mkv -i part1.mkv \
-filter_complex \
"[1:v]trim=start=2:end=3,setpts=PTS-STARTPTS[v1]; \
 [1:a]atrim=start=2:end=3,asetpts=PTS-STARTPTS[a1]; \
 [2:v]trim=15:25,setpts=PTS-STARTPTS[v2];
 [2:a]atrim=15:25,asetpts=PTS-STARTPTS[a2]; \
 [0:v][0:a][v1][a1][v2][a2]concat=n=3:v=1:a=1[out]" \
-map "[out]" output.mkv

Такая команда передаст первый ролик из файла part1.mkv целиком в фильтр concat, т.к. мы не применяли к нему обрезку (trim). При этом видеодорожка из этого файла обозначается [0:v], а аудиодорожка – [0:a]. Из второго входного файла part2.mkv будет вырезан фрагмент со 2й по 3ю секунды, и затем передан фильтру concat под обозначением [v1] для видео и [a1] для аудио. Из третьего файла part1.mkv будет вырезан фрагмент с 15й по 25ю секунды и тоже передан фильтру concat.

Если при вырезании фрагмента будет отсутствовать параметр start=, это обозначает, что фрагмент должен начинаться с самого начала, а если отсутствует параметр end=, это обозначает, что фрагмент должен длиться до конца.

В качестве параметров фильтру concat передаётся количество входных фрагментов (n=3), количество видеодорожек в выходном файле (v=1) и количество аудиодорожек в выходном файле (a=1).

Кодирование видео

Mencoder

XviD

time mencoder -vf yadif=0,hqdn3d=0:0:15:15,scale=360:288 -ovc xvid -xvidencopts bitrate=500:threads=2 -nosound -lavcopts acodec=libmp3lame:abitrate=64  -o /mnt/multimedia/encoded.avi /mnt/multimedia/Мой\ фильм.avi
time mencoder -vf yadif=0,hqdn3d=0:0:15:15 -ovc xvid -xvidencopts bitrate=1200:threads=2 -oac lavc -lavcopts acodec=libmp3lame:abitrate=64  -o /mnt/multimedia/encoded.avi /mnt/multimedia/Мой\ фильм.avi
  time (mencoder -dvd-device /temp/ dvd://1 -vf yadif=0,scale=704:528,dsize=4/3 -nosound -ovc xvid -xvidencopts pass=1:bitrate=1200:threads=2 -o Rojdennie_mislit-1-video.avi && mencoder -dvd-device /temp/ dvd://1 -vf yadif=0,scale=704:528,dsize=4/3 -nosound -ovc xvid -xvidencopts pass=2:bitrate=1200:threads=2 -o Rojdennie_mislit-1-video.avi)

x264

/x264-enc-2p.sh "-nosound /mnt/multimedia/Films/ToRecompress/show_32.avi" 935 "scale=576:432,dsize=4/3,"
x264-enc-2p.sh
#!/bin/bash 
# x264-enc-3p.sh
source="$1" 
bitrate="$2" 
filters="$3" 
name="$(date +%F-%T)".avi 
log="$name".log
 
# With niceness = 19 (the lowest priority
#E1="nice -n 19 mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate"
#E2="nice -n 19 mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate"
 
# With niceness = 0 (normal priority)
#E1="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate"
#E2="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate"
E1="mencoder "$source" -vf "$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate"
E2="mencoder "$source" -vf "$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate"
 
 
time (\
time $E1:pass=1 -o /dev/null && \
time $E2:pass=2 -o "$name" && \
echo "Encoding time:")
 
rm -v divx2pass.log
 
 
#(time (\ 
#time $E1:pass=1 -o /dev/null && \
#time $E2:pass=2 -o "$name" && \
#echo "Encoding time:") &> "$log"; \
#)&
 
#rm -v divx2pass.log
#(time (\ 
#time $E1:pass=1 -o /dev/null && \ 
#time $E2:pass=2 -o "$name" && \ 
#echo "Encoding time:") &> "$log";\ 
#rm -v divx2pass.log*\ 
#) &
 
#(time (\ 
#time $e:pass=1 -o /dev/null && \ 
#time $e:pass=3 -o /dev/null && \ 
#time $e:pass=3 -o "$name" && \ 
#echo "Encoding time:") &> "$log";\ 
#rm -v divx2pass.log*\ 
#) &
#tail -f "$log"
x264-enc-3p.sh
#!/bin/bash 
# x264-enc-3p.sh
source="$1" 
bitrate="$2" 
filters="$3" 
name="$(date +%F-%T)".avi 
log="$name".log
# 21 
#e="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=auto:psnr:ssim: b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate: me_range=32:trellis=2:frameref=16:bframes=16:b_pyramid:weight_b:mixed_refs:direct_pred=auto: keyint=750:keyint_min=25:direct_8x8=-1:aq_mode=1:aq_strength=1.0:psy_rd=1.0,0.0:bitrate=$bitrate"(
#e="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=32:trellis=2:frameref=16:bframes=16:b_pyramid:weight_b:mixed_refs:direct_pred=auto:keyint=750:keyint_min=25:direct_8x8=-1:aq_mode=1:aq_strength=1.0:psy_rd=1.0,0.0:bitrate=$bitrate"
 
# With niceness = 19 (the lowest priority
#E1="nice -n 19 mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate"
#E2="nice -n 19 mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate"
 
# With niceness = 0 (normal priority)
E1="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate"
E2="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate"
 
#E2="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim: b_adapt=2:deblock:cabac:chroma_me:subq=6:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=32:trellis=2:frameref=5:bframes=3:b_pyramid:weight_b:mixed_refs:direct_pred=auto:keyint=750:keyint_min=25:direct_8x8=-1:aq_mode=1:aq_strength=1.0:psy_rd=1.0,0.0:bitrate=$bitrate"
#E2="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate"
 
 
time (\ 
time $E1:pass=1 -o /dev/null && \
time $E2:pass=2 -o "$name" && \
echo "Encoding time:")
 
rm -v divx2pass.log
 
 
#(time (\ 
#time $E1:pass=1 -o /dev/null && \
#time $E2:pass=2 -o "$name" && \
#echo "Encoding time:") &> "$log"; \
#)&
 
#rm -v divx2pass.log
#(time (\ 
#time $E1:pass=1 -o /dev/null && \ 
#time $E2:pass=2 -o "$name" && \ 
#echo "Encoding time:") &> "$log";\ 
#rm -v divx2pass.log*\ 
#) &
 
#(time (\ 
#time $e:pass=1 -o /dev/null && \ 
#time $e:pass=3 -o /dev/null && \ 
#time $e:pass=3 -o "$name" && \ 
#echo "Encoding time:") &> "$log";\ 
#rm -v divx2pass.log*\ 
#) &
#tail -f "$log"

FFMpeg (avconv)

avconv [global options] [[infile options][-i infile]]... {[outfile options] outfile}...

VP8

avconv -i input_movie.mp4 -vcodec libvpx -vb 20k -r 25 -s 320x180 -pass 1 -an -sn -y output_movie-20k.mkv
avconv -i input_movie.mp4 -vcodec libvpx -vb 20k -r 25 -s 320x180 -pass 2 -acodec libvorbis -ac 1 -aq 0 -sn -y output_movie-20k.mkv

x264

Параметры кодека x264

  avconv -ss 60 -i input_movie.avi -vf hqdn3d=10:10:10:10 -vcodec libx264 -vb 2800k -r 30 -acodec libvorbis -ac 1 -aq -1 -sn -t 10 -y output_movie-denoise-2800.mkv

В приведённом примере происходит перекодирование видео с 60-й по 70-ю секунды видеокодеком x264 с потоком видео в 2800 кбит/с, частотой кадров 30 кадров/с и аудиокодеком Vorbis с качеством “-1”.

-ss 60 – перемотка на 60-ю секунду исходного видеофайла

-vf hqdn3d=10:10:10:10 – использование видеофильтра hqdn3d для подавления шумов; объяснение параметров ниже

-vcodec libx264 – использование библиотеки libx264 для кодирования видео

-vb 2800k – видеопоток 2800 кбит/с

-r 30 – частота кадров 30 кадров/с

-acodec libvorbis – использование библиотеки libvorbis для кодирования аудио

-ac 1 – количество каналов в звуковой дорожке; в данном случае – 1 канал

-aq -1 – качество кодирования Vorbis; в данном случае “-1”

-sn – нет субтитров

-t 10 – длительность результирующего видео; в данном случае – 10 секунд

XviD

Согласно инструкции от разработчиков libav, для кодирования видео кодеком XviD нужно указывать параметр -c:v mpeg4. При этом значение параметра fourcc в конечном файле по умолчанию будет выставлено в FMP4. Чтобы изменить это значение, можно воспользоваться параметром -vtag и указать любое значение. Например, -vtag xvid.

avconv -i input_film.VOB -vtag xvid -c:v mpeg4 -b:v 1000k -r 25 -pass 1 -an -sn -y output_movie-1000k.mkv
avconv -i input_film.VOB -vtag xvid -c:v mpeg4 -b:v 1000k -r 25 -pass 2 -acodec libvorbis -aq 1 -ac 2 -sn -y output_movie-1000k.mkv

Кодирование аудио

mplayer -dvd-device /mnt/cdrom/ mplayer dvd://1 -vc null -vo null -ao pcm:file=audio.fifo:waveheader:fast
oggenc -o Rojdennie_mislit-1-audio.ogg -q2 audio.fifo

Фильтры

Видеофильтры

Изменение размера

mplayer -vf crop=620:432:10:0,scale=576:432,dsize=4/3 -nosound /mnt/multimedia/Films/ToRecompress/show_22.avi
mplayer -vf scale=576:432,dsize=4/3 -nosound /mnt/multimedia/Films/ToRecompress/show_26.avi
mplayer -vf scale=576:432,dsize=4/3 -endpos 1497 -nosound /mnt/multimedia/Films/ToRecompress/show_33_34.avi

Обрезка краёв

mplayer -vf crop=624:480:16:0,scale=576:432,dsize=4/3 -ss 1497 -nosound /mnt/multimedia/Films/ToRecompress/show_33_34.avi
mplayer -vf crop=624:480:16:0,scale=576:432,dsize=4/3 -nosound /mnt/multimedia/Films/ToRecompress/show_35.avi

Подавление шумов

mplayer -ss 510 -vf hqdn3d=0:0:15:15 -ao null dvd://2 -dvd-device /mnt/lan/data/Родина\ или\ смерть\!\ \(Фидель\ Кастро\)/

Добавление чёрных полос

Аудиофильтры

Выпуск

Мультиплексирование

mkvmerge -o Rojdennie_mislit-1.mkv Rojdennie_mislit-1-video.avi -y 0:250 Rojdennie_mislit-1-audio.ogg
mkvmerge -o Patria.mkv 2010-05-23-01\:13\:27.avi -y 0:0 /mnt/data/Patria_o_muerte.ogg
mkvmerge -o show_31.mkv 2010-05-23-07\:37\:34.avi -y 0:400 show_31.ogg

Объединение видеодорожки из файла Video.mkv и аудиодорожки из файла Separate_audio.ogg без перекодирования:

ffmpeg -i Video.mkv -i Separate_audio.ogg -map 0:v -map 1:a -сodec copy ResultVideo.mkv

То же самое, с перекодированием только аудиодорожки:

ffmpeg -i Video.mkv -i separate_audio.wav -map 0:v -map 1:a -vcodec copy -acodec libvorbis -q 3 ResultVideo.mkv

Название аудиодорожек2):

ffmpeg -i Video.mkv -i audio1.ogg -i audio2.ogg -map 0:v -map 1:a -map 2:a -codec copy -metadata:s:a:0 title="Звуковая дорожка 1" -metadata:s:a:1 title="Звуковая дорожка 2" ResultVideo.mkv

Создание DVD

Вещание

Полезные ссылки

video.1588799058.txt.gz · В останнє змінено: 2020/05/07 00:04 by wombat