OS : Ubuntu 10.4
Target : Android Froyo
Creator : hojun baek
참조 : 02. 우분투 10.4 기반 안드로이드 빌드 환경 구축 및 소스 받기, 빌드

1. 안드로이드의 원활한 개발을 위해 Samba, SSH 를 설치 합니다.
sudo apt-get install samba
sudo apt-get install ssh
sudo /etc/init.d/ssh restart

2. 빌드를 위한 필요 패키지 설치

sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

sudo apt-get install git-core gnupg gcc-multilib libx11-dev x11proto-core-dev

sudo apt-get install valgrind

저장소를 가져오기 위한 몇가지 패키지 설치
sudo apt-get install git-core gnupg

3. JAVA JDK 설치
* sun-java5-jdk를 찾지 못하였을 경우
sudo apt-get update 를 이용하여 리스트를 최신화시켜줌.

안드로이드 2.2 인 경우에는 반드시 1.5 버젼을 설치하셔야 하고,
안드로이드 2.1 인 경우에는 필요하신 버젼으로 설치하시면 됩니다.

/etc/apt/sources.list 에 다음 내용 추가
cd /
sudo vi /etc/apt/sources.list

deb http://kr.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://kr.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

자바 1.5 : sudo apt-get install sun-java5-jdk
자바 1.6 : sudo apt-get install openjdk-6-jdk

설치가 완료된 후

java -version(버젼 확인)
ls -al /etc/alternatives/java

자바 1.5 : ls -s /usr/lib/jvm/java-1.5.0-sun/jre/bin/java /etc/alternatives/java
자바 1.6 : ls -s /usr/lib/jvm/java-1.6.0-openjdk/jre/bin/java /etc/alternatives/java

4.  환경변수 설정(.bashrc 또는 .profile)에 추가

sudo vi ~/.bashrc

맨 아래에 다음 두줄을 추가
export  JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun  (/usr/lib/jvm  에  설치  된  자바  폴더의  이름을  적어주면 됩니다.)
export ANDROID_JAVA_HOME=$JAVA_HOME

source ~/.bashrc

5. 패키지 업데이트 & 업그레이드
sudo apt-get update
sudo apt-get upgrade

6. JAVA 우선순위 설정(자바 1.5 설치 시 또는 두 버전 모두 설치 시)

자바 1.5 : sudo update-java-alternatives -s java-1.5.0-sun
자바 1.6 : sudo update-java-alternatives -s java-1.6.0-openjdk

자바 버젂 바꾸는데 아래와 같은 에러 메시지가 발생한다면..

update-alternatives: error: no alternatives for firefox-javaplugin.so.
update-alternatives: error: no alternatives for iceape-javaplugin.so.
update-alternatives: error: no alternatives for iceweasel-javaplugin.so.
update-alternatives: error: no alternatives for jhat.
update-alternatives: error: no alternatives for jrunscript.
update-alternatives: error: no alternatives for midbrowser-javaplugin.so.
update-alternatives: error: no alternatives for mozilla-javaplugin.so.
update-alternatives: error: no alternatives for schemagen.
update-alternatives: error: no alternatives for wsgen.
update-alternatives: error: no alternatives for wsimport.
update-alternatives: error: no alternatives for xjc.
update-alternatives: error: no alternatives for xulrunner-1.9-javaplugin.so.
update-alternatives: error: no alternatives for xulrunner-javaplugin.so.
update-alternatives: error: no alternatives for firefox-javaplugin.so.
update-alternatives: error: no alternatives for iceape-javaplugin.so.
update-alternatives: error: no alternatives for iceweasel-javaplugin.so.
update-alternatives: error: no alternatives for midbrowser-javaplugin.so.
update-alternatives: error: no alternatives for mozilla-javaplugin.so.
update-alternatives: error: no alternatives for xulrunner-1.9-javaplugin.so.
update-alternatives: error: no alternatives for xulrunner-javaplugin.so.

sudo apt-get install sun-java5-plugin sun-java6-plugin

이는  자바  빌드와는  크게  상관은  없으나  위의  에러를  잡아주고  어플  실행의  호환성을  위한  플러그인을 설치하는 것입니다.

7. repo 다운로드

cd ~
mkdir bin
sudo gedit ~/.bashrc

마지막 줄에 다음 내용을 추가합니다.
export PATH=/home/사용자명/bin:$PATH;

source ~/.bashrc

cd ~/bin
curl http://android.git.kernel.org/repo > ~/bin/repo
chmod a+x ~/bin/repo

8. 소스 다운로드

cd ~

mkdir 폴더명

cd 폴더명

repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo

이렇게 하면  froyo 소스를 다운 받게 됩니다.

repo init -u git://android.git.kernel.org/platform/manifest.git  만을 입력하는 경우는

가장 최신 소스를 다운 받게 되는 것입니다.
-b 옵션을 이용하여 원하는 소스를 다운 받으면 되는데
froyo 같은 이름을 확인 하시려면

http://android.git.kernel.org/?p=platform/manifest.git;a=summary 로 들어가시면 Heads 에서 확인 가능 합니다.

repo sync(실제로 소스를 다운 받는 명령어) – 약 1~2 시간 소요

9. 소스 빌드

source build/envsetup.sh

다운받은 안드로이드 소스에는 크로스 컴파일 환경까지 갖추어져 있습니다.
컴파일을 위해서는 envsetup.sh 파일이 환경변수에 등록 시켜주어야 하는데,
위의 명령어는 이를 위한 것입니다.
make (실제 빌드) – 약 2 시간 이상 소요~ 최소 2 시간

최초 빌드는 make 로 해주는 것이 제일 좋은 방법이고 안젂한 방법입니다.
그 이유는 먼저 컴파일 된 것을 참조하는 구문이 있을수도 있는데
그런 곳에서 오류가 나서 컴파일이 멈추어 버리는 현상이 나오기 때문입니다.
최초 빌드 이후에는 -j 옵션을 이용하여 스레드를 돌려주면 시갂을 약갂 줄여 빌드를 할 수 있습니다.

'Development > Linux' 카테고리의 다른 글

Ubuntu 10.04 JDK  (0) 2012.09.26
asoundrc asound.conf  (0) 2012.06.17
Gstreamer build  (0) 2011.07.28
NFS in ubuntu  (0) 2009.12.04
Upgrade distribution in ubuntu  (0) 2009.11.27
Posted by 까 치
,

Ubuntu 10.04 JDK

Development/Linux 2012. 9. 26. 21:35

Install sun-java6-jdk on Ubuntu 10.04 (Lucid)

 

Sometimes installing Java can be as if someone stabs you hundreds of pencils in the ass. I  had trouble to install the Sun Java6 JDK after updating to Ubuntu 10.04.

The problem was that the system couldn’t find the package sun-java6-sdk and apt-get gave me a bad message:

Package sun-java6-jdk is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package sun-java6-jdk has no installation candidate

Note on current Debian versions:

SunSDK has been completely removed from the partner archives and the user should move to OpenJDK instead. See also the following links:

You should install OpenJDK instead

sudo apt-get install openjdk-6-jdk

If you still want to run the Sun version:

What I did to solve this problem was to add a new source

sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

After that a normal

sudo apt-get update
sudo apt-get install sun-java6-jdk

it worked for me.

What you can also do (i did this on Debian Squeeze):

Adding non-free to the

deb http://ftp.debian.org/debian squeeze main contrib non-free

This worked for me for example in the newest Debian 6 (Squeeze) version.

Update 1:

Thanks for the comment of Mark Zhao. You can also update the /etc/apt/sources.list file and add/uncomment the following lines:

deb http://archive.canonical.com/ubuntu lucid partner
deb-src http://archive.canonical.com/ubuntu lucid partner
 

Update 2:

Thanks to the comment of Reinier, it seems that the Sun Java Packages have been removed from the canonical-archive.

 

 

Update 3:

Another tip from a comment by user lipin:

sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jdk
 
 

'Development > Linux' 카테고리의 다른 글

[Android] 우분트 10.4 기반 빌드/환경구축/소스/빌드[펌]  (0) 2012.09.26
asoundrc asound.conf  (0) 2012.06.17
Gstreamer build  (0) 2011.07.28
NFS in ubuntu  (0) 2009.12.04
Upgrade distribution in ubuntu  (0) 2009.11.27
Posted by 까 치
,

Why asoundrc?

What is it good for, why do I want one?

Neither the .asoundrc nor the asound.conf files are required for ALSA to work properly. Most applications will work without them. They are used to allow extra functionality, such as routing and sample-rate conversion, through the alsa-lib layer.

The .asoundrc file

This file allows the you to have more advanced control over your card/device. The .asoundrc file consists of definitions of the various cards available in your system. It also gives you access to the pcm plugins in alsa-lib. These allow you to do tricky things like combine your cards into one or access multiple i/o's on your mulitchannel card.

Where does asoundrc live?

The asoundrc file is typically installed in a user's home directory

	$HOME/.asoundrc

and is called from

	/usr/share/alsa/alsa.conf

It is also possible to install a system wide configuration file as

	/etc/asound.conf

When an alsa application starts both configuration files are read.

Below is the most basic definition.

The default plugin

Make a file called .asoundrc in your home and/or root directory.

        vi /home/xxx/.asoundrc

copy and paste the following into the file then save it.

        pcm.!default {
type hw
card 0
}

ctl.!default {
type hw
card 0
}

The keyword default is defined in the ALSA lib API and will always access hw:0,0 - the default device on the default soundcard. Specifying the !default name supercedes the one defined in the ALSA lib API.

Now you can test:

	aplay -D default test.wav

The naming of PCM devices

A typical asoundrc starts with a 'PCM hw type'. This gives an ALSA application the ability to start a virtual soundcard (plugin, or slave) by a given name. Without this, the soundcard(s)/devices(s) must be accessed with names like hw:0,0 or default. For example:

	aplay -D hw:0,0 test.wav

or with ecasound

	ecasound -i test.wav -o alsa,hw:0,0

The numbers after hw: stand for the soundcard number and device number. This can get confusing as some sound "cards" are better represented by calling them sound "devices", for example USB sounddevices. However they are still "cards" in the sense that they have a specific driver controlling a specific piece of hardware. They also correspond to the index shown in

	/proc/asound/cards

As with most arrays the first item usually starts at 0 not 1. This is true for the way pcm devices (physical i/o channels) are represented in ALSA. Starting at pcm0c (capture), pcm0p (playback).

We use subdevices mainly for hardware which can mix several streams together. It is impractical to have 32 devices with exactly the same capabilities. The subdevices can be opened without a specific address, so the first free subdevice is opened. Also, we temporarily use subdevices for hardware with alot of streams (I/O connectors) - for example MIDI. There are several limits given by used minor numbers (8 PCM devices per card, 8 MIDI devices per card etc.).

For example, to access the first device on the first soundcard/device, you would use

	hw:0,0

to access the first device on the second soundcard/device, you would use

	hw:1,0

to access the second device on the third soundcard/device, you would use

	hw:2,1

The Control device

The control device for a card is the way that programs modify various "controls" on the card. For many cards this includes the mixer, some cards, for example the rme9652, have no mixer. However, they do still have a number of other controls and some programs like JACK need to be able to access them. Examples include the digital i/o sync indicators, sample clock source switch and so on.

Aliases

With the 'PCM hw type' you are able to define aliases for your devices. The syntax for this definition is:

	pcm.NAME {
type hw # Kernel PCM
card INT/STR # Card name or number
[device] INT # Device number (default 0)
[subdevice] INT # Subdevice number, -1 first available (default -1)
mmap_emulation BOOL # enable mmap emulation for ro/wo devices
}

For example, this gives your first soundcard an alias:

	pcm.primary {
type hw
card 0
device 0
}

Now you can access this card by the alias 'primary'.

	aplay -D primary test.wav

Plugins

To see a full list of plugins visit the alsa-lib documentation which is generated daily from cvs.

Q: What are plugins?

A: In ALSA, PCM plugins extend functionality and features of PCM devices. The plugins deal automagically with jobs like naming devices, sample rate conversions, sample copying among channels, writing to a file, joining sound cards/devices for multiple inputs/outputs (not sample synced), using multi channel sound cards/devices and other possibilities left for you to explore. to make use of them you need to create a virtual slave device.

A very simple slave could be defined as follows:

	pcm_slave.sltest {
pcm
}

This defines a slave without any parameters. It's nothing more than another alias for your sound device. The slightly more complicated thing to understand is that parameters for 'pcm types' must be defined in the slave-definition-block. Let's setup a rate-converter which shows this behaviour.

	pcm_slave.sl2 {
pcm
rate 48000
}

pcm.rate_convert {
type rate
slave sl2
}

Now you can call this newly created virtual device by:

	aplay -D rate_convert test.wav

Which automatically converts your samples to a 44.1 kHz sample rate while playing. It's not very useful because most players and alsa converts samples to the right sample rate which your soundcard is capable of, but you can use it for a conversion to a lower static sample rate for example. A more complex tool for conversion is the pcm type plug. the syntax is:

  	type plug             	# Format adjusted PCM
slave STR # Slave name (see pcm_slave)
# or
slave { # Slave definition
pcm STR # Slave PCM name
# or
pcm { } # Slave PCM definition
[format STR] # Slave format (default nearest) or "unchanged"
[channels INT] # Slave channels (default nearest) or "unchanged"
[rate INT] # Slave rate (default nearest) or "unchanged"
}
route_policy STR # route policy for automatic ttable generation
# STR can be 'default', 'average', 'copy', 'duplicate'
# average: result is average of input channels
# copy: only first channels are copied to destination
# duplicate: duplicate first set of channels
# default: copy policy, except for mono capture - sum
ttable { # Transfer table (bidimensional compound of
# cchannels * schannels numbers)
CCHANNEL {
SCHANNEL REAL # route value (0.0 ... 1.0)
}
}

