Отделка:
ffmpeg -i input.mts -ss 00:00:20.0 -c copy -t 00:00:30.0 output.mkv
Ищите 20 секунд -(i )n input.mkv (и отбрасываете, по умолчанию )пусть играет 30 секунд и отбрасываете оттуда все остальное. Итак, у вас есть 30-секундное видео.
Исчезновение
Сначала вам нужно создать изображение для фейда. Вероятно, одно изображение *. png, полностью белое или полностью черное, в зависимости от вашего вкуса. Желательно в том же разрешении, в котором было записано ваше видео.
ffmpeg -r 1/2 -i black.png -c:v libx264 -r 50 -y -pix_fmt yuv420p fade2s.mkv
Это означает, что затемнение 2 секунды (-r ввод :1 / 2 x 50 кадров в секунду = 100 кадров в секунду ). Информацию об изображении вы можете найти в The Gimp или ImageMagick. Теперь у вас есть эффект затухания.
Постепенное появление:
ffmpeg -i fade2s.mkv -y -vf fade=in:0:50 fade_in.mkv
Нарастание от 0 до 50 кадров (1 секунда -50 кадров в секунду)
Постепенное появление + исчезновение:Возьмите последний ввод в качестве нарастания и добавьте немного затухания
ffmpeg -i fade_in.mkv -y -vf fade=out:120:50 fade_in_out.mkv
Готово.
Сawk
:
awk '{ printf("%.3g %.3g\n", $1, $2) }' file
При заданных данных получается
0.993 0.00704
0.646 0.354
0.993 0.00704
0.993 0.00704
0.993 0.00704
0.993 0.00704
0.993 0.00704
0.993 0.00704
0.5 0.5
Обратите внимание, что 0,00704 имеет пять десятичных знаков, но три значащих цифры.
Если вы хотите ровно три десятичных знака, используйте %.3f
вместо %.3g
и получите
0.993 0.007
0.646 0.354
0.993 0.007
0.993 0.007
0.993 0.007
0.993 0.007
0.993 0.007
0.993 0.007
0.500 0.500
Приведенные выше два варианта могут быть обобщены для переменного количества столбцов с использованием GNUawk
:
awk -v CONVFMT='%.3g' '{ for (i=1; i<=NF; ++i) $i+=0; print }' file
Цикл с $i+=0
заставляет awk
повторно -форматировать значение каждого поля как число с плавающей запятой, что он будет делать, принимая во внимание CONVFMT
(, что он будет более или менее делать эквивалент$i=sprintf(CONVFMT, $i)
).
Если вы хотите вырезать цифры:
awk '{ for (i=1; i<=NF; ++i) $i=sprintf("%.5s", $i); print }' file
Это обрабатывает числа как строки и обрезает их после пяти символов (, что предполагает, что все числа меньше 10 и больше нуля ), генерируя
0.992 0.007
0.646 0.353
0.992 0.007
0.992 0.007
0.992 0.007
0.992 0.007
0.992 0.007
0.992 0.007
0.5 0.5
Для более общего сокращения чисел:
awk '{ for (i=1; i<=NF; ++i) if (match($i,".*\\.[0-9]?[0-9]?[0-9]?")) $i=substr($i,RSTART,RLENGTH); print }' file
Операция в цикле обрезает числа в точке, в которой заканчивается совпадение данного регулярного выражения (, если оно соответствует ).
В ваших данных нет чисел выше 1. Я расширил исходный файл, включив в него некоторые значения с большим количеством цифр перед точкой:
$ cat infile
0.992957746478873 0.00704225352112677
0.646410833917366 0.353589166082634
0.992957746478873 0.00704225352112677
0.5 0.5
16.258137489137 333444.277775666
16.233399999999 333777.277111111
Одним из возможных решений является использование C-совместимой функции printf (В awk есть одна):
Точное число 3 (округленных )десятичных знаков:
$ awk '{ printf("%11.3f %11.3f\n", $1,$2) }' infile
0.993 0.007
0.646 0.354
0.993 0.007
0.500 0.500
16.258 333444.278
16.233 333777.277
Обратите внимание, что 0.992957746478873
округляется до 0.993
.
Точное количество 3 (значащих )цифр:
$ awk '{ printf("%9.3g %9.3g\n", $1,$2) }' infile
0.993 0.00704
0.646 0.354
0.993 0.00704
0.5 0.5
16.3 3.33e+05
16.2 3.34e+05
Обратите внимание на округление четвертой цифры (, например 3.34e+05)
Ровно 3 (не округленные )цифры после запятой.
Использование GNU awk:
$ gawk '{for(i=1;i<=NF;i++){
printf( "%12s ",gensub(/([0-9]+\.[0-9]{0,3}).*/, "\\1", "g", $i))};print""}
' infile
0.992 0.007
0.646 0.353
0.992 0.007
0.5 0.5
16.258 333444.277
16.233 333777.277
Использование sed (возможно быстрее):
$ sed -E 's/([0-9]+\.[0-9]{1,3})[^ ]*/\1/g' infile
0.992 0.007
0.646 0.353
0.992 0.007
0.5 0.5
16.258 333444.277
16.233 333777.277