mplayer -fs -zoom -vo x11 -display :0.0 /home/Clips/Dakh\ Daughters\ \ Rozy\ \ \ Donbass-IHJprqxIwdc.webm
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
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).
Creating a video from a single image for a specific duration in ffmpeg
ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=320:240 out.mp4
Здесь -t 15
обозначает длительность 15 секунд, а -vf scale=320:240
устанавливает ширину и высоту кадра.
Якщо файли названо:
img001.jpg img002.jpg img003.jpg ...
то поєднати їх в одному відео можна наступною командою:
ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4
При цьому параметр “-r 1/5
” позначає, що одне зображення триматиметься протягом 5 секунд відео. Якщо потрібно змінювати швидше, наприклад, 2 картинки на секунду відео, то можна вказати просто “-r 2
”.
OpenShot – простой видеоредактор. Хорош для простого монтажа и создания видео из фрагментов видеофайлов, аудиофайлов, картинок. Графический интерфейс написан на языке Python и использует библиотеку PyQt
. Версии 1.X были основаны на библиотеке MLT. Начиная с версии 2.0 используется своя собственная библиотека LibOpenShot.
Соединять видеоролики таким способом можно только при условии, что они имеют одинаковый формат: размеры кадра, кодеки, … и т.д.
Создаём файл, в котором перечислено, какие фрагменты из каких файлов необходимо соединить1):
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
, оставить только имена файлов:
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
).
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-enc-2p.sh "-nosound /mnt/multimedia/Films/ToRecompress/show_32.avi" 935 "scale=576:432,dsize=4/3,"
#!/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"
#!/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"
avconv [global options] [[infile options][-i infile]]... {[outfile options] outfile}...
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
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 секунд
Согласно инструкции от разработчиков 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