We can use it as follows:

	pcm_slave.sl3 {
pcm
format S16_LE
channels 1
rate 16000
}

pcm.complex_convert {
type plug
slave sl3
}

By calling it with:

	aplay -vD complex_convert test.wav

You will convert the sample during playing to the sample format: S16_LE, one channel and a sample rate of 16 kHz. As you called aplay with the verbose option -v you see this options as it appears as it comes from the original file. with:

	aplay -v test.wav

You see the original settings of the file.

Software mixing

Software mixing is the ability to play multiple sound files or applications at the same time through the same device. There are many ways to have software mixing in the Linux environment. Usually it requires a server application such as ARTSD, ESD, JACK... The list is large and the apps can often be confusing to use.

dmix

These days we have a native plugin for ALSA called the dmix (direct mixing) plugin. It allows software mixing in an easy to use syntax and without the hassle of installing/understanding a new application first.

A very interesting and potentially extremely useful aspect of this plugin is using it combined with the default plugin name. In theory this means all applications that have native ALSA support will share the sound device. In practice not many applications are able to take advantage of this functionality yet. However if you have time to test and report your findings to the application developers it is worth a try:

    pcm.!default {
type plug
slave.pcm "dmixer"
}


pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:1,0"
period_time 0
period_size 1024
buffer_size 4096
rate 44100
}
bindings {
0 0
1 1
}
}

ctl.dmixer {
type hw
card 0
}

(To use it with your own name just change the word !default above)

Now try:

	aplay -f cd -D default test.wav

on multiple consoles.

Some notes:

The dmix PCM name is already defined in the global configuration file /usr/share/alsa/alsa.conf.

- The default sample rate for this device is 48000Hz. If you would like to change it use:

 	aplay -D"plug:'dmix:RATE=44100'" test.wav

- An example command for dmix plugin to use 44100Hz sample-rate and hw:1,0 output device:

 	aplay -Dplug:'dmix:SLAVE="hw:1,0",RATE=44100' test.wav

- The dmix PCM name is already defined in the global configuration file /usr/share/alsa/alsa.conf.

Defaults are:

	SLAVE="hw:0,0",RATE=48000

NB the dmix plugin is not based on client/server architecture, but it writes directly to the soundcard's DMA buffer. There is no limit to the amount of instances that can be run at one time.

dsnoop

While the dmix plugin is for mixing multiple output(playback) streams together, if you want to use multiple input(capture) clients you need to use the dsnoop plugin:

    pcm.mixin {
type dsnoop
ipc_key 5978293 # must be unique for all dmix plugins!!!!
ipc_key_add_uid yes
slave {
pcm "hw:0,0"
channels 2
period_size 1024
buffer_size 4096
rate 44100
periods 0
period_time 0
}
bindings {
0 0
0 1
}
}

JACK plugin

This plugin allows the user to connect applications that support alsa natively to the JACK daemon.

To compile and install jack, you need to move to src/pcm/ext directory, and run "make jack" and "make install-jack". this is intentional.

To use the JACK plugin you will need to add the following to your .asoundrc.

	pcm.jackplug {
type plug
slave { pcm "jack" }
}

pcm.jack {
type jack
playback_ports {
0 alsa_pcm:playback_1
1 alsa_pcm:playback_2
}
capture_ports {
0 alsa_pcm:capture_1
1 alsa_pcm:capture_2
}
}

Now, you can use:

	aplay -Djackplug somefile
arecord -Djackplug somefile

Virtual multi channel devices

If you would like to link two or more ALSA devices together so that you have a virtual multi channel device it is possible. However this will not create the mythical "multi-channel soundcard out of el-cheapo consumer cards". The real devices will drift out of sync over time. It is sometimes helpful to make applications see for example, one 4 channel card to allow for flexible routing if they can't easily be made to talk to multiple cards (making use of JACK being one example).

Copy and paste the following into your asoundrc.

	# create a virtual four-channel device with two sound devices:
# This is in fact two interleaved stereo streams in
# different memory locations, so JACK will complain that it
# cannot get mmap-based access. see below.

pcm.multi {
type multi;
slaves.a.pcm "hw:0,0";
slaves.a.channels 2;
slaves.b.pcm "hw:1,0";
slaves.b.channels 2;
bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;
bindings.2.slave b;
bindings.2.channel 0;
bindings.3.slave b;
bindings.3.channel 1;
}

# JACK will be unhappy if there is no mixer to talk to, so we set
# this to card 0. This could be any device but 0 is easy.

ctl.multi {
type hw;
card 0;
}

# This creates a 4 channel interleaved pcm stream based on
# the multi device. JACK will work with this one.

pcm.ttable {
type route;
slave.pcm "multi";
ttable.0.0 1;
ttable.1.1 1;
ttable.2.2 1;
ttable.3.3 1;
}
# see above.
ctl.ttable {
type hw;
card 0;
}

This will give you xruns, but it's suitable for testing. To test the above setting feed an audio signal to the real sound devices play it back and listen to it with an external mixer:

	arecord -f S16_LE -r 44100 -c 4 -D multi | aplay -f S16_LE -r 44100 -c 4 -D multi

To start JACK with the new device, use

 	jackd [-a] -R [-v] -d alsa -d ttable [-p 1024]

Bindings explained

The above example for a virtual multi channel device uses bindings to make the connections work. The following is a more advanced asoundrc for 2 RME Hammerfalls which is a professional multichannel sound device. Below is a full explanation of how bindings work.

	# This is for two RME Hammerfall cards. They have been split into top row
# and bottom row with channels 0-7+16-25 on rme9652_0 and channels 8-15+26-27 on
# rme9652_1. NB. channels 24-27 are used as two stereo channels while the others are mono.

# eg. card1
# | 0 1 2 3 4 5 6 7 |
# | 8 9 10 11 12 13 14 15 24 25|
# card2
# | 16 17 18 19 20 21 22 23 24 25|




pcm_slave.rme9652_s {
pcm rme9652_0
}
pcm.rme9652_1 {
type hw
card 1
}
ctl.rme9652_1 {
type hw
card 1
}
pcm.rme9652_0 {
type hw
card 0
}
ctl.rme9652_0 {
type hw
card 0
}
ctl.rme9652_48 {
type hw
card 0
}
pcm.rme9652_48 {
type multi;
slaves.a.pcm rme9652_0;
slaves.a.channels 26;
slaves.b.pcm rme9652_1;
slaves.b.channels 26;
bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;
bindings.2.slave a;
bindings.2.channel 2;
bindings.3.slave a;
bindings.3.channel 3;
bindings.4.slave a;
bindings.4.channel 4;
bindings.5.slave a;
bindings.5.channel 5;
bindings.6.slave a;
bindings.6.channel 6;
bindings.7.slave a;
bindings.7.channel 7;
bindings.8.slave a;
bindings.8.channel 16;
bindings.9.slave a;
bindings.9.channel 17;
bindings.10.slave a;
bindings.10.channel 18;
bindings.11.slave a;
bindings.11.channel 19;
bindings.12.slave a;
bindings.12.channel 20;
bindings.13.slave a;
bindings.13.channel 21;
bindings.14.slave a;
bindings.14.channel 22;
bindings.15.slave a;
bindings.15.channel 23;

# Use rme9652_1

bindings.16.slave b;
bindings.16.channel 8;
bindings.17.slave b;
bindings.17.channel 9;
bindings.18.slave b;
bindings.18.channel 10;
bindings.19.slave b;
bindings.19.channel 11;
bindings.20.slave b;
bindings.20.channel 12;
bindings.21.slave b;
bindings.21.channel 13;
bindings.22.slave b;
bindings.22.channel 14;
bindings.23.slave b;
bindings.23.channel 15;

# stereo channels

bindings.24.slave a;
bindings.24.channel 24;
bindings.25.slave a;
bindings.25.channel 25;
bindings.26.slave b;
bindings.26.channel 24;
bindings.27.slave b;
bindings.27.channel 25;
}

What is happening?

There are two sound cards which are linked with a wordclock pipe. That allows them to keep sample sync with each other which is very important for multichannel work. If the sample rates are not in sync then your sounds become out of time with each other.

Each sound card has a number of physical channels 19 + 10. They are represented in /proc/asound/cardx as pcmXc (capture) and pcmXp (playback). Where X equals the number of the physical input/output (i/o) channels starting at 0.

If you look at the lines:

	type multi;
slaves.a.pcm rme9652_0;
slaves.a.channels 26;

You can see that the card has been nicknamed "a" and given a range of 26 channels. You can assign the card any number of channels you want but you can only use as many channels as the card has physically available. The bindings start at the first available pcm device for the card ie. pcm0c pcm0p - and move upwards sequentially from there.

The first card for this file has 18 physical pcm devices. Nine of them are capture devices ie. pcm0c pcm1c pcm2cpcm8c, each with corresponding playback channels ie. pcm0p pcm1p pcm2p ... pcm8p. The second card has 10 physical pcm devices ie. pcm0c pcm1c pcm2c ... pcm9c. ...

If you look at the lines:

    	bindings.0.slave a;
bindings.0.channel 0;
bindings.1.slave a;
bindings.1.channel 1;

The first binding points to the first available pcm device on the card represented as "a". The second binding points to the second available pcm device on "a" and so on up to the last one available. We then assign a channel number to the binding so that the channels on the new virtual "soundcard" we have created are easy for us to access.

Another way of saying it is:

   	address of.the first channel on my new soundcard.using my real soundcard called "a";
make this address of.the first channel on my new soundcard.be the first pcm device on my new soundcard;
   	address of.the second channel on my new soundcard.using my real soundcard called "a";
make this address of.the second channel on my real soundcard.be the second pcm device on my new soundcard;


Referenced applications

  • aRTsd - the aRTs sound server is the basis of desktop sound for KDE.
  • ESD - the Enlightened Sound Daemon mixes several audio streams for playback by a single audio device.
  • Ecasound - a commandline multitrack recorder and editor with various GUI apps.
  • JACK - Jack Audio Connection Kit. If you don't know this app you don't know JACK.

Notes:

  1. Example: Alternative .asoundrc and modules.conf files
  2. Tricks for getting the most out of the card.


'Development > Linux' 카테고리의 다른 글

[Android] 우분트 10.4 기반 빌드/환경구축/소스/빌드[펌]  (0) 2012.09.26
Ubuntu 10.04 JDK  (0) 2012.09.26
Gstreamer build  (0) 2011.07.28
NFS in ubuntu  (0) 2009.12.04
Upgrade distribution in ubuntu  (0) 2009.11.27
Posted by 까 치
,
1. 제일 오른쪽에 있는 '1'의 위치 구하기

rightBit = bitf ^ (bitf & (bitf - 1));



00010000b - 00000001b = 00001111b 라는 숫자의 기본 개념과 &, ^ 연산의 오묘함을 이용한 것이다.

실제로 아무 숫자나 넣어서 해보면 금방 이해할 수 있다.

최상위 비트도 이처럼 간단하게 구할 수 없을까? 해서 이렇게 저렇게 생각해 봤지만 현재로선 모르겠다.

추가사항: 2의 보수 아키텍처를 사용한다면 더욱 간편하고 빠른 식을 사용할 수 있다.
rightBit = -bitf & bitf;
결과값에 영향은 없으나 bitf가 unsigned형일 경우 컴파일 시 경고가 나타난다.
따라서 아래와 같이 수정한다.
rightBit = -(signed)bitf & bitf;

예) 40, -40
40 = 00101000, -40=11011000
따라서 결과값은 8




2. 주어진 수가 2의 제곱수(1, 2, 4, 8, 16 등등)인지 검사하기(출처: flipCode)

inline bool isPowOf2(int value) {   return !(value & (value - 1));   }


최하위 비트 구하기와 비슷한 원리다.

다른 버전(출처: java api)
inline bool isPowOf2(int value) {   return (value & -value) == value;   }



3. 임시 변수없는 SWAP 매크로(출처: Graphics Gems)

#define SWAP(a, b) ((a)^=(b)^=(a)^=(b))



위의 매크로는 정수형 타입에만 해당되는 연산이다.

부동소수일 경우엔 그냥 std::swap()을 사용해라.

템플릿 함수를 만들어 봤는데 알고보니 이미 std::swap()라는 게 제공되고 있더라.

매크로를 함수화해서 사용하는 건 보통의 함수 호출만큼 안전하지 않다.

예를들면, 아래의 경우



int a = 6, b = 9;

SWAP(++a, ++b);



a=10, b=7이 아니라 a=11, b=8이 된다. 왜 그런지는 말 안해도 알 것이라 믿는다.

그렇다고 함수화하는 건 속도 면에서 매크로보다 메리트가 떨어진다.

그래서 이를 사용할 때는 이것은 매크로이므로 복잡한 연산과 함께하지 말고 단순하게 사용하라는 걸 경각시키기 위해서 함수와는 달리 이름을 대문자로 하였다. (사실 이런 이유 등으로 매크로는 대개 대문자로 하는 거 같다.)

아, 그리고 a와 b의 어드레스가 같다면 결과는 무조건 0이 된다.



4. 0이 아닌 비트들의 개수 세기(예를 들어 0xf0는 4개)(출처: flipCode)



8비트용:



v = (v & 0x55) + ((v >> 1) & 0x55);

v = (v & 0x33) + ((v >> 2) & 0x33);

return (v & 0x0f) + ((v >> 4) & 0x0f);



참고로 0x55 = 01010101b, 0x33 = 00110011b, 0x0F = 00001111b



32비트용:



#define g31 0x49249249ul // = 0100_1001_0010_0100_1001_0010_0100_1001

#define g32 0x381c0e07ul // = 0011_1000_0001_1100_0000_1110_0000_0111



v = (v & g31) + ((v >> 1) & g31) + ((v >> 2) & g31);

