「プログラム」カテゴリーアーカイブ

Ubuntu15にFFMPEG

ubuntu15.04 にffmpegをインストールするをみてFFMPEGをインストールしようとしたのですが、一部動かない所があったので、改変し無事できたので、メモ。


#!bin/bash
cd ~
mkdir ffmpeg_sources
# 必要なパッケージのインストール
sudo apt-get update
sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev \
libfreetype6-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev \
libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev unzip nasm
mkdir ~/ffmpeg_sources
# Yasmのインストール
sudo apt-get install yasm

# x264のインストール
cd ~/ffmpeg_sources
git clone --depth 1 git://git.videolan.org/x264.git
cd x264 && ./configure --enable-static \
&& make && sudo make install && make distclean && echo "x264 install ok"

# fdk-aacのインストール
cd ~/ffmpeg_sources
wget -O fdk-aac.zip https://github.com/mstorsjo/fdk-aac/zipball/master
unzip fdk-aac.zip
cd mstorsjo-fdk-aac*
autoreconf -fiv && ./configure --disable-shared && make && sudo make install && make distclean

# libmp3lameのインストール
sudo apt-get install libmp3lame-dev

# lameのインストール
cd ~/ffmpeg_sources
wget http://downloads.sourceforge.net/lame/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --enable-nasm --disable-shared && make && sudo make install && make distclean
# libopusのインストール
cd ~/ffmpeg_sources
wget http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz
tar xzvf opus-1.1.tar.gz
cd opus-1.1
./configure --disable-shared && make && sudo make install && make distclean

# libvpxのインストール
cd ~/ffmpeg_sources
git clone https://chromium.googlesource.com/webm/libvpx
cd libvpx
./configure --disable-examples --disable-unit-tests && make && sudo make install && make clean

# ffmpegのインストール
cd ~/ffmpeg_sources
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure \
--pkg-config-flags="--static" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-nonfree && make && sudo make install && make distclean && hash -r

続きを読む Ubuntu15にFFMPEG

録画した番組・・・

生のTSファイルだと,30分アニメが4~5GBほどの大きさになる.
さすがにそのままだとHDDがいくらあっても足りないので,mp4に圧縮しようと思いつつ,
設定を煮詰めているんですが,気がついたことが一つ.
TSファイル→MP4ファイル→編集
だと,めちゃくちゃ制限あるんだね.
TSファイル→編集→MP4ファイル
だと良いんだろうけど,MP4まで自動で行って,見ながら加工って方法だと,上手くいかないっぽい.
DivXだとかaviファイルだと良いのだろうけど,その辺調べるのがめんどくさい・・・・
つまり,行き着いた先は,
とりあえず録画した番組 → 自動でMP4化,CMなんてそのまんまで保存フォルダ直行
見るために録画した番組 → TSファイルのまま視聴&加工 → MP4化 → 保存フォルダ
とするしかないっぽい.

232cプログラム...その4

おれすげぇwwwwwww
その3までのプログラムをbccでコンパイルしてみたら

■D:\\Documents\\C\\232c> bcc32 -WM -WC get232c_5.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
get232c_5.cpp:
警告 W8057 get232c_5.cpp 141: パラメータ ‘dummy’ は一度も使用されない(関数 sub(void *) )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

