System Compleat.

'ffmepg'에 해당되는 글 2건

  1. Convert video format to mp4 with ffmpeg on Mac (3)
  2. Avconv, encoding your videos. (1)

Convert video format to mp4 with ffmpeg on Mac

Techs


( younjin.jeong@gmail.com, 정윤진 ) 



오늘은 간단한 팁. 


맥용 인코딩 어플을 뒤져봐도 뭐 하나 쓸만한게 없는데 다들 도네이션이나 돈은 내란다. 

이전에도 avconv 를 소개 한 적이 있는데, 오늘 맥에서 보니 brew 에는 avconv 가 없어서 ffmepg 를 사용하는 방법을 소개 한다. 


먼저 brew 인데, 이건 구글에서 Home brew 라고 검색해서 먼저 설치 해 주어야 한다. 그거 설명은 패스. 

아, 그리고 Home brew 는 이를테면 Gentoo 리눅스의 emerge 같은 건데, 패키지 소스를 받아서 컴파일 후 맥에 설치하기 때문에 컴파일러가 필요하다. 이 말인 즉슨, Xcode 를 설치해야 하고, 아울러 Xcode 의 CLI 도구도 설치해야 한다는 말. 검색하면 다 나온다. 


어차피 기나긴 옵션에 대한 설명은 필요 없을 듯 하고. 



brew install ffmpeg 
==> Installing ffmpeg dependency: texi2html
==> Downloading http://download.savannah.gnu.org/releases/texi2html/texi2html-1.82.tar.gz
....
..
하면 뭔가 엄청 다운받고 컴파일 한다. 
...
기다리면, 
....
==> Installing ffmpeg
==> Downloading http://ffmpeg.org/releases/ffmpeg-1.1.tar.bz2
######################################################################## 100.0%
==> ./configure --prefix=/usr/local/Cellar/ffmpeg/1.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --cc=cc
==> make install
/usr/local/Cellar/ffmpeg/1.1: 141 files, 25M, built in 3.1 minutes

# 하고 프롬프트가 떨어지면 설치가 완료 된 것.

설치가 완료되면 .avi 와 같은 파일을 mp4 로 바꿔보자.
ffmpeg -i My_Godness.avi -qscale 0 -vcodec mpeg4 -acodec libfaac -threads 16 -f psp My_Godness.mp4

# 다음과 같은 메세지가 주르륵 나오며 인코딩을 시작한다. 영상 파일의 크기에 따라 시간이 걸리므로 주의. 

ffmpeg version 1.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jan  8 2013 18:20:08 with Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 13.100 / 52. 13.100
........
.....
..
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 -> mpeg4)
  Stream #0:1 -> #0:1 (mp3 -> libfaac)
Press [q] to stop, [?] for help
frame=227317 fps=262 q=0.0 Lsize= 2194142kB time=02:06:25.32 bitrate=2369.6kbits/s dup=1 drop=0    
video:2069449kB audio:118243kB subtitle:0 global headers:0kB muxing overhead 0.294866%



ffmpeg 는 무지하게 많은 옵션을 가지고 있지만 내가 가진 비디오를 모바일용으로 인코딩 하기위해서라면 위의 정도로 충분하다. 

간단히 설명하면, 


-i : 원본파일

-qscale 0 : 퀄리티 변경 없이 인코딩 할 것 

-vcodec mpeg4 : 비디오 코덱 

-acodec libfaac : 오디오 코덱 

-threads 16  : 작업을 수행 할 스레드의 갯수 

-f psp : 출력파일 




그럼, 즐거운 모바일 생활을 위해! 


( younjin.jeong@gmail.com, 정윤진 ) 



Avconv, encoding your videos.

Techs

( younjin.jeong@gmail.com, 정윤진 ) 



최근 스토리지 클라우드 관련 테스트를 위해 1~2 기가 바이트 정도의 동영상 파일들을 토런트를 사용하여 받고 있다. 단순히 받기만 하는 것이 아니라, 혹시 나중에 스트리밍을 위해 사용 할 지도 몰라서 RSTP / H.264 포멧, 그리고 애플용 모바일 기기를 위해 mp4 로 함께 인코딩을 하고 있다. 물론 파일의 크기와 종류가 다양해 지니만큼 소기의 목적이었던 풍족한 테스트를 위해서도 바람직한 일이다. 