v = ((v + (v >> 3)) & g32) + ((v >> 6) & g32);

return (v + (v >> 9) + (v >> 18) + (v >> 27)) & 0x3f;



8비트는 그럭저럭 봐줄만해도 32비트의 복잡도는... 제길

그래서 8비트에서의 원리를 이용해 32비트 짜리를 한 번 만들어 보았다.

성능이야 위에 거보단 떨어지겠지만 이해하기 쉽고 64비트로의 확장 또한 용이하다.



int cntBit32(long value)

{

    value = (value & 0x55555555) + ((value >>  1) & 0x55555555);

    value = (value & 0x33333333) + ((value >>  2) & 0x33333333);

    value = (value & 0x0F0F0F0F) + ((value >>  4) & 0x0F0F0F0F);

    value = (value & 0x00FF00FF) + ((value >>  8) & 0x00FF00FF);

    return   (value & 0x0000FFFF) + ((value >> 16) & 0x0000FFFF);

}



굳이 연산을 이해하지 않아도 누구라도 확장된 버전을 만들 수 있을거라 생각한다.





5.32비트 색상 두 개의 50% 혼합(출처: flipCode)

32비트 AARRGGBB 형식의 색상들을 1:1로 혼합...



알파채널이 있는 경우

color = ((color & 0xfefefefe) >> 1) + ((backColor & 0xfefefefe) >> 1)

            + ((color | backColor) & 0x01010101);



알파 채널 안쓰는 경우

color = ((color & 0x00fefefe >> 1) + (backColor & 0x00fefefe) >> 1)

            + ((color | backColor) & 0x00010101);



그래픽쪽은 잘 모르더라도 비트 연산은  어느 정도 이해 가능했다.

(color & 0xfefefefe) >> 1 은 각 ARGB의 값을 2로 나눈 것이다.

하지만 왜 굳이 ((color | backColor) & 0x01010101) 연산을 해서 각 ARGB값에 0이나 1을 더했는지는 모르겠다. 그리고 출처에는 알파 채널 안쓰는 경우

color = ((ccolor & 0x00fefefe) + (backColor & 0x00fefefe) >> 1)

            + ((color | backColor) & 0x00010101);

라고 나와 있지만 아무래도 오타인 거 같다.

추가.
1. 간단한 홀짝 판정
int odd = num & 1;  // 짝수면 0, 홀수면 1이 된다.

2. n개의 1로 채우기. mask에 유용하다.
int mask = (1 << n) - 1;  // n=4이면 1이 다음과 같이 변한다. 00000001 => 00010000 => 00001111
혹은 int mask = ~(~0 << n);

3. n개의 0으로 채우기. 위에꺼 응용
int mask = ~(1 << n) + 1; // n = 4이면 1이 다음과 같이 변한다. 00000001 => 00010000 => 11101111 => 11110000
혹은 int mask = ~0 << n;

4. 비트 뒤집기(리눅스에서는 이렇게 한단다)
x = (x >> 4) | (x << 4);
x = (x >> 2 & 0x33) | (x << 2 & 0xcc);
x = (x >> 1 & 0x55) | (x << 1 & 0xaa);

5. 비트 연산들이 잘 나와있는 곳
http://graphics.stanford.edu/~seander/bithacks.html
http://www.hackersdelight.org/
left most bit detection 으로 구글링하다 발견했다. 최고다. 역시 스탠포드 킹왕짱

'Development > 기타' 카테고리의 다른 글

Window7에서 아이콘이 깨질때  (0) 2012.06.17
Ubuntu 에서 Synergy 사용하기  (0) 2011.01.01
Mulplication without using '*' operator  (0) 2010.12.21
Mobile XE 설정하기  (0) 2010.08.24
[GPS]GPS모듈 구현중  (0) 2009.12.14
Posted by 까 치
,

Console

 

taskkill /f /im explorer.exe
attrib %userprofile%appdatalocaliconcache.db -s -r -h
del /q %userprofile%appdatalocaliconcache.db
start explorer.exe

'Development > 기타' 카테고리의 다른 글

유용한 C program  (0) 2012.06.17
Ubuntu 에서 Synergy 사용하기  (0) 2011.01.01
Mulplication without using '*' operator  (0) 2010.12.21
Mobile XE 설정하기  (0) 2010.08.24
[GPS]GPS모듈 구현중  (0) 2009.12.14
Posted by 까 치
,

[출처] http://blog.naver.com/hcwha/70100612677

 

 

질문

동영상에 오디오가 2개가 들어있습니다. "영어 더빙"과 "우리말 더빙"으로요.

컴퓨터에서 재생하면 일단 "영어 더빙"으로 나오지만, 조금 불편하지만 플레이어에서 "우리말 더빙"으로 바꾸어 감상할 수 있었습니다.

 

이번에 컴퓨터가 아닌 외부기기에서 재생시켜 TV로 봤는데, 영어 더빙으로만 나옵니다.

외부기기는 컴퓨터처럼 "우리말 더빙"으로 바꾸는 기능이 없습니다. 어떻게 우리말 더빙으로 감상할수 있을까요?

 

답변

TV로 동영상을 감상할때에, avi같은 동영상을 재생시킬수 있는 외부기기는 정말 많아졌습니다.

디빅스 플레이어

DVD 플레이어(예전 DVD 플레이어는 DVD-Video만 재생할뿐 avi같은 동영상은 재생하지 못하였습니다.)

USB 메모리나 외장하드에 동영상을 저장해 TV의 USB 단자에 꼽으면 재생시키는 LCD TV

IPTV의 셋톱박스(일부 기종)

블루레이 플레이어(일부 기종)

 

그러한 외부 기기들 중엔 2오디오 동영상 파일을 재생할 때에, 오직 1개의 오디오만 재생시키는 것들이 있습니다.

하지만 오디오를 선택적으로 바꾸는 기능이 있는 것도 있으니, 일단 메뉴얼을 보세요.

오디오를 선택적으로 바꿀수 없다면, 재생시키고자 하는 오디오만 남겨두고, 필요없는 오디오는 빼버리는 방법으로 해결할 수 있습니다.

다른 방법으로는 오디오중에서 재생시키고자 하는 오디오를 가장 앞에 위치하도록 만들면 됩니다.

이때 재인코딩이 아닌 "리먹싱"이라는 방법을 사용해야 원본 화질과 음질을 고스란히 유지할 수 있습니다.

 

 

 

이번 게시글에서는 동영상내 오디오의 순서를 바꾸는 방법에 대해 알아보겠습니다.

 

먼저 동영상에서 오디오의 순서를 바꾸는 원리를 간단히 설명하겠습니다.

"비디오 스트림""오디오 스트림"AVI상자, MKV상자, MP4상자, TS상자, MPEG상자(컨테이너)에  들어 있는 파일을 동영상이라 말합니다.

상자에서 "오디오 스트림"을 빼내어 다시 상자에 넣을때, 오디오의 순서를 바꾸어 넣을 수 있습니다.

오디오 스트림을 빼내고 다시 집어 넣는다. 아주 간단하죠.

그런데 문제는 상자마다 독특한 특징을 가지고 있어서, 한가지 프로그램으로 모든 상자를 제어할 수 없다는 것입니다.

즉 파일의 확장자에 따라 다른 프로그램을 사용해야 한다는 것입니다.

많이 사용하는 동영상 파일 몇가지만 다루어 보겠습니다.

 

 

AVI 파일에서 오디오 순서 바꾸기

 

 

1. VirualDubMod를 이용하여 오디오 순서 바꾸기

 

VirtualDubMod를 이용해 오디오의 순서를 바꾸어 주기 위해서는, 먼저 동영상에 맞게 비디오 코덱을 설치해주어야 합니다.

 

 

☞ 여기를 클릭하여 VirtualDubMod를 다운받아 적당한 곳에 압축을 풀어 놓습니다.

폴더안에서 VirtualDubMod.exe를 더블클릭하여 버츄얼덥을 실행시킵니다.

 

1. 메뉴에서 [File → Open video file]을 선택하여 avi파일을 불러옵니다.

 

2. 메뉴에서 [Streams → Stream list]를 선택합니다.

 

3.  "Available streams"창이 열리면 동영상에 들어 있는 오디오의 갯수를 확인할 수 있습니다.

순서를 바꾸기 위해 2번 오디오를 선택하고, Move up버튼을 클릭합니다. "audio stream 2"가 위칸으로 올라가게 됩니다.

OK 버튼을 클릭하여 저장하고 빠져 나옵니다.

 

 

 

 

만약 1번에 위치한 오디오를 빼고자 한다면 1번 오디오를 클릭하고 "Disable"를 클릭합니다.

제거될 오디오에 빗금 표시가 생깁니다. OK 버튼을 클릭하여 저장합니다.

 

 

 

4. 메뉴에서 [Video → Direct stream copy]를 선택합니다.

(Direct Stream Copy를 이용해야만 원본의 "비디오 스트림"을 그대로 사용한 avi파일을 만들 수 있습니다.)

 

 

 

STEP 5. 메뉴에서 [File → Save As]를 선택하여 적당한 이름으로 저장합니다.

 

 

 

 

 

2. AVI-Mux GUI를 이용하여 오디오 순서 바꾸기

 

특징은 VirtualDub같은 미리보기가 없기에 디코더를 설치할 필요가 없다는 것입니다.

 

1. ☞ 여기를 클릭하여 AVI-Mux를 다운받습니다. 적당한 곳에 압축을 풀어 놓습니다.

   무설치 프로그램이니 "AVIMux_GUI.exe"파일을 더블 클릭하여 실행합니다.

 

2. 그림 처럼 "open files" 영역에서 마우스 오른쪽 버튼을 클릭하여 "add"를 선택합니다.

"열기"창에서 편집할 avi파일을 추가합니다.

 

  

 

3. 불러온 avi파일을 더블클릭합니다. 그러면 아래쪽에 avi파일의 구성성분들이 표시됩니다.

 

4. 아래 그림을 보면 AVI 동영상에는 1개의 비디오 스트림과 3개의 오디오 스트림이 들어 있습니다.

3번째에 위치한 192 kbps 2ch 오디오를 비디오 스트림 뒤에 위치시키려면 다음과 같이 하면 됩니다.

 

3번째의 파일을 선택하고 마우스 왼쪽버튼을 클릭한 채로 1번째와 2번째 파일사이로 끓어다가 놓습니다.

 

 

 

 

아래 그림처럼 순서가 바뀌었습니다.

 

 

 

 

5. Start 버튼을 클릭합니다. 적당한 이름을 입력하고 저장합니다.

 

 

 

 

 

 

 

 

 

MP4 파일에서 오디오 순서 바꾸기

 

☞ 여기를 클릭하여 Yamb을 다운받아 적당한 곳에 저장합니다.

더블클릭하시면 설치창이 나옵니다. 설치버튼을 클릭해도 설치가 되는 것이 아니고 압축을 푸는 것입니다.

포터블 버전이니 설치하지 않고 "Yamb.exe"을 더블클릭해 사용하시면 됩니다.

압축 풀기된 폴더에는 Yamb 2.1.0.0 beta 2와 MP4Box 0.4.6가 들어 있습니다.

 

1. Yamb이 실행되면 왼쪽 카테고리에서 Settings를 선택합니다.

    오른쪽에 메뉴가 하나 생기는데 그것을 더블클릭합니다

 

 

 

 

2. Advanced Settings창이 열리면 그림처럼 오른쪽 폴터 모양의 Browse버튼을 클릭하여 mp4box.exe의 위치를 지정하여 줍니다.

mp4box.exe는 다운받은 압축 파일안에 Yamb.exe와 같이 들어 있습니다.

mp4box.exe의 위치지정이 끝났다면 Next 버튼을 클릭합니다.

 

 

 

3. 좌측 카테고리에서 "Creation"을 선택하고 우측에서 첫번째 항목을 더블 클릭합니다.

 

 

 

4. mp4 파일에 들어 있는 "비디오 스트림"과 "오디오 스트림"이 Input 구획에 모두 표시됩니다.

Input 구획에서 첫번째 줄의 AVC는 "비디오 스트림"입니다.

2번째 줄은 오디오 스트림으로 AAC코덱의 LC프로파일로 만들어졌는데, 6채널(5.1채널) 48.0 KHz의 샘플링 레이트값을 가집니다.

3번째 줄의 오디오 스트림도 마찬가지로 AAC코덱으로 만들어졌지만, 스테레오(2ch)입니다.

 

5. 위치를 바꾸고자 하는 3번째 오디오를 클릭합니다.

만약 새롭게 만들어질 mp4파일에 두번째 오디오를 제거하고자 한다면 앞쪽의 체크표시를 해제시키면 됩니다.

 

6. Up버튼을 눌러 위치를 바꿉니다.

 

7. Browse 버튼을 클릭하여 저장될 폴더와 파일명을 입력합니다. 이때 원본 파일과 이름이 달라야 합니다.

 

8. Next 버튼을 클릭하면 리먹싱이 시작됩니다.

 

 

 

 

 

 

MKV 파일에서 오디오 순서 바꾸기

 

1. 아래 링크에서 MKVToonix를 다운받아 설치합니다.

☞ MKVToolnix 다운로드

 

2. 컴퓨터의 작업표시줄에서 [시작 → 모든 프로그램 → MKVtoonix → mkvmerge GUI]를 선택합니다.

 

3. "add" 버튼을 클릭해 mkv파일을 열기합니다.

"Tracks, chapters and tags" 구획에 mkv파일안에 들어 있는 모든 구성요소들이 표시됩니다.

첫번째 줄은 "AVC 비디오 스트림"입니다. 두번째, 세번째 줄은 AC3 오디오 스트림입니다.

네번째 줄은 자막 파일이며, 다섯번째 줄은 챕터파일입니다.

 

4. 위치를 바꾸고자 하는 세번째줄의 오디오를 클릭합니다.

 