警告一つしかでてない!ww
すごいぞ!おれwww
ってか,これが正しく動くか実験できる機器が手元に無い・・・・実家に帰ったときに実験すっかなw
ってか,その頃になると親父殿が先にプログラム仕上げてるんだろうけど....(開発競争中w

232cプログラム...その3

さて,ここから先はスレッド処理関係にすすみますよー

/* ------------------------------------------------------*/
/* 何かキーボードから入力される受信スレッドを開始*/
/* ------------------------------------------------------ */
  printf(“Enterキーを押すと受信スレッドを開始しますn”);
  getchar();
  printf(“受信開始!\\n---------------------\\n”);
  beginthread( sub, 0, &dummy );
/*------------------------------------------------------*/
/* 何かキーボードから入力されるまで受信を継続*/
/*------------------------------------------------------ */
  printf(“Enterキーを押すと受信を終了し、結果を表示しますn”);
  getchar();
/*------------------------------------------------------*/
/* 受信データの出力*/
/*------------------------------------------------------ */
  printf(“受信データの出力!\\n”);
  for ( i=0; i

_beginthreadの使い方ってこれでいいのかなぁ・・・・ちょっと不安
mein()の中身はこれくらいかな.
んで,関数を二つほど作ってみた.

/* ------------------------------------------------------*/
/* スレッドによる受信データの読み込み*/
/*------------------------------------------------------ */
void sub( void *dummy ) {
  while(1) {
    getStrComm( str[imax] );
    imax++;
  }
}

/*------------------------------------------------------*/
/* 受信データの読み込み関数(1行分の文字列)*/
/*------------------------------------------------------ */
void getStrComm( char str[] ) {
  int j=0;
  unsigned long nn;
  char sBuf[1];
  while(1) {
    ReadFile( h, sBuf, 1, &nn, 0 ); // シリアルポートに対する読み込み
    if ( nn==1 ) {
      if ( sBuf[0]==10 || sBuf[0]==13 ) { // ‘\\r’や’\\n’を受信すると文字列を閉じる
        str[j] = ‘\\0’;  
        if (j!=0) break;
      } else {
        str[j] = sBuf[0];
      j++;
      }
    }
  }
}

232cプログラム...その2

前回はどこまでいったっけな・・・・
そうそう,そうだったね,CreateFile()までやったのか.んじゃ,続きを行きましょうかね.

  Ret = SetupComm(     //設定
    h,          //通信デバイスのハンドル:CreateFile()で取得したハンドルを指定
    1024,          //受信バッファーサイズ:受信のバッファーサイズをバイト単位で指定
    1024          //送信バッファーサイズ:送信のバッファーサイズをバイト単位で指定
  );
  if(Ret == FALSE) {    // 失敗した場合
    printf(“SetupComm failed.\\n”);
    CloseHandle(h);
    exit(0);
  }
  Ret = PurgeComm(   //消去
    h,        //通信デバイスのハンドル:CreateFile()で取得したハンドルを指定
    PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR
               //実行する操作上記は未処理の読書きの中止及び送受信のバッファーのクリアを指定
    );
  if(Ret == FALSE) {   //失敗した場合
    printf(“PurgeComm failed.\\n”);
    CloseHandle(h);
    exit(0);
  }
/*----------------------------------------*/
/*BuildCommDCB 関数を用いてDCB構造体を設定*/
/*----------------------------------------*/
  Ret = BuildCommDCB(“baud=9600 parity=N data=8 stop=1”,&dcb);
  if(Ret == FALSE) {                     // 失敗した場合
    printf(“SetCommState failed.\\n”);
    CloseHandle(h);
    exit(0);
  }
/*------------------------------------------------------*/
/* シリアルポートのタイムアウト状態操作      */
/*------------------------------------------------------*/
  GetCommTimeouts( h, &timeout );    // タイムアウトの設定状態を取得
  timeout.ReadIntervalTimeout = 1000;     //(連続して)2文字を受信するときに、はじめの文字(1文字目)を受信してから、次の文字(2文字目)を受信するまでの最大の許容時間(msec)
  timeout.ReadTotalTimeoutMultiplier = 0;   //(受信トータルタイムアウト)
  timeout.ReadTotalTimeoutConstant = 1000; //読込エラー検出用のタイムアウト時間
  timeout.WriteTotalTimeoutMultiplier = 0;   //書き込み1文字あたりの待ち時間
  timeout.WriteTotalTimeoutConstant = 0;   //書き込みエラー検出用のタイムアウト時間
  Ret =SetCommTimeouts( h, &timeout );  // タイムアウトの状態を設定
  if(Ret == FALSE) {                 //失敗した場合
    printf(“SetCommTimeouts failed.\\n”);
    CloseHandle(h);
    exit(0);
  }

SetupComm()PurgeComm(),の詳細はリンク先を参照していただくことにしましょう(めんどくせーw
次は受信部分か・・・・
ってかそろそろ実行できる環境をどうにかしないとwwww
ここまでまだ一度も確認してないって...コンパイルしたら凄いエラーはきそうで怖いっww