ビデオ講義: UNIX のやり方

ビデオ講義: UNIX のやり方
隔離期間は何かを学ぶのに最適な時期です。 しかし、ご存知のとおり、誰かが何かを学ぶためには、誰かが教えなければなりません。 何百万人もの聴衆にプレゼンテーションを行って世界的な名声を獲得したい場合は、この記事が最適です。 ここでは、プレゼンテーションからビデオを作成する方法を段階的に説明します。

私たちは、PowerPoint で「音声コメント」を録音し、プレゼンテーションをビデオにエクスポートするという方法を、些細なことであり、真に優れたビデオに必要な機能の XNUMX 分の XNUMX も提供していないとして却下します。

まず、必要なフレームを決めましょう。

  1. ナレーション付きの実際のスライド
  2. スライドチェンジ
  3. 人気映画からの引用
  4. 講師の顔とお気に入りの猫を描いたフレーム数点(オプション)

ディレクトリ構造の作成

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

リストの順序でのディレクトリの目的: 引用元の映画 (クリップアート)、将来のビデオの断片 (クリップ)、カメラからのビデオ (記録)、写真形式のスライド (スライド)、サウンド(音)。

写真でプレゼンテーションを行う

目の前の Linux ユーザーにとって、写真の形式でプレゼンテーションを作成することは何の問題もありません。 PDF 形式のドキュメントは、次のコマンドを使用して画像に解析できることを思い出してください。

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

そのようなコマンドがない場合は、自分でパッケージをインストールしてください poppler-utils (Ubuntu の説明書。Arch をお持ちの場合は、私なしで何をすればよいかよくご存知でしょう)。

さらに言えば、ビデオは HD Ready フォーマット、つまり 1280x720 で準備されていると思います。 水平サイズが 10 インチのプレゼンテーションは、アンロードすると正確にこのサイズになります (-r 128 パラメータを参照)。

テキストの準備

本当に素晴らしい資料を作成したい場合は、まずスピーチを書く必要があります。 また、私は講義の経験が豊富なので、準備なしでテキストを話すことができると思いました。 しかし、ライブで演奏することとビデオを録画することは別のことです。 怠ける必要はありません。入力に費やした時間は何倍にもなります。

ビデオ講義: UNIX のやり方

これが私の録音フォーマットです。 タイトルの番号はスライド番号と同じで、中断部分は赤で強調表示されます。 どのエディタでも準備には適していますが、本格的なワードプロセッサを使用することをお勧めします。たとえば、 OnlyOffice.

スライドに音声を加えます

何と言えばいいでしょうか - マイクをオンにして書いてください:)

経験上、最も安価な外部マイクであっても、ラップトップの内蔵マイクよりも録音品質が比較にならないほど優れていることがわかっています。 高品質の装備が必要な場合はこれをお勧めします この記事.

録音に使用したのは オーディオレコーダ – サウンド録音のための非常にシンプルなアプリケーション。 たとえば、ここでそれを取得できます。

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

このステップで重要なことは、ファイルに正しい名前を付けることです。 名前はスライド番号とフラグメント番号で構成されている必要があります。 フラグメントには、1、3、5 などの奇数の番号が付けられます。したがって、図にテキストが示されているスライドの場合、XNUMX つのファイルが作成されます。 002-1.mp3 и 002-3.mp3.

静かな部屋ですべてのビデオを一度に録画した場合は、それ以上何もする必要はありません。 複数のステップで録音した場合は、音量レベルを均等にすることをお勧めします。

mp3gain -r *.mp3

公益事業 mp3gain 何らかの理由で標準リポジトリにはありませんが、ここから入手できます。

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

このすべてが終わったら、別のファイルを無音で録音する必要があります。 無声ビデオにはサウンド トラックを追加する必要があります。一方のビデオにサウンド トラックがあり、もう一方のビデオにはサウンド トラックがない場合、これらのビデオを結合するのは困難です。 無音部分はマイクから録音することもできますが、エディターでファイルを作成することをお勧めします。 大胆さ。 ファイルの長さは少なくとも XNUMX 秒 (それ以上の可能性があります) である必要があり、名前を付ける必要があります。 無音.mp3

中断ビデオの準備中

ここではすべてがあなたの想像力によってのみ制限されます。 エディターを使用してビデオを編集できます Avidemux。 かつては標準リポジトリにありましたが、何らかの理由で削除されました。 これでは私たちは止まりません。

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

このエディターを使用するための手順はインターネット上にたくさんありますが、原則として、そこにあるものはすべて直感的です。 いくつかの条件を満たすことが重要です。