5. "Default track flag"값을 그림처럼 "yes"로 바꾸어 줍니다.

컴퓨터에서 재생할 때 미디어 플레이어는 오디오 파일의 순서에 관계없이 "Default track flag"값이 "yes"인 오디오를 재생합니다.

하지만 외부기기들은 "Default track flag"를 인식하지 못하는 경우가 많아, 위치가 앞에 있는 오디오를 재생하게 됩니다.

 

참고 : 다음 팟 플레이어등에서는 mkv 파일의 언어 태그가 "krcc", "kor", "ko", "korean"등으로 입력된 오디오 스트림을 먼저 재생하도록 설정되어 있습니다. 

그렇기에 다음 팟 플레이어에서 2오디오 이상의 mkv파일을 재생시키면 "Default track flag"값과 상관없이 한국어 더빙 파일이 먼저 재생됩니다.

단 실질적으로는 한국어 더빙일지라도 태그에 "krcc", "kor", "ko", "korean"이라고 입력되지 않았다면 그런 설정이 적용되지 않게 됩니다

 

6. "up" 버튼을 클릭하여 두번째 줄로 위치를 옮깁니다.

(만약 두번째줄의 오디오를 새롭게 만들어질 mkv에 넣고 싶지 않으면 앞쪽의 체크표시를 해제합니다.)

 

7. 그림을 보시면 새롭게 만들어질 mkv파일명은 "고화질 (1).mkv"로 원본 mkv파일명 "고화질.mkv"과 다르게 자동으로 변경됩니다.

혹시라도 원본과 파일명이 같다면 "Browse"버튼을 클릭해서 원본과 다르게 수정해 줍니다.

 

8. "Start Muxing" 버튼을 클릭하면 리먹싱이 시작됩니다.

 

 

 

 

 

 

MPEG-TS 파일에서 오디오 순서 바꾸기

 

MPEG Transport Stream(MPEG-TS)은 확장자를 .ts를 사용합니다.

소스에 따라서 .tp로 저장되기도 하지만 이름바꾸기로 확장자를 .ts로 바꾸어도 됩니다.

 

1. ☞ 여기에서 "tsMuxeR"를 다운 받아 압축을 풀어 놓습니다.

"tsMuxerGUI.exe" 파일을 더블 클릭하여 실행시킵니다.

 

2. add 버튼을 클릭하여 ts파일을 불러 오기합니다.

Tracks 구획에 TS파일에 들어 있는 모든 구성요소들이 표시됩니다.

MPEG-2 비디오 스트림 1개와 AC3 오디오 스트림 2개가 있습니다. 

 

3. 위치를 바꾸고자하는 3번째 줄의 "영어 더빙" 오디오를 선택합니다.

 

4. "up"버튼을 클릭하여 2번째 줄로 위치를 바꿉니다.

 

5. Ouput 구획에서 "TS Muxing" 체크되었는지 확인합니다. 다른곳에 체크되었다면 "TS Muxing"에 체크합니다.

 

6. Browse 버튼을 클릭하여 저장될 폴더를 지정하고 파일명을 입력합니다. 이때 파일명은 원본 TS 파일명과 다르게 입력해야 합니다.

 

7. "Start muxing" 버튼을 클릭하면 리먹싱이 시작됩니다.

 

 

 

 

 

 

 

MPEG-PS 파일에서 오디오 순서 바꾸기

 

MPEG Program Stream(MPEG-PS)은 확장자를 .mpg이나 .mpeg를 사용합니다.

DVD-Video에 사용되는 VOB파일도 MPEG-PS의 일종으로 이름바꾸기를 이용해 확장자를 .mpg나 .mpeg로 바꾸어 주어도 됩니다.

단 DVD-Video를 컴퓨터로 카피할 때에 DVD-Video의 구조대로 1기가씩 나누어진 VOB파일로 저장했다면, 그 VOB 파일은 mpg로 바꾸지 말아야 합니다.

그러한 VOB 파일은 상당히 구조가 복잡하며, 이 게시글에서 사용할 tsmuxer같은 프로그램에서 정상적으로 디먹싱되지 않습니다.

 

MPEG-PS파일은 앞서의 파일과 다르게 프로그램에서 바로 리먹싱이 되지 않습니다.

먼저 "비디오 스트림"과 "오디오 스트림"을 빼냅니다.(디먹싱 과정)

오디오의 순서를 바꾸어 다시 MPEG-PS에 넣기 합니다.(먹싱 과정)

 

(1) 디먹싱

1. ☞ 여기에서 "tsMuxeR"를 다운 받아 압축을 풀어 놓습니다.

"tsMuxerGUI.exe" 파일을 더블 클릭하여 실행시킵니다.

 

2. add 버튼을 클릭하여 mpeg 파일을 불러 오기합니다.

Tracks 구획에 MPEG 파일에 들어 있는 모든 구성요소들이 표시됩니다.

MPEG-2 비디오 스트림 1개와 AC3 오디오 스트림 2개가 있습니다.

 

새롭게 만들 mpeg파일에 넣고 싶지 않은 오디오는 앞쪽의 체크표시를 해제합니다.

 

3. Output 구획에서 "Demux"에 체크합니다.

 

4. "Start demuxing" 버튼을 클릭하면 Tracks구획에서 체크된 "비디오 스트림"과 "오디오 스트림"이 분리되어 저장됩니다.

 

MPEG-2 비디오는 .mpv 확장자를 가진 파일로 저장됩니다.

이것은 MPEG-2 Elementary Stream(MPEG-ES)라고 말하며, 프로그램에 따라 m2v로 저장되기도 합니다.

따라서 이름바꾸기로 확장자를 .m2v로 바꾸어도 됩니다. MPEG-ES는 오디오 정보가 없는 순수한 "비디오 스트림" 파일입니다.

 

AC-3 오디오는 .ac3 확장자를 가진 파일로 저장됩니다.

 

 

 

 

(2) 먹싱

 

1. ☞ 여기에서 ImagoMPEG-Muxer를 다운받아 적당한 곳에 압축을 풀어 놓습니다.

ImagoMPEG-Muxer.exe 파일을 더블 클릭하여 프로그램을 실행시킵니다.

 

2. Selec Video Source를 클릭하여 .mpv파일을 불러 옵니다.

 

3. Add Audio Source를 클릭하여 오디오를 추가합니다. 그때 먼저 재생되기를 원하는 오디오를 가장 먼저 추가해야 합니다.

(플레이어로 재생시켜서 어떤 언어의 더빙인지 확인하는 방법을 사용할 수도 있습니다.)

 

4. Select Output Path를 클릭하여 mpg파일이 저장될 폴더를 지정합니다.

 

5. Output Format에서 MPEG (MPEG-2 Program Stream)에 체크합니다.

(VOB (DVD Video Object, segmented)을 선택하면 DVD-Video에 들어 있는 VOB 파일처럼 1기가씩 잘린 VOB파일로 저장됩니다.)

 

6. Multiplex! 버튼을 클릭하면 먹싱이 시작됩니다.(Multiplex=Mux)

 

Posted by 까 치
,

[출처]http://blog.naver.com/hcwha/70100676780

 

 

 

동영상 파일에서 오디오 스트림을 mp3파일로 변환해서 꺼내는 것이 아닌, 동영상에 들어 있는 그대로 꺼내는 방법에 대해 알아 보겠습니다.

물론 raw 상태가 아닌 헤더가 있는 파일로 꺼내야 재생하는데 아무런 문제가 없겠죠.

 

컨테이너는 동영상 파일의 확장자을 가르키는 말로, "비디오 스트림"과 "오디오 스트림"을 담아두는 상자역할을 합니다.

그 상자에서 "비디오 스트림"과 "오디오 스트림"만을 꺼내어 파일로 저장하는 방법을 디먹싱이라고 합니다.

그런데 모든 동영상의 비디오 스트림과 오디오 스트림을 꺼낼 수 있는 프로그램은 없습니다.

그래서 확장자에 따라 프로그램을 달리해야 하는데, 대표적인 동영상만을 가지고 다루어 보겠습니다.

 

 

 

AVI 동영상에서 오디오 꺼내기

 

avi 컨테이너에서 오디오를 빼내는데, VirtualDub을 이용한 방법을 여기서 설명했었습니다.
그런데, VirtualDub이 인코더와 스플리터가 설치되어 있어야 하는데, 그것을 다 설명하기에는 좀 무리이다 싶어 그냥 다른 방법으로 교체했습니다.
 
먼저 avi 컨테이너의 "비디오 스트림"과 "오디오 스트림"을 변화없이 꺼내서 mkv 컨테이너에 먹싱합니다.
그 다음 mkv에서 "오디오 스트림"만 꺼내겠습니다.
 
1. MKV 파일로 변환
 
(1) 아래 링크에서 MKVToonix를 다운받아 설치합니다.
 
(2) add 버튼을 클릭하여 avi파일을 추가합니다.
 
(3) "Start muxing"버튼을 클릭하면 avi파일이 있는 폴더에 같은 이름의 mkv파일이 만들어집니다.
 
 

 

 
 
 
2. MKV 컨테이너에서 오디오 꺼내기
 

(1) 아래 링크에서 MKVExtract GUI를 다운받아 압축풀기 합니다.

MKVExtractGUI2.exe 파일을 복사하여 MKVToolnix가 설치된 C:Program FilesMKVtoolnix 폴더에 붙여 넣기 합니다.

☞ MKVExtract GUI 다운 로드

 

(2) C:Program FilesMKVtoolnix 폴더에 붙여 넣기한 MKVExtractGUI2.exe 파일을 더블 클릭합니다.

(3) Input File에서 그림처럼 클릭하여 mkv파일을 불러 오기 합니다.

(4) Source Dir에 체크하면 디먹싱된 오디오파일은 mkv파일이 있는 폴더에 저장됩니다.

(5) Tracks에서 디먹싱할 오디오를 체크합니다.

(6) Extract 버튼을 클릭하면 디먹싱이 시작됩니다.

 

 

MP4, MOV 파일에서 오디오 꺼내기

 ☞ 여기를 클릭하여 Yamb을 다운받아 적당한 곳에 저장합니다.

더블클릭하시면 설치창이 나옵니다. 설치버튼을 클릭해도 설치가 되는 것이 아니고 압축을 푸는 것입니다.

포터블 버전이니 설치하지 않고 "Yamb.exe"을 더블클릭해 사용하시면 됩니다.

압축 풀기된 폴더에는 Yamb 2.1.0.0 beta 2와 MP4Box 0.4.6가 들어 있습니다.

1. Yamb이 실행되면 왼쪽 카테고리에서 Settings를 선택합니다.

    오른쪽에 메뉴가 하나 생기는데 그것을 더블클릭합니다

 

2. Advanced Settings창이 열리면 그림처럼 오른쪽 폴터 모양의 Browse버튼을 클릭하여 mp4box.exe의 위치를 지정하여 줍니다.

mp4box.exe는 다운받은 압축 파일안에 Yamb.exe와 같이 들어 있습니다.

mp4box.exe의 위치지정이 끝났다면 Next 버튼을 클릭합니다.

 

3. 좌측 카테고리에서 "Editing"을 선택하고 우측에서 세번째 항목을 더블 클릭합니다.   

4. Input에서 폴더 모양의 브라우저 버튼을 클릭하여 mp4, mov 동영상을 불러 오기 합니다.

주의 사항 : Yamb에서 불러올 수 있는 파일에 MPEG-TS(확장자 ts, tp,), MPEG-PS(확장자 mpeg, mpg, vob), m2ts 파일들이 더 있지만 그러한 동영상에 들어 있는 AC-3, DTS 오디오는 Yamb에서 디먹싱되지 않습니다.Yamb에서 디먹싱되는 오디오는 AAC, MP3, MP2, MP1 입니다.

5. mp4 파일에 들어 있는 "비디오 스트림"과 "오디오 스트림"이 Content 구획에 모두 표시됩니다.

그림에서 Content 구획을 보시면 첫번째 줄의 AVC는 "비디오 스트림"입니다.

2번째 줄은 오디오 스트림으로 AAC코덱의 LC프로파일로 만들어졌는데, 6채널(5.1채널) 48.0 KHz의 샘플링 레이트값을 가집니다.

디먹싱할 두번째 줄의 오디오를 선택합니다.

Options에서 디먹싱할 오디오가 AAC, ALAC라면 Extract to MP4에 체크합니다.

디먹싱할 오디오가 MP3, MP2, MP1 이라면 "Extract to Raw Format"에 체크합니다.

주의 사항 : 카메라로 찍은 mov 동영상 파일을 불러왔을때 PCM으로 표시된 것 중에 Signed PCM은 제대로 추출되지 않습니다.그것은 애플사의 PCM포맷으로 윈도우에서 재생은 되나 저장할 수 없는 파일이기 때문입니다.그런 경우에는

 ☞ 이 게시글에서 "STEP 3"을 참고하시면 됩니다..

6. Output에서 폴더 모양의 브라우저 버튼을 클릭하여, 저장될 폴더와 파일명을 지정합니다.

7. Next 버튼을 클릭하면 오디오의 디먹싱이 시작됩니다.

주의 사항 : aac오디오는 mp4컨테이너에 들어 있는 형태로 확장자가 mp4로 저장됩니다.

mp4 컨테이너에 비디오와 오디오가 같이 들어 있을때는 확장자를 반드시 mp4를 사용합니다.

그러나 오디오만 들어 있을때는 프로그램에 따라 mp4를 사용하기도 하고, m4a를 사용하기도 합니다.

따라서 오디오만 들어 있을 때는 이름바꾸기로 확장자를 m4a로 바꾸어도 됩니다. 바꾸는 것을 권장합니다.

 

사실 mp4나 mov에서 오디오를 빼낼때 다른 툴(tsMuxer)을 이용해도 됩니다.

