ffmpeg -y -i myVideo.mp4 -vf yadif \
-c:v libx264 -profile:v high -preset:v fast \
-x264opts min-keyint=15:keyint=1000:scenecut=20 -b:v 2000k \
-c:a aac -b:a 128k \
-f segment -segment_format mp4 -segment_time 0.01 -segment_format_options movflags=faststart \
scene%05d.mp4
via ffmpeg \
-ss 15 \
-i input.mp4 \
-t 75 \
-c copy \
output_15_90.mp4
пропустить 15 секунд от начала, взять фрагмент длиной 75 сек, сохранить без перекодирования в файл output_15_90.mp4ffmpeg \
-ss 15 \
-i input.mp4 \
-vf scale=854:-2 \
-t 75 \
-c:v libx264 \
-c:a aac \
output_15_90.mp4
сделать ширину кадра 854 точки, высоту пропорционально но кратно 2 (требование кодека), видео сжать софтверным h264, аудио кодеком AAC.libx264
— h264_videotoolbox
SRC="/var/tmp/nu-pogodi.mp4"
ffmpeg \
-i "$SRC" \
-vf "hflip" \
-c:v libx264 \
-c:a copy \
"$SRC-flip.mp4"
Медленная и тяжёлая часть работы тут — пережатие видео в h264. Его не избежать, к сожалению.ffmpeg \
-ss 12 \
-i video.mp4 \
-t 22 \
audio_12_34.wav
ffmpeg \
-ss 15 \ # пропустить 15 секунд от начала
-i Source.mp4 \ # имя исходного файла
-t 30 \ # продолжительность 30 сек.
-c copy \ # кодек "копия" - не перекодировать
Result.mp4 # что получится - в этот файл
только удалите все комментарии – после слешей должен сразу быть перенос строки. Этот вариант, пожалуй, самый быстрый из возможных. h264
а звук в AAC
– это стандарт де-факто для видео в вебе.720 / 9 * 16 ~= 968
(должно делиться на 4 — требование кодека). Т.е. сделать 968x544
ffmpeg.exe -ss 1:23:45 -to 1:25:00 -i "Kino.mp4" -c copy "kusok.mp4"
вырежет из файла Kino с 1ч 23 минуты 45 секунд до 1 час 25 минут ровно.-c copy
указывает, что кодеки оставить те же, перекодирвания не будет. -vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=foo.ttf: y=h-line_h-10:x=(mod(5*n\,w+tw)-tw): fontcolor=white: fontsize=40: shadowx=2: shadowy=2"
viaffmpeg \
-i source_video.mp4 \
-vf........ (та длинная строка выше) \
-c:v libx264 \
-movflags +faststart \
-c:a aac \
-hide_banner \
output.mp4
ffmpeg -ss 16:27.600 -i movie.mp4 -t 5:55 audio.wav
ffmpeg -hide_banner -i movie.mkv
-map
:ffmpeg -ss 16:27.600 -i movie.mp4 -map 2:a -t 5:55 audio.wav
[avi @ 000000000043f780] non-interleaved AVI
означает, что в AVI файле отдельно записано всё видео одним куском, потом отдельным сплошным куском всё аудио. А задумаывалось, чтобы они часто чередовались, и плеер считав в буфер кусок, мог проиграть видео и соответствующее ему аудио сразу.ffmpeg -i 01.avi -c:v libx264 -c:a aac 01_youtube.mp4
fps=1/16
берет 1 кадр из 16 секунд.fps
, чтобы получилось 80 кадров: fps=80/длина_видео_в_секундах
thumbnail
– он выбирает наиболее значимый кадр и серии кадров. Работает чуть медленнее и требует больше памяти, но выбранные кадры получаются лучше - без размытого движения и т.п. Тут тоже нужно знать длину видео и частоту кадров, т.е. общее число кадров в видео. И разделить его на 80. Например, видео длиной 15 минут с частотой кадров 30 даёт 30 * 15 * 60 = 27000 кадров. Разделить на 80 получится 337.5 кадров. Т.е. нужно бы использовать вместо fps=..
фильтр thumbnail=338
FILTER="[0] \
pad=color=0x99999900:w=${wIn}:h=${hIn}:x=${xPad}:y=${yPad}, \
scale=20064x3264, \
zoompan= \
s=${wSrc}x${hSrc} \
:d=${frames} \
:z='( ${zoomcode} ) / 16.89999' \
:x='2*(${xPad} + ${xPoi}) * (zoom - 1) / zoom' \
:y='2*(${yPad} + ${yPoi}) * (zoom - 1) / zoom' \
[fg]; \
[1][fg]overlay=x=247:y=438 \
"