비디오 파일을 다시 인코딩하지 않고 정확한 종횡비


18

다음 속성을 가진 비디오 스트림이 있습니다.

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x416 [SAR 1:1 DAR 45:26], 1908 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc

VLC에서 실행할 때 비디오를 올바른 종횡비로 표시하려면 "A"를 눌러 종횡비를 "4 : 3"으로 변경해야합니다.

비디오 사실을 살펴보면 a) 실제 비디오가 픽셀 데이터에서 잘못 확장되었거나 b) 잘못 설정된 메타 데이터 값이 있다는 오류가 있습니까?

전자의 경우 비디오를 다시 인코딩하고 너비와 높이를 변경할 수 있다는 것을 알고 있습니다. 그러나 후자 인 경우 비디오 자체를 다시 인코딩하지 않고 메타 데이터를 수정하기 위해 어떤 ffmpeg 명령을 실행해야합니까?

답변:


36

SAR (Sample Aspect Ratio)과 DAR (Display Aspect Ratio) 사이에는 차이가 있습니다. 4 : 3에 표시되도록 비디오를 변경하려면 이미지의 실제 픽셀을 변경하거나 (픽셀 크기 조정 및 SAR 변경) 컨테이너 레벨에서 외부에 알리는 메타 데이터 플래그를 설정해야합니다. 이미지를 원하는 DAR로 늘릴 수 있습니다.

비디오 필터를 적용하지 않으면 픽셀 크기를 조정하고 SAR을 변경할 수 없습니다. 이 방법을 선택하면 비디오 필터를 적용하는 동안 비디오 스트림을 "스트리밍 복사"할 수 없으므로 파일을 트랜스 코딩해야합니다.

이미지를 스케일링하고 SAR (트랜스 코딩 중)을 변경하려면 다음을 시도하십시오.

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>

반면, 메타 데이터 플래그를 변경하고 DAR을 조정하려는 경우 비디오를 스트리밍 복사 할 수 있습니다. 이렇게하려면 다음을 시도하십시오.

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]

우수한! 측면을 변경하면 바로 작동했습니다!
forthrin

2
-c copy동시에 사용 하고 확장 할 수 없습니다 . 그러나 -aspect컨테이너 수준 (스트림 수준은 아님)에서 종횡비를 변경하는 데 사용할 수 있습니다 .
llogan

@LordNeckbeard,를 사용하면 -aspect에서 재생할 수 ffplay있지만 WMP 또는 MPC-HC 에서는 작동하지 않습니다. 추가 SAR / DAR 항목을 Stream #…정보 라인에 추가 FFmpeg/probe/play하지만 일반적인 재생을위한 솔루션이 아닌 것 같습니다. 창으로 비디오를 늘리면 MPC-HC 재생을위한 가장 쉬운 솔루션 인 것 같습니다.
Lumi

재 인코딩없이 MPEG2에서 작동하지 않음
Mikhail V

왜 그것이 효과가 없었는지 모르겠습니다. 그냥 같은 비디오를 출력합니다!
Tina J

4

Delgado의 대답 은 MP4Box 가이 작업을 수행 할 수 있다는 것이 맞지만 -par옵션은 설명대로 작동하지 않습니다. -out매개 변수를 사용하여 (원래 파일을 방해하지 않도록) :

mp4box source.mp4 -out target.mp4 -par stream-number=width:height

를 사용할 때 -par stream-number=width:height픽셀 종횡비, 즉 장치 종횡비를 저장 종횡비로 나눈 결과를 정의합니다. (동일하게 소스 픽셀의 종횡비를 설명하고 있습니다.) 예를 들어, DVD 소스가 720x480이고 올바른 디스플레이 종횡비가 4 : 3이라고 가정합니다. 이 경우 다음이 필요합니다.

mp4box source.mp4 -out target.mp4 -par 1=8:9

(4/3) / (720/480) = 8/9이기 때문입니다.

소스가 실제 SD NTSC 픽셀을 나타내는 경우 (이 경우 중앙 704 × 480 픽셀 만 4 × 3 화면에 매핑되고 양쪽에 8 픽셀이 오버 스캔 됨) 올바른 명령은 다음과 같습니다.

mp4box source.mp4 -out target.mp4 -par 1=10:11

왜냐하면 (4/3) / (704/480) = 10/11이기 때문입니다 – 표준 화질 NTSC 비디오의 기준 픽셀 종횡비.

질문에 주어진 경우 실제로 4 : 3 인 경우 (4/3) / (720/416) = 104/135와 같이 매우 이상한 픽셀 종횡비를 제공합니다. 너비는 720이며 DVD 소스를 나타냅니다. PAL을 제안하는 25fps 비디오이지만 PAR은 1 미만으로 작동하여 NTSC를 제안합니다. 4 : 5 일 수 있지만 (104 : 135에 매우 가깝습니다) 픽셀 종횡비를 생성하는 것을 알지 못합니다. 어쩌면 먼저 시도한 다음 가로로 약간 늘어 나면 3 : 4를 시도하십시오. 확실하다면 정확히 4 : 3이지만 104 : 135를 사용하십시오.


3

FFmpeg은 재 인코딩, MP4Box (부분없이 비디오 스트림의 파라미터를 변경할 수 GPAC ) 및 mkvmerge가있다. 하나의 비디오 스트림과 4 : 3의 실제 / 정확한 종횡비의 경우 다음을 시도 할 수 있습니다.

MP4Box -par 1=3:4 VideoFile.mp4

    "-par" : PixelAspectRatio (adjusts DAR + SAR with respect to the video resolution)
    "1"=   : stream number
    "3:4"  : aspect ratio (lower number 1st!)
    Changes are directly applied to "VideoFile.mp4", no copy

이전과 이후를 확인하려면 : ffmpeg -i VideoFile.mp4


0

변화하는 SAR을 하여도 작품을 재 인코딩없이 ffmpeg.mp4를 사용하여 h264_metadata기안으로 지적 여기 :

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4

이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
MMM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.