그러나 오디오가 AAC일때는 다른 툴에서는 raw aac파일로 디먹싱을 해버려, 프로그램에서 호환성이 떨어지게 됩니다.

 

 

TS, M2TS, MPEG, MPG, VOB, MKV 파일에서 오디오 꺼내기

Transport Stream

MPEG Transport Stream(MPEG-TS) 컨테이너는 확장자를 .ts를 사용합니다.

소스에 따라서 .tp로 저장되기도 하지만 이름바꾸기로 확장자를 .ts로 바꾸어도 됩니다.

MPEG-TS는 MPEG-1 TS와 MPEG-2 TS를 모두 합하여 칭하는 말입니다.

 

BDAV MPEG-2 Transport Stream(줄여 BDAV Transport Stream)은 MPEG-2 TS에 기초해 만들어진 컨테이너로 블루레이에 사용됩니다.

확장자는 m2ts를 사용합니다.

 

TS, M2TS 파일에 들어갈 오디오 스트림은 DTS-HD MA, TrueHD, DTS, AC3, AAC, MP3, MP2...등으로 다양합니다.

 

Program Stream 

MPEG Program Stream(MPEG-PS) 컨테이너는 확장자를 mpeg이나 mpg를 사용합니다.

DVD-Video에서는 vob파일은 MPEG-PS의 일종입니다.

 

 

여기서 사용할 프로그램은 tsMuxer인데 이름 그대로 Transport Stream 컨테이너를 지원하는 프로그램입니다.

더불어 MPEG-PS(확장자 mpeg, mpg, vob)파일과 mkv파일에서도 오디오를 디먹싱할 수 있습니다.

또한 tsMuxeR는 mp4와 mov의 오디오를 디먹싱할 수도 있습니다.

그러나 mp4와 mov안에 AAC 오디오가 들어있다면 앞서 설명한대로 Yamb을 이용하는 것이 좋습니다

 

1. ☞ 여기에서 "tsMuxeR"를 다운 받아 압축을 풀어 놓습니다.

"tsMuxerGUI.exe" 파일을 더블 클릭하여 실행시킵니다.

2. add 버튼을 클릭하여 동영상 파일을 불러 오기합니다.

3. Tracks에서 디먹싱할 오디오를 선택합니다. 

4. Output에서 "Demux"에 체크합니다.

5. Browse 버튼을 클릭하여 오디오 파일이 저장될 폴더를 지정합니다.

6. Strart demuxing 버튼을 클릭하면 디먹싱이 시작됩니다.

 

7. 선택한 오디오가 AAC라면 디먹싱된 aac오디오는 raw AAC파일로 확장자를 aac를 사용합니다.

이 raw 파일은 호환성이 적습니다. 즉 푸바같은 미디어 플레이어에서 재생은 되지만 시크바를 움직일 수 없고, 변환프로그램에서는 인식하지 못합니다.

따라서 raw acc파일을 mp4 컨테이너에 넣는 추가과정이 필요합니다.

 

① 앞서 설명한 Yamb을 열기합니다.

"MP4, MOV 파일에서 오디오 꺼내기"에서 설명한 1. 2번 과정의 설정을 합니다. 이미 MP4Box의 위치 설정을 했다면 생략합니다.
 

② 좌측 카테고리에서 "Creation"을 선택하고 우측에서 첫번째 항목을 더블 클릭합니다  

③ Add버튼을 클릭하여 raw acc 파일을 불러오기 합니다.

④ Output에서 Browse버튼을 클릭하여 저장될 폴더와 파일명을 입력합니다.

⑤ Next 버튼을 클릭하면, 확장자가 mp4인 파일이 만들어집니다.

앞서 설명했듯이 오디오만 들어 있는 mp4 파일은 "이름 바꾸기"로 m4a 확장자로 바꾸어도 됩니다. 바꾸는 것을 권장합니다. 

ASF, WMV 파일에서 오디오 꺼내기

일반적으로 WMA(Windows Media 오디오) 코덱을 사용하여 압축된 오디오 콘텐츠가 포함된 ASF 파일의 확장명은 .wma입니다.

마찬가지로 WMA(Windows Media 오디오) 및 WMV(Windows Media 비디오) 코덱을 사용하여 압축한 오디오 콘텐츠, 비디오 콘텐츠 또는 두 가지 모두가 포함된 ASF 파일의 확장명은 .wmv입니다.

마지막으로 그 밖의 다른 코덱을 사용하여 압축한 콘텐츠는 일반 .asf 확장명을 사용합니다.

아래 설명은 Window XP 기준으로 한 설명입니다. 윈도우 7이나 비스타는 테스트해보지 않았습니다.

아래 링크에서 Window Media Encoder 9를 다운받아 설치합니다.(파일 2개를 모두 받아야 압축이 풀립니다)

☞ Window Media Encoder 9 Part 1 다운 받기           ☞ Window Media Encoder 9 Part 2 다운 받기 

 

Window Media 스트림 편집기를 실행합니다.

스트림 편집기에서 원본 추가 버튼을 클릭하여 wmv, asf 동영상을 불러오기 합니다.

추가 버튼을 클릭합니다.

파일 만들기 버튼을 클릭합니다. 적당한 이름을 입력하고 저장합니다.

 

Flash Video에서 오디오 빼내기

Flash Video 컨테이너는 flv, f4v라는 확장자를 가집니다.

확장자에 따라 지원하는 비디오, 오디오 스트림이 다릅니다.

 

flv가 지원하는 비디오, 오디오 스트림

Video: On2 VP6, Sorenson Spark (Sorenson H.263), Screen video, H.264
Audio: MP3, ADPCM, Linear PCM, Nellymoser, Speex, AAC, G.711 (reserved for internal use)

 

f4v가 지원하는 비디오, 오디오 스트림

Video: H.264
Images (still frame of video data): GIF, PNG, JPEG
Audio: AAC, HE-AAC, MP3

flv, f4v 컨테이너 안에 들어 있는 비디오 스트림, 오디오 스트림은 FLVExtract로 빼낼 수 있습니다.

1. ☞ 여기에서 FLVExtract를 다운받아 압축 풀기합니다. FLVExtract.exe를 더블클릭합니다.

단 자신의 컴퓨터에 ☞ .Net Framework 2.0이 설치되어 있어야 합니다. 

2. 탐색기에서 flv파일을 선택한 다음 클릭한 상태로 FLVExtract에 끌어다 놓습니다.

3. 오디오 스트림이 자동으로 디먹싱됩니다.

테스트 결과 오디오 스트림이 AAC와 MP3인 경우 헤더가 있는 파일로 디먹싱되었기에 재생하는데 문제가 없었습니다.

 

참고

비디오 스트림이 H.264인 경우에 확장자가 .264인 raw 파일로 디먹싱되었습니다.

VP6과 Sorenson Spark(=flv1) 비디오 스트림은 avi 컨테이너에 들어 있는 상태로 디먹싱되었습니다.

'Development > Multimedia' 카테고리의 다른 글

Change audio arrangement without reencoding  (0) 2012.06.17
Change container mkv to avi without reencoding video or audio stream  (0) 2012.05.16
What DLS is ...  (0) 2009.10.25
Gstreamer example  (0) 2008.07.18
To refer about gstreamer  (0) 2008.05.30
Posted by 까 치
,

[출처] http://blog.naver.com/hcwha/70099948018

 

 

여기에서 다룰 변환은 동영상의 컨테이너만 바꾸는 변환입니다.

쉽게 풀어 말하면 "mkv 컨테이너"안에 들어 있는 "비디오 스트림"과 "오디오 스트림"을 꺼내어, avi에 컨테이너에 넣는 변환입니다.

즉 확장자만 다르게 변화시킬 뿐, 실제 "비디오 데이터"와 "오디오 데이터"는 변하지 않습니다.

 

2010년도의 LG TV중에 동영상을 USB 메모리나 외장하드에 저장해 연결했을때 동영상을 재생하는 USB 호스트기능이 있습니다.

지원 동영상 리스트를 보면 Xvid 비디오가 들어있는 mkv는 재생되지 않으나, Xvid 비디오가 들어간 avi는 재생이 가능했습니다.

Xvid.mkv파일을 보려고 할때는 사람들이 사용하는 팟인코더, 곰인코더등을 이용해서 재인코딩을 할 필요가 없습니다.

Xvid.avi로 컨테이너만 바꾸어주면 재생이 가능하게 됩니다. 시간절약에 화질유지까지 두마리 토끼를 잡는 셈이죠.

 

베가스같은 편집 프로그램에서 mkv를 편집하려면 Yamb을 이용해서 mkv에서 mp4(MPEG-4 Part 14)파일로 컨테이너만 바꾸는 변환을 하십시요.

그리고 mp4를 정상적으로 편집할 수 있는 베가스 10버전을 이용하시면 됩니다. 또한 avi로 컨테이너를 바꾸어도 베가스에서 인식합니다.

간단한 단순히 컷작업같은 편집을 할때는 "Direct Stream Copy"를 사용할 수 있는 VirtualDubMod가 베가스보다는 좋은 선택입니다.

그때는 먼저 mkv에서 avi로 컨테이너를 바꾸는 작업이 선행되어야 합니다.

참고로 mkv파일을 단순히 자르는 작업은 mkvmerge GUI를 이용하시면 됩니다. 그러나 지정한 시간에 정확히 잘리지는 않습니다.

 

 

 

컨테이너에서 비디오 스트림을 꺼내어 파일로 저장하는 과정을 디먹싱이라고 합니다.

(디먹싱의 실제 의미는 재생때 디멀티플렉서가 컨테이너에서 스트림을 꺼내어 디코더로 전달하는 과정을 말합니다.)

비디오 파일, 오디오 파일, 자막 파일을 컨테이너에 넣는 과정을 먹싱이라고 합니다.

 

 

STEP 1. 디먹싱

 

 

변환시킬 동영상 파일 1번 ◀

 

 

  컨테이너 : Matroska (확장자 .mkv)

  비디오 코덱 : Xvid

  오디오 코덱 : AC-3 (영화 본편 더빙), AC-3 (해설 더빙)

 

 

 

1. 필요한 프로그램 설치 

아래 링크를 2개를 모두 받아 압축 풀기합니다. MKVToolnix 설치합니다.

☞ MKVToolnix Part 1 다운받기    ☞ MKVToolnix Part 2 다운받기

☞ 여기를 클릭해 "MKVExtract GUI"를 다운받아 압축풀기합니다.

MKVExtractGUI2.exe를 복사해 MKVToolnix가 설치된 "C:Program FilesMKVtoolnix"폴더에 붙여 넣기합니다.

MKVExtractGUI2.exe에서 마우스 오른쪽 버튼을 클릭하여 "시작메뉴에 고정"시킵니다. MKVExtractGUI2.exe를 더블클릭하여 실행합니다.

MKVExtractGUI2를 시작메뉴에 고정해놓았으니 다음에는 시작메뉴에서 실행하면 됩니다.

 

2. 비디오와 오디오를 디먹싱

 

(1) Input File에서 오른쪽에 있는 버튼을 클릭하여 디먹싱할 mkv파일을 불러옵니다.

(2) 그림처럼 "Source Dir"에 체크하면 열기한 mkv파일이 있는 폴더에 디먹싱된 파일이 저장되게 됩니다.

(3) Tracks에서 오른쪽 끝에 있는 "전체 선택"버튼을 클릭합니다.

     그리고 Tracks에서 정보를 보고 디먹싱하고 싶지 않은 파일에 체크해제 합니다

     이 mkv 컨테이너에는 1개의 "비디오 스트림", 2개의 "오디오 스트림"이 들어 있습니다.

(4) Extract버튼을 클릭하면 디먹싱이 시작됩니다.

 

Xvid 비디오는 AVI 컨테이너에 먹싱된 상태로 avi인 파일로 저장되며, AC-3 오디오는 확장자가 .ac3인 파일로 저장됩니다.

이렇게 두가지 모두 raw 파일이 아닌 상태로 디먹싱됩니다.

 

 

 

 

 

변환시킬 동영상 파일 2번

 

 

   컨테이너 : Matroska(확장자 .mkv)

   비디오 코덱 : H264 (=MPEG-4 AVC)

   오디오 코덱 : AC-3(영어 더빙), AC-3(한국어 더빙) (2가지가 모두 들어 있는 파일)

 

 

 

 

1. 필요한 프로그램 설치

H264 코덱으로 만들어진 비디오를 디먹싱해야 합니다.

mkv파일에 H264 비디오가 들어 있는 경우에 mkvextract를 사용하면 확장자가 .h264인 raw 파일로 디먹싱됩니다.

avc2avi를 이용해 h264 파일을 avi 컨테이너에 디먹싱할 수 있으나 2기가 이상에서 에러를 보이므로 나누는 작업이 추가됩니다.

여러모로 불편합니다. 그러나 다행히도 Haali Media Splitter를 설치했을때 들어 있는 "mkv2vfr.exe"을 이용하면 avi 파일로 에러없이 저장시킬수 있습니다.

 

☞ 여기를 클릭하여 "mkv2vfr.exe", "mkunicode.dll", "mkzlib.dll"파일을 다운받습니다.

동영상과 위 3파일이 같은 폴더에 있도록 붙여넣기 합니다.

이미 Haali Media Splitter가 설치되어 있는 분은, 마찬가지로 Haali Media Splitter가 설치된 폴더에서 3파일을 복사해 동영상이 있는 폴더에 붙여넣기합니다.

 

2. 비디오 디먹싱

 

도스상태에서 mkv파일과 mkv2vfr.exe파일이 들어 있는 폴더로 이동합니다. 그리고 mkv2vfr에 디먹싱 명령을 내려줘야 합니다.

도스라면 어렵다고 생각할수도 있지만 아주 간단합니다.

 

