비디오 파일을 DVD로 굽는 표준 Unixy 명령줄 방법은 다음과 같습니다(가설).
# 1. First use ffmpeg to convert to an mpg file.
ffmpeg -i input.m4v -target ntsc-dvd output.mpg
# 2. now do the authoring
dvdauthor --title -o dvd -f output.mpg
dvdauthor -o dvd -T
참고: --title
DVD 제목을 설정하고 -T
디렉터리를 설정하세요. 위의 두 명령에서 -o 스위치는 실제 DVD가 아닌 디렉터리를 나타냅니다.
# 3. roll the .mpg file into an ISO file
genisoimage -dvd-video -o dvdimage.iso dvd
마지막으로 생성된 iso 파일을 빈 DVD에 굽습니다. 나는 매우 안정적인 Brasero를 사용합니다.
그러나 이 방법은 비표준 종횡비에서는 작동하지 않습니다. DVD 형식은 허용되는 화면 비율을 지정하는 데 매우 엄격합니다. dvdauthor가 다음과 같이 말하면 이 문제가 있는지 알 수 있습니다.
WARN: unknown mpeg2 aspect ratio 1
비표준 종횡비를 처리하기 위해 이 방법을 수정하는 좋은 방법은 무엇입니까?
업데이트: 매우 철저하고 명확한 답변을 주신 Anthony에게 감사드립니다. 이 까다로운 질문에 대한 답을 찾으려는 모든 사람에게 이 내용이 도움이 되기를 바랍니다. 나는 이것에 대한 다른 명확한 설명을 온라인에서 알지 못합니다.
답변1
기본적인 방법은 비디오에 검은색 테두리를 추가하여 DVD에서 허용하는 화면 비율 중 하나에 맞추는 것입니다.
TLDR: 건너뛰기요약하자면.
일부 정의
하지만 먼저 몇 가지 다른 사항을 정의해야 합니다.
- 하나종횡비단순히 물체의 너비를 높이로 나눈 값으로 일반적으로 분수로 표시됩니다. 종종 전통적인 슬래시는 콜론으로 대체됩니다. 4 ⁄ 3 대신 4:3이라고 씁니다 . 때때로 이는 10진수 표기법(1.333…)으로 표현됩니다. 모두 동일하므로 8:6, 12:9, 16:12 등으로 부를 수도 있습니다. 또는 1.333:1(충분히 3을 쓸 수 있는 한 동일)도 가능합니다.
- ㅏ전시하다종횡비(DAR)은 실제 모니터(예: TV)의 화면비입니다. 일반적인 모니터는 명목상 4:3 또는 16:9입니다.
- ㅏ저장종횡비(SAR)은 저장된 이미지 또는 비디오의 너비와 높이의 비율(픽셀 단위)입니다. 예를 들어, NTSC DVD 비디오의 최대 해상도는 720 x 480("Full D1")이고 SAR은 1.5:1입니다.
- ㅏ픽셀종횡비저장된 이미지의 단일 픽셀의 종횡비입니다. 영상에서 픽셀은아니요항상 정사각형입니다. 정사각형이 아닌 경우 일반적으로 키보다 좁습니다.
위의 세 가지 사이에는 SAR × PAR = DAR이라는 간단한 수학적 관계가 있습니다. 예를 들어 720:480 * 8:9 = 4:3입니다. 이것은 DVD에서 전체 해상도로 재생되는 4:3 디스플레이 비디오입니다.
또 다른 종류의 복잡성
아날로그 TV에는 픽셀이 없습니다. 대신 지속적으로 변화하는 신호를 갖습니다. 신호의 일부는 디스플레이의 각 라인에 투영되어야 하며, 예를 들어 다음 라인으로 이동할 수 있도록 비활성 시간을 가져야 합니다. 그러나 TV마다 표시되는 행 수가 약간씩 다르며 이는 TV 수명이나 TV 온도가 올라가는 동안에도 달라질 수 있습니다.
DVD에는 가장 왼쪽과 가장 오른쪽의 8픽셀을 사용하지 말라고 나와 있습니다. 따라서 720개 중 704개를 사용해야 합니다. 각 변의 8픽셀은 검정색으로 채워져야 합니다. 지정된 PAR은 이 10:11입니다.
물론, 디지털 기기에 익숙한 사람들은 이것이 어리석다고 생각할 것입니다(예의바른 회사에 적절한 표현으로). 많은 상업용 DVD 릴리스는 실제로 720픽셀을 사용하며 일부는 10:11 PAR을 기대하고 일부는 8:9를 예상합니다. [또는 유사한 16:9 DAR]. 대부분의 하드웨어 DVD 플레이어는 10:11을 사용하지만 이는 TV 설정에 따라 다릅니다.
일반화하다
모든 픽셀을 표시하려는 비디오로 시작하는 경우 8px 검정색 막대를 사용하여 비디오 크기를 704x480(SAR 22:15)으로 조정할 수 있습니다. 잘린 가장자리가 괜찮다면 전체 720x480을 사용할 수 있습니다. 어느 쪽이든 10:11(DAR의 경우 4:3) 또는 40:33(DAR의 경우 16:9)의 PAR을 얻기 위해 필요에 따라 비디오 크기를 조정하고 전체 크기보다 작은 경우 검은색 막대를 추가해야 합니다. 720x480 프레임.
실제로 하고 있는
다행히도 ffmpeg
가능합니다. 비공식 ffmpeg 지원 포럼에서는ks_kalvan은 ffmpeg 비디오 필터 체인을 제공합니다.16:9 DAR 배치의 경우:
-filter:v "scale='w=min(720,trunc((480*33/40*dar)/2+0.5)*2):h=min(480,trunc((720*40/33/dar)/2+0.5)*2)',pad='w=720:h=480:x=(ow-iw)/2:y=(oh-ih)/2',setsar='r=40/33'"
어떻게 작동하나요‽
scale
, pad
및 의 세 가지 필터가 있습니다 setsar
. 마지막 항목이 가장 쉽기 때문에 마지막 항목부터 순서대로 설명하겠습니다.
마지막 필터는 문서(`man ffmpeg-filter)를 확인하고 이것을 찾을 때까지 혼란스럽습니다.욕설 삭제됨라인: ""setsar" 필터는 필터 출력 비디오의 샘플(일명 픽셀) 종횡비를 설정합니다. 따라서 이는 실제로 PAR을 40:33으로 설정하는 것이며, 이는 위에서 우리가 값을 사용하려고 말한 것입니다.
필터는 pad
검은색 테두리를 추가합니다. 문서는 우리에게 말한다오출력 너비입니다(예: 부분의 720 w=720
).오높이를 출력합니다(예: 부품에서 480도 h=480
).이보그리고잘각각 입력 너비와 높이입니다.오-이보너비에 추가하는 픽셀 수도 마찬가지입니다(마찬가지로오-잘높이의 경우) 2로 나누면 이미지의 각 측면에 대한 값이 절반이 됩니다. 즉, 이미지를 중앙에 배치합니다.
비디오 크기를 조정하려면 필터를 사용하세요 scale
. 이 w=
옵션은 새/출력 너비를 지정하고 h=
옵션은 높이를 지정합니다. 다시 말하지만 이는 표현식이지만 더 복잡합니다. 너비와 높이에 대한 공식은 동일하며 높이와 너비만 바뀌었습니다. width( ) 공식을 확인해 봅시다 w=
:
함수와 연산자는 에 설명되어 있습니다
man ffmpeg-util
. 양수의 경우trunc(x+0.5)
ffmpeg에는 없는 가장 가까운 정수로 반올림하는 트릭이 있습니다.trunc(x+0.5)
이 트릭을 바탕으로trunc(x/2+0.5)*2
x/2는 x의 절반을 제공하고 잘림은 가장 가까운 정수로 반올림됩니다. 가장 가까운 것을 얻으려면 두 배로 늘리십시오.심지어숫자.실제 명령에서 720을 사용하는 경우 "W"를 사용하겠습니다. 이는 최종 출력 너비(픽셀)입니다. 이번에도 480(최종 출력 높이)을 "H"로 바꿉니다. 40/33 대신 "PAR"이 대상 픽셀 종횡비이기 때문입니다. PAR⁻1은 PAR의 역수인 33/40입니다.
dar
ffmpeg 변수입니다. 입력 영상의 DAR입니다.이것을 이해하는 열쇠는 중간에 있는 계산입니다. 여기서 우리의 계산은 "H" × dar ¼ "PAR"입니다. dar는 원본 비디오에서 보여주는 것임을 기억하세요. 따라서 대상 너비(픽셀 단위)에 dar를 곱하면 대상 높이 "H"와 정사각형 픽셀을 갖도록 비디오 크기를 조정하는 경우 너비가 제공됩니다. PAR을 나누어 우리가 사용하는 정사각형이 아닌 픽셀의 실제 너비로 변환합니다.
min(«W», # take the minimum [lesser of] target width and...
trunc( # the truncation of (round to integer towards 0)
(«H»*«PAR⁻¹»*dar) # calculate the wanted output width, see note above
/ 2 + 0.5) * 2 # and get the nearest even number to that
))
예: 화면 비율이 16:9인 1280 x 720 픽셀 비디오를 촬영한다고 가정해 보겠습니다. 중간부터 시작하세요:
- «H»*«PAR⁻1»*dar = 480*33/40*16/9 = 704.
- 704/2 = 352.
- 잘림(352 + 0.5) = 352
- 352 * 2 = 704
- 분(720, 704) = 704
이는 16:9 디스플레이의 16:9 비디오에서 예상되는 것처럼 사용 가능한 전체 너비입니다(즉, 사용할 수 없는 8px 영역은 포함하지 않음).
높이에 대해 이 작업을 수행하면 min()이 480으로 유지되므로 490을 얻습니다. 그러나 실제로 이는 480인 720 대신 704(사용 가능한 너비)를 사용하기를 원한다는 것을 의미합니다. 따라서 작은 버그가 있어 작은(아마도 감지할 수 없는) 왜곡이 발생하는 것 같습니다. 나는 이것이 해결되었다고 믿습니다.
요약하자면
ffmpeg -i YOUR-FILE-HERE \
-filter:v "scale='w=min(720,trunc((480*33/40*dar)/2+0.5)*2):h=min(480,trunc((704*40/33/dar)/2+0.5)*2)',pad='w=720:h=480:x=(ow-iw)/2:y=(oh-ih)/2',setsar='r=40/33'" \
-target ntsc-dvd YOUR-OUTPUT-HERE.mpg
노트:이전 ffmpeg는 테스트하지 않았 거나 다음에서 새로운 정적 버전을 다운로드할 -filter:v
수 있습니다.-vf
ffmpeg.org.