[動画処理] ストリーミングとプログレッシブダウンロードの違い

現在参画している動画を扱うプロジェクトのスタッフの中に「ストリーミング」と「プログレッシブダウンロード」を混同している人が割と多くいることに気づいた。制作中のサイトに関して「この動画はストリーミングでは配信されないの?」と聞かれたので、「ストリーミングサーバーは契約していないから出来ないよ」と答えると、「YouTubeみたいにストリーミング再生できると思ったのに」と返される。こういう誤解は、マーケティングなど非技術系のスタッフに多いように思う。

YouTubeはプログレッシブダウンロード

YouTubeの動画配信はストリーミングではなく、プログレッシブダウンロード。プログレッシブダウンロードを「擬似ストリーミング」と呼ぶ人がいるので話がややこしくなる。ストリーミングとプログレッシブダウンロードの大きな違いは、前者はサーバーから受け取ったデータをファイルに保存せずに再生したら捨ててしまうのに対して、後者は受け取ったデータをファイルに保存した端から再生していくところ。従って、YouTubeで再生した動画がブラウザのキャッシュに残るのに対して、ストリーミングで再生した動画はキャッシュには残らない。

ストリーミングは動画のライブ配信に使われることが多いように思う。ストリーミングサーバーの使用料はストリーム単位で課金されるので、予想外の課金にびっくりしないように、ピーク時に必要なストリーム数を適切に試算する必要がある。ちなみに、ストリーミングには「アダプティブストリーミング」と呼ばれる、回線容量によって動画の品質を変えながら配信するストリーミング技術もあるらしい。

参考サイト

Streaming Vs. Progressive Download Vs. Adaptive Streaming
http://www.onlinevideo.net/2011/05/streaming-vs-progressive-download-vs-adaptive-streaming/

[動画処理] Free Video Jointerの動画結合機能は優秀

動画ファイルを連結できるソフトをいろいろ試した結果、Free Video Converterというソフトが割と優秀だったので紹介しとく。

Free Video Converter | MP4 MP3 iPhone AVI FLV 動画変換フリー
http://www.freemake.com/jp/free_video_converter/

操作がちょっとわかりにくいけど、メインウィンドウ右上の[Join files]をONに設定するとファイルの結合ができる。処理開始前にビットレートなどのオプションが指定できるところから推測すると、単にファイルを連結するだけでなくエンコード処理も行っている模様。実行中はCPUパワーをかなり食っているので、たぶん間違いない。でも、もしきちんとエンコードしているとしたら、ffmpegよりも処理時間はかなり短い。

連結後のMP4ファイルを確認したら、僅かに音ズレしているものがあったけど、ソフトのせいかどうかは定かじゃない。ソースが悪かったかも。用途によっては、このソフトはかなり役立つかも。

[動画処理] 動画を連結する場合は再エンコードしたほうが間違いない

MP4やWMVのファイルを結合したい場合、再エンコードに時間が掛かるのを嫌って簡単に結合できるソフトをネットで探すことがある。実際にネットを検索すると、以下のような動画連結機能を備えた便利なソフトが見つかった。

これらのソフトは期待通りの結果を出力してくれることが多いけど、動画形式によっては連結後の動画に、オーディオトラックの欠落、音ズレ、属性情報の破損などの問題が見られる場合も少なくない。

基本的にMPEGはフレーム間の差分をデータ圧縮に使っているので、再エンコードなしでは問題が起きる可能性が高まりそうな気がする。動画配布後に問題が発覚して青ざめるのは嫌ならば、結果が怪しいときには手間を惜しまずに再エンコードしたほうが間違いない。

[バッチファイル] サブディレクトリを巡回しながらアーカイブを作成するには

バッチファイルを使って以下の処理を行う方法を考える。

カレントディレクトリに沢山のサブディレクトリが存在し、それぞれのサブディレクトリに画像ファイルが多数格納されているとする。バッチファイルを使って、サブディレクトリごとに中身のファイルをアーカイブして、カレントディレクトリにZIPファイルとして保存してみよう。

このバッチファイルでは、サブディレクトリを巡回し、サブディレクトリ名を引数にしてmakezip.batを呼び出している。

このバッチファイルでは、7-Zipのコマンドライン版(7za.exe)を使ってサブディレクトリ内の全jpgファイルをアーカイブし、カレントディレクトリにサブディレクトリ名のZIPファイルとして保存している。バッチファイル内でディレクトリを移動しているのは、カレントディレクトリからアーカイブを行わないとアーカイブ内にサブディレクトリ名が相対パスとして保存されてしまうため。すなわち解凍すると、まずサブディレクトリが作成されて、その中にファイルが展開されることになる。それを避けるため。

簡単なバッチファイルだけど、テンプレートとして用意しておくと使い回しができそう。

[バッチファイル] サブディレクトリを巡回するには

バッチファイルでサブディレクトリを巡回しながら処理を実行したいことがある。以下のバッチファイルでディレクトリを巡回できる。このバッチファイルでは、カレントディレクトリのワイルドカード(*)からディレクトリのみ(/d)を取り出して、do以下の処理を行っている。

もしdo以下に複数の命令を書きたい場合は、ラベルに飛ばしてexit /bで戻るとか。

あるいは別のバッチファイルを呼び出しても良い。

For – DOS コマンド一覧
http://pf-j.sakura.ne.jp/program/dos/doscmd/for.htm

Call – DOS コマンド一覧
http://pf-j.sakura.ne.jp/program/dos/doscmd/call.htm

