Video bài giảng: cách unix

Video bài giảng: cách unix
Kiểm dịch là thời gian tuyệt vời để học điều gì đó. Tuy nhiên, như bạn hiểu, để ai đó học được điều gì đó thì phải có người dạy. Nếu bạn có một bài thuyết trình muốn trình bày trước hàng triệu khán giả và đạt được danh tiếng trên toàn thế giới thì bài viết này là dành cho bạn. Tại đây, bạn sẽ tìm thấy hướng dẫn từng bước về cách tạo video từ bản trình bày của mình.

Chúng tôi coi cách ghi “nhận xét bằng âm thanh” trong PowerPoint và xuất bản trình bày sang video là điều tầm thường và không cung cấp XNUMX/XNUMX khả năng cần thiết cho một video thực sự thú vị.

Trước tiên, hãy quyết định xem chúng ta cần những khung nào:

  1. Các slide thực tế có lồng tiếng
  2. thay đổi trang trình bày
  3. Trích dẫn từ các bộ phim nổi tiếng
  4. Một số khung hình có khuôn mặt giảng viên và chú mèo yêu thích của giảng viên (tùy chọn)

Tạo cấu trúc thư mục

.
├── clipart
├── clips
├── rec
├── slide
└── sound

Mục đích của các thư mục theo thứ tự liệt kê: phim mà chúng tôi sẽ lấy trích dẫn (clipart), các đoạn video (clip) trong tương lai của chúng tôi, video từ máy ảnh (rec), slide ở dạng hình ảnh (slide), âm thanh (âm thanh).

Làm bài thuyết trình bằng hình ảnh

Đối với một người dùng Linux mắt đỏ thực sự, việc trình bày dưới dạng hình ảnh không gây ra bất kỳ vấn đề nào. Hãy để tôi nhắc bạn rằng một tài liệu ở định dạng pdf có thể được phân tích cú pháp thành hình ảnh bằng lệnh

pdftocairo -png -r 128 ../lecture.pdf

Nếu không có lệnh như vậy, hãy tự cài đặt gói tiện ích poppler (hướng dẫn dành cho Ubuntu; nếu bạn có Arch thì bạn biết rất rõ phải làm gì nếu không có tôi).

Ở đây và hơn thế nữa, tôi tin rằng video được chuẩn bị ở định dạng HD Ready, tức là 1280x720. Bản trình bày có kích thước ngang 10 inch sẽ cung cấp chính xác kích thước này khi không tải (xem tham số -r 128).

Chuẩn bị văn bản

Nếu bạn muốn tạo ra một tài liệu thực sự tuyệt vời, bài phát biểu của bạn cần phải được viết trước tiên. Tôi cũng nghĩ rằng tôi có thể nói văn bản mà không cần chuẩn bị trước, đặc biệt vì tôi có kinh nghiệm giảng dạy tốt. Nhưng biểu diễn trực tiếp là một chuyện và quay video là một chuyện khác. Đừng lười biếng – thời gian dành cho việc gõ phím sẽ được đền đáp gấp nhiều lần.

Video bài giảng: cách unix

Đây là định dạng ghi âm của tôi. Số ở tiêu đề bằng số slide, các đoạn ngắt quãng được đánh dấu màu đỏ. Bất kỳ trình soạn thảo nào cũng phù hợp để chuẩn bị, nhưng tốt hơn là bạn nên sử dụng một trình xử lý văn bản chính thức - ví dụ: Văn phòng duy nhất.

Giọng nói trên các slide

Tôi có thể nói gì - bật micro và viết :)

Kinh nghiệm cho thấy chất lượng ghi âm ngay cả từ micrô bên ngoài rẻ nhất cũng tốt hơn nhiều so với micrô tích hợp của máy tính xách tay. Nếu bạn muốn thiết bị chất lượng, tôi khuyên bạn nên dùng nó đây là bài viết này.

Để ghi âm tôi đã sử dụng máy ghi âm – một ứng dụng rất đơn giản để ghi âm. Bạn có thể lấy nó, ví dụ, ở đây:

sudo add-apt-repository ppa:audio-recorder/ppa
sudo apt-get update
sudo apt-get install audio-recorder

Điều chính ở bước này là đặt tên chính xác cho các tập tin. Tên phải bao gồm số slide và số đoạn. Các đoạn được đánh số bằng số lẻ - 1, 3, 5, v.v. Vì vậy, đối với trang chiếu có văn bản hiển thị trong hình, hai tệp sẽ được tạo: 002-1.mp3 и 002-3.mp3.

Nếu bạn quay tất cả các video cùng một lúc trong một căn phòng yên tĩnh, bạn không cần phải làm gì thêm với chúng. Nếu bạn đã ghi âm theo một số bước, tốt hơn là bạn nên cân bằng mức âm lượng:

mp3gain -r *.mp3

Tiện ích mp3gain Vì một số lý do, nó không có trong kho tiêu chuẩn, nhưng bạn có thể lấy nó ở đây:

sudo add-apt-repository ppa:flexiondotorg/audio
sudo apt-get update
sudo apt-get install mp3gain