(1) 윈도우 작업표시줄에서 [시작 → 모든 프로그램 → 보조프로그램 → 명령 프롬프트]를 선택합니다.

(윈도우키+R을 눌러 실행창에 cmd를 입력하고 엔터해도 됩니다.)

 

(2) mkv파일이 들어 있는 폴더를 "D:TEST" 폴더라고 가정하고 설명하겠습니다.

프롬프트창에서 "D:TEST"까지 이동해야 합니다.

d:라고 입력후 엔터합니다. cd test라고 입력후에 엔터합니다.

 

(3) 이제 mkv2vfr에 명령을 내리면 됩니다. 기본 명령은 다음과 같습니다. mkv2vfr input.mkv output.avi

input.mkv에 디먹싱할 mkv파일명을 적고, 저장될 output.avi는 저장될 파일명이니 원하는 대로 적습니다.

만약 파일명에 띄어쓰기가 되어 있는 경우에는 "Test 01.mkv"와 같이 큰따옴표를 적어 주어야 합니다.

저장되는 avi파일에는 H264 비디오 스트림만 들어 있습니다. 아쉽게도 오디오는 mkv2vfr로 디먹싱할 수 없습니다.

 

 

 

참고하세요

MKV, MP4컨테이너는 VFR방식으로 인코딩된 비디오 스트림을 지원하지만, AVI컨테이너는 지원하지 않습니다.

그 차이때문에 MKV, MP4에 들어 있는 vfr로 만들어진 H264 비디오를 빼내어 AVI 컨테이너에 넣었을 때는 싱크가 맞지 않게 됩니다.

VFR 비디오 스트림을 지원하지 않는 AVI 컨테이너 특성때문에 생긴 싱크에러는 컨테이너만 바꾸어서는 해결이 안되고, 재인코딩을 해야만 합니다.

mkv2vfr로 VFR 비디오 스트림을 빼내면 아래 그림처럼 프레임 레이트가 여러개 표시되는 것으로 확인할 수 있습니다.

이런 VFR 비디오 스트림은 주로 일본 만화 영화에서 많이 사용됩니다.

 

 

 

(4) 저장된 avi파일을 미디어 플레이어로 재생시켜 봅니다. 정상적으로 재생되지 않으면 문제가 있는 것입니다.

 

참고하세요

사실 동영상 프로그램들은 내부 충돌이 일어날 가능성이 높은데, 제 컴퓨터 환경에서는 Haali Media Splitter의 최신버전이 설치된 상태에서는 디먹싱하면 결과물이 정상적으로 재생되지 않았습니다.

버전을 바꾸어 테스트했더니 정상적으로 디먹싱되었습니다. 어디서 문제인지는 저도 모르겠습니다.

제가 테스트할때 정상적으로 디먹싱한 버전은 ver. 1.9.42.1 이었습니다.

 

 

 

 

3. 오디오 디먹싱

MKVExtract로 디먹싱하면 됩니다. 1번 동영상에서 설명한 대로 따라 하세요.

 

 

 

 

 

 

STEP 2. 먹싱

 

스텝 1에서 디먹싱하여 비디오만 들어 있는 avi파일과 오디오 파일을 만들었습니다.

비디오 스트림만 들어 있는 avi파일에 오디오 파일을 먹싱시켜 보겠습니다.

먹싱은 VirtualDub으로 해도 되고, AVI-Mux로 해도 되는데, 여기서는 AVI-Muxer로 하겠습니다.

 

 

 

1. ☞ 여기를 클릭하여 AVI-Mux를 다운받습니다. 적당한 곳에 압축을 풀어 놓습니다.

무설치 프로그램이니 "AVIMux_GUI.exe"파일을 더블 클릭하여 실행합니다.

 

 

2. 그림 처럼 "open files" 영역에서 마우스 오른쪽 버튼을 클릭하여 "add"버튼을 클릭합니다.

비디오 스트림만 들어 있는 avi파일을 추가합니다.

탐색기에서 avi 파일을 끌어다가 "open files" 영역에 떨어트려도 됩니다.

 

H264 비디오가 들어간 avi파일을 떨어트렸을 때 에러가 발생하는 것은 비디오 스트림의 index block이 깨진 경우같이 정상적이지 못할때 입니다.

VirtualDub으로 열었을때도 마찬가지로 에러메시지가 표시될 겁니다.

앞에서 말했듯이 컴퓨터에서 Haali Media Splitter를 언인스톨시키고, 제가 올린 파일 mkv2vfr로 다시 해보세요.

그래도 안되면 무언가 내부적인 요인에 의한 것이니, 스스로 찾아야 합니다. 어둠의 길로 들어서게 되는 거죠. 

 

 

 

3. 불러온 avi파일을 더블클릭합니다. 그러면 아래쪽 먹싱될 성분을 나타내는 영역에 비디오가 표시 됩니다.

 

 

 

4. 다시 "open files" 영역에서 스텝 3에서 디먹싱된 "오디오 파일"을 추가합니다.

    비디오와 달리 아래쪽 창에 자동으로 표시됩니다.

참고: avi 컨테이너에도 오디오 스트림을 2개이상 넣을 수 있습니다.

미디어 플레이어에서 먼저 재생될 오디오 파일을 불러온 뒤에, 그 다음 부수적으로 포함시킬 오디오를 불러옵니다.

 

5. Start 버튼을 클릭합니다.

   열리는 창에서 "파일 형식"이 "AVI files (*.avi)"로 되어 있는지 확인합니다.

   적당한 avi파일명을 입력하고 저장합니다.

 

 

 

에러 상황 1

만들어지는 파일이 mkv라면 AVI-Mux GUI에서 오른쪽 아래에 있는 "Setting"버튼을 클릭합니다.

아래 그림처럼 "default output format"을 AVI로 바꾸면 됩니다.

 

 

 

에러 상황 2

싱크가 맞지 않는 경우가 발생하면 오디오파일을 클릭합니다. 그러면 delay창이 활성화됩니다.

미리 미디어 플레이어에서 확인해 보고 적당한 delay값을 찾아 적용시키면 됩니다. 단위는 밀리초입니다.

 

 

 

 

 

 

 

※ 후기

베가스에서 mkv를 지원하지 않습니다.

때문에 베가스에서 지원하는 ts, m2ts, mp4, mov등으로 바꾸면 어떨까 궁금증이 일어났습니다.

일단 mov는 오디오가 스테레오만 지원하는 단점이 있어 배제했습니다.

(mov를 불러올때 화면이 검게 나오는 버그는 베가스 9.0e버전에서는 교정되었습니다.)

 

H.264 비디오를 컨테이너에서 빼내어 ts, m2ts, mp4로 바꾸었을때 컴퓨터로 재생하는데는 아무 문제가 없습니다.

tsMuxer로 만든 ts, m2ts는 파일은 열었을때 베가스가 얼어버리는 현상이 발생했습니다. 제컴만 그런것인지....

H264 비디오는 2 GB가 넘었을때 문제를 일으키니 mkv파일을 2기가씩 잘라내어 mkv 파일을 여러개 만들었습니다.

그것을 다시 Boilsoft Video Joiner를 이용해 이어 붙여 하나의 mp4파일을 만들었습니다.

합쳐진 mp4파일을 베가스 9버전에서 열었을때는 재생이 매끄럽지 않아 편집도 불가능했습니다.

그러나 베가스 10버전에서는 매끄럽게 재생되었고, 프레임을 이동시 얼지않고 정상적으로 이동되었습니다. 따라서 편집도 가능해졌습니다.

 

베가스 10버전을 오늘 처음 사용해봤지만 베가스 9버전에서 열어 저장됬던 sfk파일을 그대로 사용하면 오디오파형이 제대로 보이지 않는 문제가 있었습니다. 지우면 오디오를 불러오는데 시간이 걸리지만 정상적으로 파형이 보이네요.

 

렌더링시간이 무척긴 베가스로 영화 한편을 모두 인코딩하지는 않겠죠.

어차피 일정부분을 때어내어 작업한다면 AVI로 만들어 VirtualDubMod로 자르고 그것을 베가스에 임포팅해 작업을 하는 것도 좋은 선택으로 생각됩니다.

'Development > Multimedia' 카테고리의 다른 글

동영상에서 오디오를 변환하지 않고 빼내기  (0) 2012.06.17
Change audio arrangement without reencoding  (0) 2012.06.17
What DLS is ...  (0) 2009.10.25
Gstreamer example  (0) 2008.07.18
To refer about gstreamer  (0) 2008.05.30
Posted by 까 치
,

Gstreamer build

Development/Linux 2011. 7. 28. 15:48
gnome-media - GNOME media utilities
gstreamer-tools - Tools for use with GStreamer
gstreamer0.10-alsa - GStreamer plugin for ALSA
gstreamer0.10-doc - GStreamer core documentation and manuals
gstreamer0.10-esd - GStreamer plugin for ESD
gstreamer0.10-gnomevfs - GStreamer plugin for GnomeVFS
gstreamer0.10-plugins-base - GStreamer plugins from the "base" set
gstreamer0.10-plugins-base-apps - GStreamer helper programs from the "base" set
gstreamer0.10-plugins-base-dbg - GStreamer plugins from the "base" set
gstreamer0.10-plugins-base-doc - GStreamer documentation for plugins from the "base" set
gstreamer0.10-plugins-good - GStreamer plugins from the "good" set
gstreamer0.10-plugins-good-dbg - GStreamer plugins from the "good" set
gstreamer0.10-plugins-good-doc - GStreamer documentation for plugins from the "good" set
gstreamer0.10-tools - Tools for use with GStreamer
gstreamer0.10-x - GStreamer plugins for X11 and Pango
juk - music organizer and player for KDE
libgstreamer-plugins-base0.10-0 - GStreamer libraries from the "base" set
libgstreamer-plugins-base0.10-dev - GStreamer development files for libraries from the "base" set
libgstreamer-plugins-pulse0.10-0 - PulseAudio plugin for GStreamer
libgstreamer0.10-0 - Core GStreamer libraries and elements
libgstreamer0.10-0-dbg - Core GStreamer libraries and elements
libgstreamer0.10-dev - GStreamer core development files
python-gst0.10 - generic media-playing framework (Python bindings)
python-gst0.10-dbg - generic media-playing framework (Python debug bindings)
serpentine - An application for creating audio CDs
totem-gstreamer - A simple media player for the Gnome desktop based on gstreamer
totem-mozilla - Totem Mozilla plugin
farsight0.1-rtp - plugin providing RTP support for farsight
geekast - GNOME interface to peercast
geekast-binary - GNOME interface to peercast - binaries
goobox - CD player and ripper for GNOME
gstreamer-editor - GStreamer Pipeline Editor and other GUI tools
gstreamer0.10-ffmpeg - FFmpeg plugin for GStreamer
gstreamer0.10-fluendo-mp3 - Fluendo mp3 decoder GStreamer plugin
gstreamer0.10-fluendo-mpegdemux - Fluendo GStreamer plugin for MPEG2 demuxing
gstreamer0.10-gl - GStreamer plugin for OpenGL output
gstreamer0.10-gnonlin - non-linear editing module for GStreamer
gstreamer0.10-gnonlin-dev - development files of the non-linear editing module for GStreamer
gstreamer0.10-pitfdll - GStreamer plugin for using MS Windows binary codecs
gstreamer0.10-plugins-bad - GStreamer plugins from the "bad" set
gstreamer0.10-plugins-bad-dbg - GStreamer plugins from the "bad" set
gstreamer0.10-plugins-bad-doc - GStreamer documentation for plugins from the "bad" set
gstreamer0.10-plugins-farsight - Gstreamer plugins for audio/video conferencing
gstreamer0.10-plugins-ugly - GStreamer plugins from the "ugly" set
gstreamer0.10-plugins-ugly-dbg - GStreamer plugins from the "ugly" set
gstreamer0.10-plugins-ugly-doc - GStreamer documentation for plugins from the "ugly" set
gstreamer0.10-sdl - GStreamer plugin for SDL output
gstreamer0.8-a52dec - ATSC A/52 audio decoder plugin for GStreamer
gstreamer0.8-aa - AA-lib plugin for GStreamer
gstreamer0.8-alsa - ALSA plugin for GStreamer
gstreamer0.8-artsd - aRtsd plugin for GStreamer
gstreamer0.8-audiofile - AudioFile plugin for GStreamer
gstreamer0.8-caca - Colour AsCii Art library plugin for GStreamer
gstreamer0.8-cdio - low-level CD-ROM reading and control plugin for GStreamer
gstreamer0.8-cdparanoia - cdparanoia plugin for GStreamer
gstreamer0.8-doc - GStreamer documentation
gstreamer0.8-dv - DV plugin for GStreamer
gstreamer0.8-dvd - DVD plugin for GStreamer
gstreamer0.8-esd - Enlightened Sound Daemon plugin for GStreamer
gstreamer0.8-festival - Festival speech synthesis plugin for GStreamer
gstreamer0.8-ffmpeg - FFmpeg plugin for GStreamer
gstreamer0.8-flac - FLAC plugin for GStreamer
gstreamer0.8-gnomevfs - Gnome VFS plugin for GStreamer
gstreamer0.8-gsm - GSM plugin for GStreamer
gstreamer0.8-gtk - Gtk/Gdk plugin for GStreamer
gstreamer0.8-hermes - colorspace conversion plugin for GStreamer based on hermes
gstreamer0.8-jpeg - JPEG plugin for GStreamer
gstreamer0.8-mad - MAD MPEG audio decoder plugin for GStreamer
gstreamer0.8-mikmod - MikMod decoder plugin for GStreamer
gstreamer0.8-misc - Collection of various GStreamer plugins
gstreamer0.8-mms - mms plugin for GStreamer
gstreamer0.8-mpeg2dec - MPEG1 and MPEG2 video decoder plugin for GStreamer
gstreamer0.8-musepack - Musepack (MPC) audio decoder plugin for GStreamer
gstreamer0.8-oss - OSS plugin for GStreamer
gstreamer0.8-plugin-apps - Simple GStreamer applications
gstreamer0.8-plugins - All GStreamer plugins
gstreamer0.8-sdl - SDL videosink plugin for GStreamer
gstreamer0.8-sid - C64 SID decoder plugin for GStreamer
gstreamer0.8-speex - Speex plugin for GStreamer
gstreamer0.8-swfdec - SWF (Macromedia Flash) decoder plugin for GStreamer
gstreamer0.8-theora - Theora plugin for GStreamer
gstreamer0.8-tools - Tools for use with GStreamer
gstreamer0.8-vorbis - Vorbis plugin for GStreamer
gstreamer0.8-x - X videosink plugin for GStreamer
libfarsight0.1-1 - audio/video stream library
libfarsight0.1-dbg - audio/video stream library: debugging support
libfarsight0.1-dev - audio/video stream library: development files
libfarsight0.1-doc - audio/video stream library: documentation
libglib-cil - CLI binding for the GLib utility library
libgstreamer-gconf0.8-0 - GConf support for GStreamer
libgstreamer-gconf0.8-dev - Development files for GConf support for GStreamer
libgstreamer-perl - Perl interface to the gstreamer media processing framework
libgstreamer-plugins0.8-0 - Various GStreamer libraries and library plugins
libgstreamer-plugins0.8-dev - Development files for various GStreamer library and library plugins
libgstreamer0.10-ruby1.8 - GStreamer 0.10 bindings for the Ruby language
libgstreamer0.8-0 - Core GStreamer libraries, plugins, and utilities
libgstreamer0.8-dev - GStreamer development libraries and headers
libgstreamer0.8-ruby - GStreamer 0.8 bindings for the Ruby language
libgtksourceview1-ruby - GTKSourceView bindings for the Ruby language
peercast-geekast - GNOME interface to peercast - peercast-servent data files
pitivi - non-linear audio/video editor using GStreamer
python-gst - generic media-playing framework (Python bindings)
soundconverter - convert sound files to other formats
swf-player - Mozilla plugin for SWF files (Macromedia Flash)
tap-plugins - Tom's Audio Processing LADSPA plugins
telepathy-stream-engine - stream handler for the Telepathy framework
thoggen - DVD backup utility based on GStreamer and Gtk+
gstreamer0.10-plugins-bad-multiverse - GStreamer plugins from the "bad" set (Multiverse Variant)
gstreamer0.10-plugins-bad-multiverse-dbg - GStreamer plugins from the "bad" set (Multiverse Variant)
gstreamer0.10-plugins-ugly-multiverse - GStreamer plugins from the "ugly" set (Multiverse Variant)
gstreamer0.10-plugins-ugly-multiverse-dbg - GStreamer plugins from the "ugly" set (Multiverse Variant)
gstreamer0.8-dirac - Dirac decoder plugin for GStreamer
gstreamer0.8-faac - AAC encodingplugin for GStreamer
gstreamer0.8-faad - AAC decoding plugin for GStreamer
gstreamer0.8-lame - LAME encoder plugin for GStreamer
gstreamer0.8-pitfdll - DLL/QTX loader plugin for GStreamer
gstreamer0.8-plugins-multiverse - All Multiverse GStreamer plugins
gstreamer0.8-xvid - XVID encoder plugin for GStreamer
app-install-data - GNOME Application Installer (data files)
gnome-app-install - GNOME Application Installer
openoffice.org - OpenOffice.org Office suite
pulseaudio - PulseAudio sound server