まず、ビデオ解像度がターゲットのビデオ解像度と一致する必要があります。 これを行うには、「出力ビデオ」で XNUMX つのフィルターを使用する必要があります。XNUMX つは解像度を変更する swsResize で、もう XNUMX つはソビエトの「ナロー フォーマット」フィルムをワイド フォーマットに変換する「フィールドの追加」です。 他のすべてのフィルターはオプションです。 たとえば、議論中のフラグメントにシャリコフ氏の発言が含まれている理由を理解できない人がいる場合は、「ロゴの追加」フィルターを使用して、「犬のハート」の上に PostgreSQL ロゴをオーバーレイできます。

次に、すべてのフラグメントで同じフレーム レートを使用する必要があります。 私のカメラと古いソ連のフィルムがそれくらいのフレーム数なので、25 秒あたり XNUMX フレームを使用します。 切り取っているムービーが異なる速度で撮影されている場合は、ビデオのリサンプル フィルターを使用します。

第三に、すべてのフラグメントは同じコーデックで圧縮され、同じコンテナにパッケージ化される必要があります。 したがって、 Avidemux 形式としてビデオを選択します – 「Mpeg4 AVC(x264)"、オーディオ - "AAC (FAAC)"、 出力フォーマット - "MP4マルチプレクサー'。

第 2 に、カットしたビデオに正しく名前を付けることが重要です。 ファイル名はスライド番号とフラグメント番号で構成されている必要があります。 フラグメントには XNUMX から始まる偶数の番号が付けられます。したがって、議論中のフレームでは、中断のあるビデオを呼び出す必要があります。 002-2.mp4

ビデオの準備ができたら、フラグメントを含むディレクトリにビデオを転送する必要があります。 設定 アビデム 設定と異なる ffmpeg デフォルトでは、謎のパラメータ tbr、tbn、tbc が付いています。 再生には影響しませんが、ビデオを接着することはできません。 それでは、再コードしてみましょう:

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

スクリーンセーバーの撮影

ここでもすべてがシンプルです。巧妙な計画を背景に撮影し、結果として得られたビデオをカタログに掲載します。 REC、そこからフラグメントのあるディレクトリに転送します。 命名規則は割り込み引用符の場合と同じで、再コーディング コマンドは次のとおりです。

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

ビデオをスピーチから始める場合は、この断片に名前を付けます 000-1.mp4

静止画からフレームを作成する

静止画像と音声からビデオを編集する時代が来ました。 これは次のスクリプトで実行されます。

#!/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

オーディオ ファイルの長さは最初にユーティリティによって決定されることに注意してください。 ソキシをクリックすると、必要な長さのビデオが編集されます。 私が見つけたすべての推奨事項は、フラグの代わりに、よりシンプルです。 -t ${期間} フラグが使用されています -最短。 実際には ffmpeg mp3 の長さは非常に近似的に決定されるため、編集中にオーディオ トラックの長さがビデオ トラックの長さと大きく (XNUMX ~ XNUMX 秒) 異なる場合があります。 動画全体が XNUMX つのフレームで構成されている場合は問題ありませんが、そのような動画を境界で途切れた状態で貼り付けると、非常に不快なカクつき現象が発生します。

mp3 ファイルの長さを決定するもう XNUMX つの方法は、次の方法です。 mp3情報。 彼女も間違いを犯します、そして時々 ffmpeg 以上を与える mp3情報、時にはその逆、時には両方とも嘘をつきます – 私はどのようなパターンにも気づきませんでした。 そしてここ ソキシ 正しく動作します。

この便利なユーティリティをインストールするには、次の手順を実行します。

sudo apt-get install sox libsox-fmt-mp3

スライド間のトランジションを作成する

トランジションとは、あるスライドが別のスライドに切り替わる短いビデオです。 このようなビデオを作成するには、スライドをペアで撮影し、 imagemagick 一方を他方に変換します。

#!/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}

何らかの理由で、スライドにドットを散在させ、次のスライドをドットから組み立てたいと考えました。そのために、次のスクリプトを書きました。 フェード.pl 持っている imagemagick、実際の Linux ユーザーはどんな特殊効果も作成しますが、散乱を使った私のアイデアが気に入った人のために、スクリプトを次に示します。

#!/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);
}

完成したビデオをマウントします

これですべてのフラグメントが揃いました。 カタログへ行く クリップ 次の XNUMX つのコマンドを使用して、完成したフィルムを組み立てます。

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

感謝している生徒たちに楽しんで見てください!

出所: habr.com

コメントを追加します