Sau tất cả những điều này, bạn cần ghi lại một tập tin khác trong im lặng. Việc thêm đoạn âm thanh vào video im lặng là cần thiết: nếu một video có đoạn âm thanh còn video kia không có thì rất khó để gắn các video này lại với nhau. Sự im lặng có thể được ghi lại từ micrô, nhưng tốt hơn là nên tạo một tệp trong trình chỉnh sửa Bạo dạn. Độ dài tệp phải ít nhất là một giây (có thể nhiều hơn) và phải được đặt tên im lặng.mp3

Đang chuẩn bị video gián đoạn

Ở đây mọi thứ chỉ bị giới hạn bởi trí tưởng tượng của bạn. Bạn có thể sử dụng trình chỉnh sửa để chỉnh sửa video Avidemux. Ngày xưa nó nằm trong kho tiêu chuẩn, nhưng sau đó vì lý do nào đó nó đã bị cắt bỏ. Điều này sẽ không ngăn cản chúng tôi:

sudo add-apt-repository ppa:ubuntuhandbook1/avidemux
sudo apt-get update
sudo apt-get install avidemux2.7-qt5

Có rất nhiều hướng dẫn để làm việc với trình soạn thảo này trên Internet và về nguyên tắc, mọi thứ đều trực quan. Điều quan trọng là phải đáp ứng một số điều kiện.

Đầu tiên, độ phân giải video phải phù hợp với độ phân giải video mục tiêu. Để thực hiện việc này, bạn cần sử dụng hai bộ lọc trong “video đầu ra”: swsResize để thay đổi độ phân giải và “thêm trường” để biến phim “định dạng hẹp” của Liên Xô thành định dạng rộng. Tất cả các bộ lọc khác là tùy chọn. Ví dụ: nếu ai đó không hiểu tại sao tuyên bố của ông Sharikov lại nằm trong đoạn đang thảo luận, bằng cách sử dụng bộ lọc “thêm logo”, bạn có thể phủ logo PostgreSQL lên trên “Tim chó”.

Thứ hai, tất cả các mảnh phải sử dụng cùng tốc độ khung hình. Tôi sử dụng 25 khung hình mỗi giây vì máy ảnh của tôi và các bộ phim Liên Xô cũ cho tôi nhiều như vậy. Nếu phim bạn đang cắt được quay ở tốc độ khác, hãy sử dụng bộ lọc Resample Video.

Thứ ba, tất cả các phân đoạn phải được nén bằng cùng một codec và được đóng gói trong cùng một thùng chứa. Vì vậy, trong Avidemux đối với định dạng, hãy chọn video – “MPEG4 AVC (x264)", âm thanh -"AAC (FAAC)", định dạng đầu ra - "Muxer MP4'.

Thứ tư, điều quan trọng là phải đặt tên chính xác cho các video đã cắt. Tên tệp phải bao gồm số slide và số đoạn. Các đoạn được đánh số chẵn, bắt đầu từ 2. Do đó, đối với khung đang thảo luận, video bị gián đoạn phải được gọi là 002-2.mp4

Sau khi các video đã sẵn sàng, bạn cần chuyển chúng vào thư mục có các đoạn. Cài đặt avidemux khác với cài đặt ffmpeg mặc định với các thông số bí ẩn tbr, tbn, tbc. Chúng không ảnh hưởng đến việc phát lại nhưng không cho phép các video được dán lại với nhau. Vì vậy, hãy mã hóa lại:

for f in ???-?.mp4;
do
  ffmpeg -hide_banner -y -i "${f}" -c copy -r 25 -video_track_timescale 12800 ../clips/$f
done

Chụp màn hình bảo vệ

Ở đây, mọi thứ đều đơn giản: bạn quay dựa trên phông nền của một kế hoạch thông minh nào đó, đưa các video thu được vào danh mục rec, và từ đó chuyển nó vào thư mục có các đoạn. Quy tắc đặt tên cũng giống như đối với dấu ngoặc kép, lệnh mã hóa lại như sau:

ffmpeg -y -i source_file -r 25 -vcodec libx264 -pix_fmt yuv420p -profile:v high -coder 1 -s 1280x720 -ar 44100 -ac 2 ../clips/xxx-x.mp4

Nếu bạn định bắt đầu video bằng bài phát biểu của mình, hãy đặt tên cho đoạn này 000-1.mp4

Tạo khung từ ảnh tĩnh

Đã đến lúc chỉnh sửa video từ hình ảnh và âm thanh tĩnh. Điều này được thực hiện với đoạn script sau:

#!/bin/bash

for sound in sound/*.mp3
do
  soundfile=${sound##*/}
  chunk=${soundfile%%.mp3}
  clip=${chunk}.mp4
  pic=slide/${chunk%%-?}.png

  duration=$(soxi -D ${sound} 2>/dev/null)
  echo ${sound} ${pic} ${clip} " - " ${duration}

  ffmpeg -hide_banner -y -loop 1 -i ${pic} -i ${sound} -r 25 -vcodec libx264 -tune stillimage -pix_fmt yuv420p -profile:v high -coder 1 -t ${duration} clips/${clip}