* 까치님에 의해서 게시물 이동되었습니다 (2007-11-29 11:19)

'Development > Linux' 카테고리의 다른 글

Ubuntu 10.04 JDK  (0) 2012.09.26
asoundrc asound.conf  (0) 2012.06.17
NFS in ubuntu  (0) 2009.12.04
Upgrade distribution in ubuntu  (0) 2009.11.27
Upgrade Ubuntu  (0) 2009.11.27
Posted by 까 치
,
사무실에서 업무가 이루어지지 않는 이유, 제이슨 브라이드  U X D E S I G N 

2011/02/04 16:52

복사http://uxjames.com/20121902684


http://www.ted.com/talks/view/id/1014 (동영상) 


일에 대해서 이야기 해보려고 하는데요, 특히 어째서 사람들이 사무실에서 일을 할 수 있을 것 같지 않은지에 대해서 말입니다. 우리 모두가 겪어본 문제니까요. 맨 처음부터 시작해볼까요. 기업들, 비영리단체들, 자선단체들 그리고 직원들이나 어떤 종류의 자원봉사자들이 있는 이런 집단들이 있습니다. 그리고 집단들은 그들을 위해 일하는 이런 사람들이 일을 잘하기를 기대합니다. 적어도 저는 그러기를 바랄 것입니다. 적어도 만족할 만한 일이죠. 바라건데 적어도 만족할 일을요. 바라건데 대단한 일을요. 그래서 그들이 일반적으로 하는 일은 한 장소에서 함께 일하기를 바라는 이 모든 사람들이 그 일을 할 수 있도록 결정하는 것입니다. 그래서 기업이나 자선단체 또는 어떤 종류의 조직이든 일반적으로 -- 여러분이 아프리카에서 일하는 것이 아닌 이상, 그렇게 할 정도로 운이 좋다면 말이죠. -- 대부분의 사람들은 매일 사무실로 출근해야 합니다. 그리고 이런 회사들은 사무실을 설립합니다. 나가서 건물을 매입 또는 임차하거나, 어떤 공간을 빌려서, 여러가지 집기들로 채웁니다. 테이블이나 책상, 의자, 컴퓨터 기기들, 소프트웨어, 인터넷 접속, 냉장고 등등으로 채웁니다. 그리고 그들의 직원들이나 자원봉사자들이 그곳으로 매일 출근해서 대단한 일을 하길 바라죠. 그렇게 요구하는 것이 지극히 합리적인 것 같기는 합니다.


하지만, 여러분이 무슨 일을 진짜 하고자 할 때, 어디에서 하기를 바라느냐고 실제로 사람들에게나 스스로에게 물어본다면, 사람들은 기업에서 그들이 답할거라 생각하는 답을 하지 않는 다는 것을 발견할 것입니다. 무슨 일을 하기 원할 때, 어디로 가기를 바라느냐고 사람들에게 물어본다면 어떨까요? 일반적으로 세 가지 다른 답을 얻을 수 있습니다. 하나는 어떤 장소나 위치, 공간 같은 것이고, 또 하나는 움직이는 대상, 셋째로는 시간입니다


몇 가지 예를 들어보죠. 제가 사람들에게 물어볼 때, 저는 사람들에게 이 질문을 10년째 해오고 있습니다. 사람들에게 "정말 어떤 일을 해야 할 때, 어디로 가십니까?"라고 물으면 베란다, 마당, 부엌 같은 답을 듣습니다 집에 있는 여분의 방, 지하실, 커피샵 도서관 같은 답을 듣습니다. 그리고 나서 전철, 비행기, 차와 같은 통근 수단이라는 대답을 들을 것입니다. 그리고 나서 "정말 이른 아침이나 정말 늦은 밤, 또는 주말이기만 하면, 장소는 중요하지 않습니다."라는 답을 듣게 될 것입니다. 사무실이라는 대답은 거의 들을 수가 없을 것입니다. 그러나 기업체들은 사무실이라 불리는 장소에 돈을 쏟아붓고 사람들을 항상 그곳으로 오도록 만들지만, 사람들은 사무실에서 일을 하지 않습니다.


어째서일까요? 왜죠? 왜 그런 일이 일어날까요? 여기서 좀 더 깊이 들어가보면 알 수 있는 것은 사람들이 출근하고 사람들이 출근하면 기본적으로 그들의 근무시간 중에서 일련의 일하는 때를 맞바꾸고 있습니다. 그것이 사무실에서 벌어지는 일입니다. 근무시간을 가지는것이 아니라 일하는 때를 가지고 있습니다. 사무실의 정문은 믹서기 같아서 들어서는 순간, 여러분의 하루는 조각조각 나죠. 여기에 15분, 저기에 30분을 매달려 있고, 다른 일이 일어나면 하던 일에서 벗어나게 됩니다. 그리고 또 다른 것을 하다보면, 20분 정도 자기 일을 하게 되고, 곧 점심시간이죠. 그리고 또 다른 할 일이 생기고, 15분 정도 자기 일을 하다보면, 누군가가 불러서 질문을 합니다. 그리고 알아채기도 전에 오후 5시가 됩니다. 그리고 하루를 되돌아 보면, 아무 일도 마무리 못한 것을 깨닫게 되죠. 우리 모두 이런 경험이 있습니다. 바로 어제 이랬을 수도 있고, 그제나 그그제였을 수도 있죠. 하루를 되돌아 보니, 오늘 아무것도 마무리 지은 일이 없습니다. 출근을 하고, 책상에 앉아 비싼 컴퓨터도 사용하고, 회사에서 쓰라고 한 소프트웨어를 사용하고, 참석하라고 한 회의에도 나가고, 전화 회의도 하고, 이 모든 것들을 했습니다. 하지만 실제로는 아무것도 못했습니다. 단지 과업만 했지, 실제로는 의미있는 업무를 하지 못했습니다.


그리고 여러분이 발견한 것은 특히 창조적인 일을 하는 사람들, 디자이너, 프로그래머, 작가, 엔지니어, 사상가들이 정말 필요한 것은 어떤 일을 하기 위해 방해받지 않는 긴 시간이라는 것입니다. 누군가에게 15분 내로 창의적이 되도록 하고, 어떤 문제에 대해 생각해보라고 요청할 수 없습니다. 재빠른 아이디어를 얻을 수 있겠지만, 어떤 문제에 대해 깊은 생각을 하고, 그 문제를 진짜 주의깊게 고려하기 위해서는 방해받지 않는 긴 시간이 필요합니다. 그리고 업무시간이 일반적으로 8시간일지라도, 사무실에서 스스로에게 8시간을 할당해보신 분들이 여기서 얼마나 될까요? 7시간은요? 6시간? 5시간? 4시간? 사무실에서 마지막으로 3시간을 스스로에게 할당해본 때가 언제인가요? 2시간은요? 1시간은 있으시겠죠. 아주 소수의 사람들만이 실제로 사무실에서 방해받지 않는 긴 시간을 가집니다. 그리고 이것이 사람들이 집에서 일을 하거나, 사무실에 출근을 하더라도 정말 아침 일찍이나 아무도 주위에 없을 때 밤 늦게 사무실로 가거나, 모두 퇴근한 후에 남아있거나, 주말에 사무실로 나가거나, 비행기에서 일을 하거나, 차나 기차 안에서 일을 하는 이유입니다. 방해하는 것이 없기 때문입니다.


물론 다른 종류의 방해요소가 있겠지만, 이제 곧 말씀드릴 정말 심각한 방해요소들은 없습니다. 그리고 일을 완료하기 위해 짧은 시간들을 가지는 이런 모든 사건들은 여러분이 방해 받을 때, 일이 되지 않는 다른 것들을 떠올리게 합니다. 그리고 그것은 수면이죠. 수면과 일은 아주 밀접히 연관되어 있다고 생각합니다. 그리고 수면 중에 일을 할 수 있고, 일하는 중에 수면을 취할 수 있는 것이 아닙니다. 그것이 제가 의도하는 것은 아닙니다. 저는 분명히 수면과 일은 국면에 바탕을 두거나 단계적인 사건이라는 사실을 말하고 있습니다. 수면에는 수면 국면 또는 단계에 대한 것입니다. 어떤 사람들은 그것들을 다르게 지칭합니다. 모두 5단계가 있고, 깊은 수면, 의미있는 수면에 이르기 위해서는 사전 단계들을 거쳐야만 합니다. 그리고 사전 단계들을 거치는 동안 방해를 받게 되면, 누군가 자고 있는 여러분과 부딪힌다거나, 소음이 있거나, 무슨일이 벌어진다면, 중단한 단계로 회복하지 못합니다.


방해를 받아서 깨게 된다면, 다시 시작해야만 합니다. 몇 단계를 되돌아가서 첫 단계부터 다시 시작해야 합니다. 그리고 벌어지는 일은, 여러분이 아마 겪어보셨을 텐데요. 아침 7시나 8시에 일어나서, 아니면 언제 일어나든지 "이런, 잠을 정말 제대로 못잤어. 자긴 잤는데, 침대에 가서 누웠는데, 진짜로 잠들지는 못했어." 라고 할 때가 있을 것입니다. 사람들은 잠을 자러 간다고 말합니다. 잠은 자는 게 아니라 잠을 향해 가는 겁니다 시간이 걸리죠. 여러분은 이런 단계들을 거쳐 가게 됩니다. 그리고 방해를 받게 되면, 잠을 잘 못 자죠. 혹시 여기 계신 분들 중에 밤 새도록 방해를 받은 사람이 잠을 잘 잤을 거라고 하실 분 계십니까? 아무도 안 계시겠죠. 온종일 사무실에서 방해를 받는다면 사람들이 일을 잘 할 거라고 예상할까요? 사람들이 방해를 받으러 사무실로 출근하는데 어떻게 일을 잘 할 거라 생각할 수 있을까요? 정말 말이 안 되는 것 같습니다.