[バッチファイル] ファイル名を小文字に一括変換するには

ファイル名に大小文字が混ざったJPEGファイルを全て小文字のファイル名に変更したいというニーズあり。単純に大文字を小文字にするだけ。例えばTestImage0001.jpgだったらtestimage001.jpgにする。だけど、ファイルが数百個というオーダーで大量にあるので手作業でやってるわけにはいかない、というわけでバッチファイルを使う。

バッチファイルで大文字・小文字を変換する

以下の記述により、%STRに含まれる文字列中の’A’を’a’に変換できる。

アルファベット25文字全部に関してこの処理を行えば大文字を全て小文字にできるけど、バッチファイルに25行の記述を書くのは芸が無いのでループを使おう。

以下が参考サイト。

バッチファイルで変数の大文字・小文字を変換する。 – 片っ端から忘れていけばいいじゃない。
http://0xc000013a.blog96.fc2.com/blog-entry-210.html

バッチファイルで大文字、小文字に変換する。: Windows Script Programming
http://scripting.cocolog-nifty.com/blog/2010/04/post-426e.html

BATファイルで文字列の切り出し
http://www.upken.jp/kb/kZwpzAqblKfZDjtMXuWuwioeExKNdE.html

この仕組みを使ってファイル名を大文字から小文字に変換するバッチファイルを書く。

ディレクトリ中のファイルをスキャンして一括で処理する

次はカレントディレクトリ中の全JPEGファイルをスキャンして、上で作成したバッチファイルを使ってファイル名を小文字にするためのバッチファイルを作成する。

バッチファイルも知れば意外にいろんなことができる。

[バッチファイル] ファイル名に連番を付けてファイルをコピーするには

バッチファイルを工夫してファイル名にフレーム番号が含まれるように画像ファイルをコピーしたい。だけど、たとえバッチファイルで出来そうと思っても、バッチファイルなんて日常的に使わないので命令や構文はほとんど覚えてない。ネットで再勉強。やりたいことは、まさに以下のサイトで説明している通り。説明が丁寧で分かりやすくて感謝。

バッチファイルでファイル名に連番を付けてコピーする~実行解説
http://dalmore.blog7.fc2.com/blog-entry-77.html

参考サイト

バッチファイルで使える命令や構文については以下のサイトが参考になる。

開発に役立つ,BATファイルの書き方・パターン集 (コマンドプロンプトの定石を体系的に学び,バッチ中級者になろう) – 主に言語とシステム開発に関して
http://d.hatena.ne.jp/language_and_engineering/20130502/PatternsOfMSDOSorBAT

コマンドプロンプトを使ってみよう! -バッチファイル-
http://ykr414.com/dos/dos05.html

[Audacity] 無音ファイルを作成するには

Audacityを使うと無音のサウンドファイルを簡単に作成できる。以下覚え書き。

  1. Audacityを起動
  2. [Tracks]-[Add New]-[Stereo Track]メニューを選択
  3. [Generate]-[Silence…]メニューを選択
  4. [Duration]に無音時間を入力
  5. [File]-[Export…]メニューを選択し望みのファイル形式で保存

Audacity: フリーのオーディオ編集および録音ソフトウェア
http://audacity.sourceforge.net/?lang=ja

[ffmpeg] 複数の動画ファイルから一括して音声を抜き出す

以前に動画から音声を抜き出す方法について書いた。

[ffmpeg] 動画から音声を抜き出すには
http://www.84kure.com/blog/?p=354

常用しているパソコンにはYouTube等から拾ってきた音楽動画をいろいろ保存してあるので、バッチファイルを使って複数の動画ファイルから一括して音声を抜き出してみる。

まずは単一の動画ファイルから音声を抜き出してMP3形式で保存するバッチファイルを作成し、オプションに動画ファイル名を指定して実行する。音声ファイルは、mp3というサブディレクトリに、動画ファイルの拡張子をmp3に変更したファイル名で保存される。

mp3.bat

次はディレクトリ内の動画ファイルをスキャンして上のバッチファイルをコールする親バッチファイルを作成。音声ファイルの出力先となるmp3というサブディレクトリが存在しなければ最初に作成するようにしておく。

mp3all.bat

バッチファイルを用意しておくと楽。

[ffmpeg] 動画から1分おきに静止画をキャプチャするには

動画の先頭から1分おきに静止画をキャプチャするニーズあり。静止画をキャプチャする方法は以前にも書いたけど、-r オプションでフレームレートを指定して一定間隔にキャプチャできる。しかしフレームレートには0.05より小さな値は指定できない(指定すると値が小さすぎるとメッセージが表示されて処理されず)。従って、大きめのフレームレートを指定して多めに静止画をキャプチャしてから、不用な静止画を間引くという二段階の作業が必要。

30フレーム/秒の動画から10秒おきに静止画をキャプチャする

ソース動画が30fpsの場合、以下のオプションで10秒ごとに静止画をキャプチャできる。

-ss オプションで冒頭5秒はスキップしているはずだけど、なぜか僕の環境だと冒頭の1分間で8枚の静止画がキャプチャされた。すなわち9枚目の静止画が冒頭から1分ちょうどのフレームね。そうして全ての静止画がキャプチャされたら冒頭の8枚の静止画を削除して、次の1枚を保存してそれに続く5枚を削除、またその次1枚を保存しそれに続く5枚を削除する。そうして残ったのが1分おきの動画キャプチャ画像群。