done

Xin lưu ý rằng thời lượng của tệp âm thanh trước tiên được xác định bởi tiện ích soxi, sau đó video có độ dài yêu cầu sẽ được chỉnh sửa. Tất cả những đề xuất tôi tìm thấy đều đơn giản hơn: thay vì một lá cờ -t ${duration} cờ được sử dụng -mới nhất... Thật ffmpeg xác định độ dài của mp3 rất gần đúng và trong quá trình chỉnh sửa, độ dài của đoạn âm thanh có thể khác nhau rất nhiều (một hoặc hai giây) so với độ dài của đoạn video. Điều này không thành vấn đề nếu toàn bộ video bao gồm một khung hình duy nhất, nhưng khi bạn dán một video như vậy bị gián đoạn ở viền, hiệu ứng giật hình cực kỳ khó chịu sẽ xảy ra.

Một cách khác để xác định thời lượng của tệp mp3 là sử dụng mp3thông tin. Cô ấy cũng mắc lỗi, và đôi khi ffmpeg mang lại nhiều hơn mp3thông tin, đôi khi thì ngược lại, đôi khi cả hai đều nói dối – tôi không nhận thấy bất kỳ khuôn mẫu nào. Và đây soxi hoạt động chính xác

Để cài đặt tiện ích hữu ích này, hãy làm như sau:

sudo apt-get install sox libsox-fmt-mp3

Thực hiện chuyển tiếp giữa các slide

Chuyển tiếp là một đoạn video ngắn trong đó một slide chuyển thành một slide khác. Để thực hiện những video như vậy, chúng tôi ghép các slide theo cặp và sử dụng ImageMagick biến đổi cái này thành cái khác:

#!/bin/bash

BUFFER=$(mktemp -d)

for pic in slide/*.png
do
  if [[ ${prevpic} != "" ]]
  then
    clip=${pic##*/}
    clip=${clip/.png/-0.mp4}
    #
    # генерируем картинки
    #
    ./fade.pl ${prevpic} ${BUFFER} 1280 720 5 direct 0
    ./fade.pl ${pic} ${BUFFER} 1280 720 5 reverse 12
    #
    # закончили генерировать картинки
    #
    ffmpeg -y -hide_banner -i "${BUFFER}/%03d.png" -i sound/silence.mp3 -r 25 -y -acodec aac -vcodec libx264 -pix_fmt yuv420p -profile:v high -coder 1 -shortest clips/${clip}
    rm -f ${BUFFER}/*
  fi
  prevpic=${pic}
done

rmdir ${BUFFER}

Vì lý do nào đó, tôi muốn slide có nhiều dấu chấm rải rác, sau đó slide tiếp theo sẽ được tập hợp từ các dấu chấm, và để làm được điều này, tôi đã viết một đoạn script có tên phai.pl Đang có ImageMagick, một người dùng Linux thực sự sẽ tạo ra bất kỳ hiệu ứng đặc biệt nào, nhưng nếu ai đó thích ý tưởng của tôi với sự phân tán thì đây là kịch bản:

#!/usr/bin/perl

use strict;
use warnings;
use locale;
use utf8;
use open qw(:std :utf8);
use Encode qw(decode);
use I18N::Langinfo qw(langinfo CODESET);

my $codeset = langinfo(CODESET);
@ARGV = map { decode $codeset, $_ } @ARGV;

my ($source, $target, $width, $height, $pixsize, $rev, $file_no) = @ARGV;

my @rects;
$rects[$_] = "0123456789AB" for 0..$width*$height/$pixsize/$pixsize/12 - 1;

for my $i (0..11) {
  substr($_,int(rand(12-$i)),1) = "" for (@rects);
  my $s = $source;
  $s =~ s#^.*/##;
  open(PICTURE,"| convert - -transparent white PNG:- | convert "$source" - -composite "$target/".substr("00".($file_no+$i),-3).".png"");
  printf PICTURE ("P3n%d %dn255n",$width,$height);
  for my $row (1..$height/$pixsize/3) {
    for my $j (0..2) {
      my $l = "";
      for my $col (1..$width/$pixsize/4) {
        for my $k (0..3) {
          $l .= (index($rects[($row-1)*$width/$pixsize/4+$col-1],sprintf("%1X",$j*4+$k))==-1 xor $rev eq "reverse") ? "0 0 0n" : "255 255 255n" for (1..$pixsize);
        }
      }
      print PICTURE ($l) for (1..$pixsize);
    }
  }
  close(PICTURE);
}

Chúng tôi gắn kết video đã hoàn thành

Bây giờ chúng ta có tất cả các mảnh vỡ. Đi đến danh mục clip và lắp ráp bộ phim đã hoàn thành bằng hai lệnh:

ls -1 ???-?.mp4 | gawk -e '{print "file " $0}' >list.txt
ffmpeg -y -hide_banner -f concat -i list.txt -c copy MOVIE.mp4

Chúc các em học sinh biết ơn của mình vui vẻ theo dõi!

Nguồn: www.habr.com

Thêm một lời nhận xét