그러면 다른 장소에서는 일어나지 않는 사무실에서 일어나는 이런 방해들은 무엇일까요? 다른 장소에서는, TV를 볼 수 있거나, 산책을 할 수 있거나, 냉장고가 아래층에 있거나, 여러분만의 소파를 가지고 있거나, 여러분이 하고 싶은 것 같은 방해들이 있을 수 있습니다. 그래서 어떤 관리자들에게 말하면, 그들은 이런 방해들 때문에 그들의 직원들이 집에서 일하는 것을 원하지 않는다고 말할 것입니다. 그들은 또 이따금 다음과 같이 말할 것입니다. "그 사람을 볼 수 없다면, 일을 하고 있는지 어떻게 알겠어요?" 물론 웃기는 이야기지만, 관리자들이 내놓는 변경거리 중 하나입니다. 그리고 저도 이런 관리자들 중 하나입니다. 저는 이해합니다. 어떻게 돌아가는지 알고 있습니다. 우리는 모두 이런 것들을 향상시켜야만 합니다. 하지만 종종 집중을 방해하는 것들을 이유로 들 것입니다. "직원들을 집에서 일하게 할 수 없어요. 그들은 TV를 보거나, 다른 일들을 할거예요." 그런 것들은 집중을 방해하는 것들이 아님이 밝혀졌습니다. 그것들은 자발적인 방해이기 때문입니다. 여러분은 언제 TV에 방해받고 싶은지 결정을 합니다. 여러분은 언제 뭔가를 켜고 싶은지 결정을 합니다. 여러분은 언제 아래층에 내려가고 싶은지, 산책을 하고 싶은지 결정을 합니다. 사무실에서, 사람들이 일하지 못하게 만드는 대부분의 중단과 방해는 비자발적입니다. 자, 몇 가지를 살펴볼까요.


관리자와 직장 상사들은 종종 일을 하는데 정말 방해가 되는 것은 페이스북이나 트위터, 유튜브, 여타 웹사이트라고 생각하도록 할 것입니다. 그리고 사실, 그들은 사무실에서 이런 사이트들을 막기까지 할 것입니다. 이런 특정 사이트에 접근하지 못하는 곳에서 일하고 계신 분들고 있을 것입니다. 여기가 중국입니까? 도대체 무슨 일이 일어나고 있는겁니까? 여러분은 사무실에서 웹사이트에 접근할 수 없습니다. 그것은 문제입니다. 그것은 사람들이 일을 할 수 없는 이유입니다. 그들이 페이스북을 하고, 트위터를 할 것이기 때문에요? 웃기는 짓입니다. 완전 변명입니다. 오늘날의 페이스북, 트위터, 유튜브는 현대판 흡연시간입니다. 10년 전에는, 누구도 15분 동안의 흡연 시간을 가지는 것에 대해서 간섭하지 않았죠. 그런데 누군가가 페이스북 여기 저기, 트위터 여기저기, 유투브 여기저기를 접속하는 것은 왜 관여를 하는 것일까요? 이런 것들은 사무실에서의 진짜 문제들이 아닙니다.


진짜 문제들은 제가 M&M이라 부르는 관리자(Managers)와 회의(Meetings)입니다. 그것들이 오늘날 현대 사무실에서의 진짜 문제들입니다. 그리고 이것이 사무실에서 일이 되지 않는 이유이죠. M&M 때문입니다 흥미로운 것은 사람들이 말하는 일을 하는 모든 장소들에 대해서 들어 보면, 집이나, 차 또는 비행기 등 밤 늦게, 아침 일찍 등등 관리자와 회의는 찾아볼 수 없습니다. 여러분은 많은 다른 방해들을 찾을 수 있지만, 관리자와 회의는 찾지 않습니다. 다른 장소에서는 찾을 수 없지만 사무실에서는 찾을 수 있는 것들입니다. 그리고 관리자는 기본적으로 사람들을 방해하는 업무를 가진 사람입니다. 관리직이 하는 일이 그거죠. 직원들을 방해하는 것 그들은 일은 하지 않고, 다른 직원들이 일을 하고 있는지 확인하는 방해를 해야 합니다. 현재 세상에는 수 많은 관리자들이 있습니다. 그리고 현재 세상에는 수 많은 사람들이 있죠. 그리고 이 관리자들 때문에, 현재 세상에는 수 많은 방해들이 있습니다. 그들은 확인해야 하죠. "이봐요. 어때요? 어떤지 좀 보여줘요.", 이런 것들 말입니다. 그리고 그들은 부적절한 시간에 여러분을 방해합니다. 그들이 임금을 주고 하라고 한 무언가를 해보려고 하는 동안, 그들은 여러분을 방해하려 합니다.


그것은 좋지 못합니다. 하지만 관리자들이 하는 무엇보다 더 안좋은 것은 바로 회의입니다. 그리고 주간에 일하는 동안, 회의는 그냥 해롭고, 끔찍하고, 불쾌한 것입니다. 우리는 모두 이것이 사실임을 알고 있습니다. 직원들이 자발적으로 소집하는 회의를 본적이 없을 것입니다. 그런식으로 돌아가지 않습니다. 관리자가 회의를 소집해서 직원들이 모두 모이게끔 말이죠 그리고 그것은 정말 사람들이 일하는데 지장을 줍니다. "이봐요, 지금 당장 10명이 모여서 회의를 할겁니다. 뭘하고 있던 상관 없어요. 그냥 하던 것을 그만두고, 회의에 참석하도록 해요." 10명 모두가 하던 일을 그만둘 확률이 얼마나 될까요? 그들이 중요한 뭔가를 생각하던 중이었다면요? 그들이 중요한 일을 하던 중이었다면요? 갑자기 여러분은 그들에게 하던 것을 멈추고 다른 것을 하라고 말하는 겁니다. 그래서 회의실로 가서, 함께 모여, 대개는 정말 상관없는 것에 대해서 이야기 합니다. 회의는 일이 아니기 때문입니다. 회의는 여러분이 나중에 해야할 것들에 대해서 이야기 하기 위해 가는 것입니다.


하지만 회의는 또한 회의를 만들죠. 그래서 하나의 회의가 다른 회의로 이어지는 경향이 있고, 다시 또 다른 회의로 이어지는 경향이 있습니다. 종종 너무 많은 사람들이 회의에 참석하고, 조직되기까지 비용이 매우 많이 들어갑니다. 회사는 흔히 1시간 회의는 1시간 회의라고 생각하지만 회의 참석자가 1명인 경우가 아니라면 그것은 사실이 아닙니다. 회의 참석자가 10명이라면, 그 회의는 1시간 짜리가 아니라 10시간 짜리입니다. 한 시간짜리 회의를 위해서 조직의 나머지로부터 10시간의 생산성이 손해나는 것입니다. 아마도 두 세 명이 몇 분 동안 이야기 하는 것으로 조율되어야 했을 것이 말이죠. 하지만 대신, 오랜 시간을 잡아먹는 회의가 있습니다. 회의가 15분 또는 30분 또는 한 시간이 증가하는 소프트웨어가 작동하는 방식으로 일정이 잡히기 때문입니다. 여러분은 아웃룩으로 8시간짜리 회의 일정을 잡지 않습니다. 할 수 없을 것입니다. 여러분이 할 수 있는지 알 수 조차도 없습니다. 15분, 30분, 45분, 1시간은 할 수 있습니다. 일이 정말 빨리 진행되어야 할 때, 우리는 이 시간들을 다 채우는 경항이 있습니다.


그래서 회의와 관리자는 오늘날 사업영역에서, 특히 사무실에서 두 가지의 주요 문제입니다. 이것들은 사무실 밖에서는 존재하지 않습니다. 그래서 저는 상황을 해결할 몇 가지 제안을 가지고 있습니다. 관리자가 할 수 있는 것은, 깨우친 관리자들 말입니다. 사람들에게 일하기 위한 더 좋은 장소로 사무실을 만들기 위해 관리자들은 무엇을 할 수 있을까요? 그래서 최후의 수단이 아니라, 제 1의 수단이 되려면요? 그것은 사람들이 다음과 같이 말하기 시작하는 것입니다. "정말 일하기 원할 때, 저는 사무실로 갑니다." 사무실은 설비가 잘 갖춰져 있고, 모든 것이 직원들이 일하도록 그 자리에 있어야 합니다. 하지만 사람들은 당장은 사무실로 가기를 원하지 않습니다. 그러면 어떻게 그것을 변화시킬까요? 제가 가진 세 가지의 제안사항을 여러분과 나누겠습니다. 3분 정도의 시간이 남았으니, 정확히 맞아 떨어질 것입니다.


우리 모두 캐주얼 복장의 금요일에 대해 들어봤습니다. 여전히 그것을 하는지는 모르겠습니다. 하지만 침묵의 목요일은 어떨까요. 그러니까 한 달에 한 번, 하루의 목요일을 골라서 하루를 절 반으로 나눠서 오후에만 하는 것입니다. 그 정도면 여러분께도 정말 쉽겠죠. 그래서 그저 오후, 하루의 목요일이죠. 그 달의 첫번째 목요일, 그저 오후만 사무실의 누구도 서로에게 말을 하지 않는 것입니다. 그저 침묵이죠. 바로 그것 입니다. 그리고 여러분은 누구도 서로에게 말을 하지 않을 때, 엄청난 양의 일이 이루어진다는 것을 알게 될 것입니다. 사람들이 실제로 일을 할 수 있는 때는 누구도 그 사람들을 귀찮게 하거나 방해하지 않는 때입니다. 그리고 누군가에게 4시간의 방해받지 않는 시간을 주는 것은 사무실에서 누군가에게 줄 수 있는 가장 좋은 선물입니다. 그건 컴퓨터 보다 낫죠. 새 모니터나 새 소프트웨어, 또는 사람들이 일반적으로 사용하는 다른 어떤 것보다 좋습니다 그들에게 사무실에서 4시간의 조용한 시간을 주는 것은 엄청나게 가치있을 것입니다. 그리고 시도해 본다면, 여러분도 동의하시리라 생각합니다. 그리고 아마도, 희마하건데 좀 더 자주 그렇게 할 수 있겠죠. 그래서 아마도 격주라던가, 매 주, 일주일에 한 번 정도, 오후에는 누구도 서로에게 말을 하지 않을 수 있습니다. 그것은 여러분들이 제대로 작동한다고 알아낼 일입니다.


어려분이 시도할 수 있는 또 다른 것은 1대1 대면, 사람들의 어깨를 두드리는 것, 인사를 하는 것, 회의를 가지는 것 같은 능동적인 의사소통과 공동작업으로 부터 바뀌는 것입니다. 이메일, 메신저, 협업 소프트웨어 제품 같은 것들을 사용하여 보다 수동적인 의사소통의 모델로 교체하는 것입니다. 이제, 몇몇 분들은 이메일은 정말 방해가 되고, 메신저가 정말 방해가 되고, 이런 다른 것들이 정말 방해가 된다고 말할 수 있겠지만, 그것들은 여러분의 선택에 달려 있는 자발적 방해입니다. 이메일 프로그램은 중지시킬 수 있지만, 상사를 그렇게 할 수는 없죠. 메신저는 종료할 수 있지만, 여러분의 관리자로 부터 숨을 수는 없습니다. 여러분은 이런 것들을 치워둘 수 있고, 그리고 나서 여러분만의 일정에 따라, 여러분만의 시간에 방해 받을 수 있습니다. 여러분이 가능한 때에, 여러분이 다시 할 준비가 될 때 말입니다. 수면처럼 일도 단계 별로 발생합니다. 그래서 여러분이 일종의 상승을 할 때는 어떤 일을 하고, 그리고 그 일에서 점점 내려와서 그리고 나서 그 때가 아마도 이메일이나 메신저를 확인할 시간일 것입니다. 그리고 당장 해야 하는 매우 급한 일, 지금 당장 답변되어야 할 필요가 있는 일들은 매우 적습니다. 여러분이 관리자라면, 다른 누군가가 치워둘 수 있고 그들의 일정에 맞춰 다시 돌아올 수 있는 메신저, 이메일, 다른 것들을 더 많이 이용하도록 사람들을 독려하기 시작하세요.


제가 마지막으로 드리는 제안은 만약 참석해야 할 회의가 있다면 그리고 권한이 있다면 그냥 그 회의를 취소하세요. 그 다음 회의도 그냥 취소하세요. 오늘이 금요일이죠. 보통 사람들은 월요일에 회의가 있습니다. 그냥 하지 마세요. 연기하란 것이 아니라, 기억에서 지워버리세요. 없애버리세요. 그리고 여러분은 모든 것이 괜찮다는 것을 알게 될 것입니다. 월요일 아침 9시에 여러분이 해야 한다고 생각했던 이 모든 토의와 결정들을 그냥 잊어버리세요. 그리고 모든 것이 괜찮을 것입니다. 사람에게 보다 여유있는 아침이 됩니다. 그들은 실제로 생각할 수 있고, 여러분이 해야만 한다고 생각했던 이 모든 것들이 아마도 실제로는 할 필요가 없다는 것을 알게 될 것입니다.


그것들이 여러분께 생각할 거리를 위해 말씀드리고 싶었던 세 가지 제안입니다 그리고 이 아이디어들이 관리자들, 직장 상사들, 사업주들, 조직자들, 그리고 다른 사람들을 맡고 있는 사람들이 조금만 정리하고 사람들에게 일을 할 수 있도록 시간을 주는 것에 대해 생각할 수 있도록 하는 최소한의 충분한 자극이 되기를 바랍니다. 그리고 결국 모두 성과를 올리리라 생각합니다.



Ps. 

제이슨 프라이드는 37시그널 공동창업자로 Rework 라는 책을 출간했다. 
관련기사 http://goo.gl/I9eC5

Rework 한글번역본은 "똑바로 일하라" 라는 이상한 제목 
http://goo.gl/6KJCO

'Development > 자료' 카테고리의 다른 글

EOS-5D  (0) 2010.01.01
Putty  (0) 2008.05.11
advanced-linux-programming  (0) 2008.03.23
UC-LP82 케이스  (0) 2008.03.23
Windows95 System Programming Secrets - 2  (0) 2008.03.23
Posted by 까 치
,