동영상 변환 작업이 또 골치를 앓게 만드네요

이번엔 대체 무슨 문제인건지, 동영상 변환을 하려고 하면 에러가 걸리네요. ffmpeg로 작업을 하고 있는데, 작업은 멀쩡히 돌아가는 것 같다가도 완료가 되었다고 생각해서 창을 열면

[color=#FF0000:krj4ufbq]Application provided invalid, non monotonically increasing dts to muxer in stream 1:[/color:krj4ufbq]
[color=#FF0000:krj4ufbq]av_interleaved_write_frame(): Invalid argument[/color:krj4ufbq]

이렇게 되어 있더군요. 그리고 작업이 완료된 동영상을 열면 영상이 심하게 깨져 있고, 영상 시간도 몇 배로 늘어나 있습니다. 예를 들어 원본이 1시간짜리 영상인데, 결과물은 6시간에서 9시간짜리로 나오는 식입니다.

그래서 구글에서 검색은 해봤는데 영어로 뭔가 복잡하게 써놓고 터미널 명령도 몇 개 있어서 그걸 입력해 봤는데 전혀 통하질 않더라구요.

참고로 작업 명령어는 아래와 같습니다.
/usr/bin/avconv -y -i "/home/.avi" -f avi -r 30 -vcodec libxvid -vtag XVID -vf scale=320:240 -aspect 4:3 -maxrate 1800k -b 600k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -trellis 1 -flags +aic -cmp 2 -subcmp 2 -g 300 -acodec libmp3lame -ar 44100 -ab 128k -ac 2 "/home/.avi"

winFF에서 따온 걸 참고해서 만든건데 최근까지 이걸로만 써왔고, 14.04로 업그레이드 한 뒤에는 ar이 꼬여서 바꾼 것 말고는 크게 건드린 건 없습니다. 아 참고로 문제가 된 영상은 winFF의 프리셋으로 테스트 해봤는데 역시나 그것들도 같은 오류를 일으켰습니다.

할때마다 자꾸 꼬이기만 하고, 아무래도 그냥 버추얼 박스 내의 윈도우 환경에서 작업을 해야 겠습니다… 변환 속도가 1/4배속이라는 것이 아주 큰 문제지만요…

아, 혹시나 터미널로 영상 변환 작업할 때 윈도우의 프로그램이 하는 것처럼 여러개를 연속으로 변환시키는 거랑, 작업이 끝나는대로 자동으로 컴퓨터를 종료시키는 명령어는 없나요?

버그입니다. 오디오 압축에서 일어나는 데 아직 해결책은 없는 것으로 알고 있습니다.

아래 사이트에서 직접 다운 받아 컴파일 한 경우 정상적으로 변환된다는 소리를 들었으나
해보지 않아서 장담은 못 드리겠네요.

[url:14862r2h]http://www.serviio.org/download[/url:14862r2h]

해당 문제에 대한 내용은 상당히 오래 전부터 보고가 된 것으로 보입니다.

https://trac.ffmpeg.org/ticket/2212 https://bugs.launchpad.net/ubuntu/+sour ... ug/1191516

레포트에 의하면 실제로 프로그램 crash로 인한 문제는 아니고 exit code 01로 빠져나가게 되면서 나는 문제라고 하는데 확실치 않습니다.
또한 ffmpeg 자체의 문제가 아니라 관련 패키지인 libav를 사용하는 avconv의 문제로 보입니다.
주로 발생하는 경우는 2가지로

  1. flv to avi, mp4, etc…
    => 웹에서 flv 비디오를 다운받아 변환하는 경우 (주로 youtube겠네요)

  2. subtitles를 포함하여 인코딩을 하는 경우
    => 즉, 자막을 씌워서 인코딩 하는 경우

'주로 발생하는’이라고 하니 다른 상황에서도 발생 가능성이 있을거 같군요.
일단 해결방법…이라고 하긴 애매한데 '정상 동작한다’라고 하는 보고가 몇 건 있습니다.

[code:341wkibc]
$ ffmpeg -fix_sub_duration -i 1.mkv -acodec copy -vcodec copy -scodec mov_text -t 00:22:52 out.mp4

또는

$ ffmpeg -fix_sub_duration -i 1.mkv -codec copy -map 0 out.mkv
$ ffmpeg -fix_sub_duration -i out.mkv -scodec mov_text -acodec copy -vcodec copy out.mp4

avconv만 사용할 경우
$ avconv -i "$infile" -acodec copy -vcodec copy -f mp4 "$mp4outfile"
[/code:341wkibc]

위와 반대로 커맨드를 아래처럼 할 경우는 동일한 에러가 발생하며 종료되었습니다.

[code:341wkibc]
$ ffmpeg -fix_sub_duration -i 1.mkv -scodec mov_text -an -vn -t 00:22:53 out.mp4
[/code:341wkibc]

현재까지 이렇다 할 패치가 나온 흔적은 없는거 같고, ffmpeg팀에서도 실제 crash가 아니고 옵션 구성의 차이로 exit() 되는가 되지 않는가
정도의 차이로 보이기 때문에 버그로 판단하고 있지 않는 것 같습니다.

우분투에서는 위 링크 제일 아래쪽에 보면 14.04의 libav-tools로 이관된 상태입니다.

일단 위의 예시처럼 옵션을 조합해서 시도해 보세요.
커맨드 라인에서 사용하는데에 어려움이 있으시다면 handbrake라는 툴을 사용해 보시기 바랍니다.

아… 핸드브레이크요…

핸드브레이크는 안 될 것 같네요… 넷북을 쓰는데 해상도가 1024X600인데 핸드브레이크 옵션창이 하도 길어서 아래쪽 옵션을 설정하지 못해 그냥 지워버렸습니다…

아… 뭔 놈의 우분투가 이리도 사람 피곤하게 만드는지… 동영상 변환 작업은 제대로 지원도 안되고, 아이패드 이용하는데 보안 걸려서 피시랑 아이패드랑 연결도 안되고, 그렇다고 애드훅 걸어서 파일 옮기려는데도 네트워크를 일일이 새로 만들어서 그때마다 써야 하고, 작업을 하는데 있어 너무 불편하네요… 지금 동영상 변환을 버추얼박스에 XP깔고 그 안에서 다 처리하고 있는데, 그게 제가 루분투 깔고 돌린 작업 프로그램들 중에서 제일 효율이 좋았습니다.

디거랜드님,

제가 동영상은 잘모르지만…
혹시 12.04 LTS 는 어떨까요?

흘러온 분위기를 보건데…
안정성은 12.04가
나은듯 보여서요
14.04 보다요~

/usr/bin/avconv -y -i "/home/.avi" -f avi -r 30 -vcodec libxvid -vtag XVID -vf scale=320:240 -aspect 4:3 -maxrate 1800k -b 600k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -trellis 1 -flags +aic -cmp 2 -subcmp 2 -g 300 -acodec libmp3lame -ar 44100 -ab 128k -ac 2 "/home/.avi"

여기서 -b 600k => -b:v 600k
마지막 부분에 -ab 128k => -b:a 128k 로 바꾸어서 작업을 해보시죠…

그리고 http://www.ffmpeg.org 에 옵션 설명들이 있습니다…

winff 옵션과 해당 홈페이지를 보시면 참고가 될 겁니다…

ps) 원본이 1시간 짜리라도 bitrate가 얼마짜리냐가 중요합니다… 그걸 -b:v 옵션에서 조정을 하는데요… 원본보다 적으면 화질 떨어지고 용량이 작아

지고 반대면 커지겠죠…

제가 자주 사용하는 옵션으로 고치면요…

-f avi -r 29.97 -vcodec libxvid -vtag XVID -vf scale=1920:1080 -aspect 16:9 -maxrate 8192k -b:v 8192k -qmin 3 -qmax 5 -bufsize 8192 -mbd 2 -bf 2 -trellis 1 -flags +aic -cmp 2 -subcmp 2 -g 300 -acodec libmp3lame -ar 48000 -b:a 320k -ac 2

이정도가 되겠네요…

:)