문제는 이 인코딩 그리고 다운로드에 개인 노트북이나 PC를 사용하는 경우 쓸데없이 많은 리소스를 잡아먹어서 일에 제법 방해가 될 때가 많다. 단순히 일에 방해가 되는 것 뿐만 아니라, 효율이 떨어지는 2년된 맥북 프로가 고생하는 모습을 보니 안스러워서 새벽에 잠깐 검색질을 통해 조금 더 편리 한 방법을 구성 했다. 물론 아시는 분들은 다 아시는.



사진이_없으면_웬지_허전함.jpg

image from: http://www.muylinux.com/2009/05/19/convertir-videos-bajo-linux-con-ffmpeg/



간밤에 이미 횡설수설 포스팅을 길게 했기 때문에 짧게 쓰고싶다. 

핵심 키워드는, 


Ubuntu 

transmission-cli 

ffmpeg 

avconv 


그리고 뭐 굳이 더하자면 swift 이다. 


transmission-cli 는 토런트 클라이언트의 lightweight 버전을 다시 cli 전용으로 만든 것이다. apt-get install 로 쉽게 설치가 가능하다. ffmpeg 와 avconv 는 모두 영상/음성 관련 도구들이다. 많은 확장 기능들이 있지만, 핵심은 영상 또는 음성의 encoding 이다. 


transmission-cli 는 다음과 같이 간편하게 사용이 가능하다. 


transmission-cli -w /root/torrent/ [DOWNLOADNAME.TORRENT] 또는 [DOWNLOAD_MAGNET_ADDRESS] 


-w 뒤의 옵션은 다운로드 받은 파일을 저장하고자 하는 경로를 지정한다. 위의 커맨드로 인해 발생하는 아웃풋이 별로 마음에 들지 않는다면 stdout 의 리다이렉션 ( aka. > ) 을 사용하여 간단히 로그로 남겨도 된다. 


이런식으로 다운로드 받은 파일을 갖가지 용도의 다른 영상으로 인코딩이 가능한데, 여기에는 다음과 같은 스크립트를 뚝딱 만들어서 사용한다. 크론으로 돌리게 되는 경우에는 중복처리를 신경 써 주어야 할 것이다. 또한, 전용 인코딩 팜을 돌리려면 torque 와 같은 queue 시스템이 필요 할 지도 모르겠다. 다음의 스크립트는 /root/drama 디렉토리의 모든 영상을 변환하고, 변환이 완료되면 Swift 의 스토리지 클러스터로 업로드 한다. 


#!/bin/bash

PWD=/root/drama
cd $PWD
for input in `ls -1` 
do
echo "Process output name"
output=`echo $input | cut -d'.' -f1` 
echo "Source file: ${input}"
echo "Encoded file: ${output}.mp4" 
echo "Encoding $input to mp4"
avconv -y -i $input -strict experimental -qscale 2 ${output}.mp4
echo "Upload ${output}.mp4 to swift storage system" 
swift -V 2 -A http://127.0.0.1:35357/v2.0 -U account:userid -K userkey upload mp4 ${output}.mp4
echo "Upload compleated, delete local files"  
rm -f $input ${output}.mp4
done


avconv 도구의 -y 옵션은 사용자가 질의를 받지 않기 위함이며, -strict experimental 은 현재 apt 패키지 관리 도구로 설치되는 어플리케이션의 AAC 인코딩이 experimental 이라 그렇다. 그리고 -qscale 은, 이 옵션 없이 돌려 보면 실망을 금치 못할 것이다. 화질에 대한 옵션인데, 기본적으로 mp4 인코딩은 굉장히 구린 화질로 인코딩 되는데, 이 -qscale 옵션을 사용하게 되면 제법 볼만한 결과물이 나온다. 값은 2-5 를 지정 할 수 있는데, 낮을 수록 좋은 화질이다. 


달성하고자 하는 목적은, 

1. 인코딩에 서버 자원을 활용한다. 

2. 다운로드에 서버 자원을 활용한다. 

3. 클라우드로의 업로드도 서버 자원을 활용한다. 


노트북은 소중하니;;;; 


뭐 아무튼, 만약 여러분이 가상 서버를 사용중이거나 여분의 리눅스 자원이 있다면 전용 다운로드/인코딩 박스로 활용해도 좋지 않나 싶다. 모뎀 시절에는 참 이런 박스 많이 만들어 놀았는데 요새는 이런게 별로 어렵지도 않네... 


물론 여기에 보다 더 많은 기능을 넣을 수도 있겠지만, 현재로는 이정도면 충분하지 않나 싶다. 왜냐면 난 디게 바쁘니깐. +ㅁ+ 

궁금한 내용이 있다면 구글링!




( younjin.jeong@gmail.com, 정윤진 )