이렇게 ffmpeg를 이용하여 동영상 파일을 인코딩합니다.
$ ffmpeg -i input.avi -pass 1 -an output.mp4
$ ffmpeg -i input.avi -pass 2 -ab 128k -y output.mp4
그래서 항상 2번씩 입력하는데, 한번에 2패스로 영상을 인코딩할 수 있는 방법이 없을까요?
옵션을 자주 바꾸는 편인데, 당연히 입력과 출력 파일명이 매번 다릅니다.
답변1
이를 2개의 개별 명령으로 실행하는 대신 다음과 같이 하나의 명령줄에서 실행할 수 있습니다.
$ ffmpeg -i input.avi -pass 1 -an output.mp4 && \
ffmpeg -i input.avi -pass 2 -ab 128k -y output.mp4
차이점은 &&
첫 번째 명령이 성공한 경우에만 두 번째 명령(두 번째 패스)을 실행한다는 표기법입니다. 여전히 2개의 별도 작업이지만 이를 통해 이전에 수행해야 했던 2개의 명령줄 대신 하나의 명령줄을 실행할 수 있습니다.
또한 이는 첫 번째 패스가 완료되면 즉시 두 번째 패스를 실행하는 이점이 있습니다. 즉, 기본적으로 두 번째 패스를 시작하기 전에 첫 번째 패스가 완료될 때까지 기다려야 합니다.
답변2
나는 mencoder를 사용하지만 fifo 장치를 사용하여 ffmpeg/avconv로 비슷한 작업을 수행할 수 있다고 확신합니다.
$ mkfifo passlog
$ mencoder infile.flv -passlogfile passlog ........... pass=1 &
$ mencoder infile.flv -passlogfile passlog ........... pass=2