FFMPEG를 사용하여 최고 품질의 MPEG2 비디오 파일을 만드는 방법은 무엇입니까?


16

WMV (v9 (WMV3), 960x720, 30.000030fps, 평면 4 : 2 : 0 YUV, PowerPoint 2010에서 제작) 파일이 있고 MPEG2로 변환해야합니다. TVset이 USB 플래시 드라이브에서 읽을 수있는 유일한 형식 (또한 MP4 / h.264, AVI / XVID를 시도했지만 MPEG2 만 작동합니다).

나는 간단한 작업으로 관리했습니다

ffmpeg -i "in.wmv" -c:v mpeg2video "out.mpg"

그러나 결과 품질이 두려우 며 (명확하게 보이는 시각적 왜곡이 발생 함) 재생이 매끄럽지 않습니다 (일부 순간에 너무 느림).

나는 또한 시도했다

ffmpeg -i "in.wmv" -c:v mpeg2video -pix_fmt yuv420p -me_method epzs -threads 4 -r 30.000030 -g 45 -bf 2 -trellis 2 -cmp 2 -subcmp 2 -s 960x720 -b 2500k -bt 300k -async 1 -y "out.mpg"

(인터넷에서 어딘가에 이것을 발견하고 약간 수정했습니다. 재활 망, 새로 고침 속도 및 출력 형식 (VOB에서 베어 MPG로)을 변경했지만 품질은 여전히 ​​나쁩니다.

품질을 최대한 높이려면 어떤 매개 변수를 사용해야합니까? 압축률은 전혀 중요하지 않으며 파일 크기를 늘릴 수도 있습니다.

내가 실제로 필요로하는 것 (너무 구체적으로 만들지 않기 위해 질문 제목에 포함시키지 않기로 선택했지만 답변에서 고려되고 있음을 고맙게 생각합니다)은 순수한 트랙을 사운드 트랙으로 추가하는 것입니다. 독창적이지만 TV 세트가 그것에 대해 불평 하고이 불만을 제거하고 싶습니다. Audacity를 사용하여 동일한 길이 (두 번째 정확한) 무음 OGG Vorbis 파일을 생성했지만 비디오와 병합 할 수 없습니다.

ffmpeg -i in.mpg -i silence.ogg -c:v copy -c:a libmp3lame out.mpg

심지어 맨손으로

ffmpeg -i in.mpg -c:v copy -out.mpg

"버퍼 언더 플로우"및 "패킷이 너무 큼"오류가 발생합니다. (in.mpg는 문제의 처음 두 명령을 사용하여 동일한 FFMPEG 바이너리와 동일한 소스 WMV 파일로 생성 된 파일입니다).

Windows 7에서 Zeranoe FFMPEG 빌드를 사용하고 있습니다.


2
누군가 당신에게 전체 출력 로그를 요구할 것입니다.
dstob

어떤 TV가 정확히 설정 되었습니까? 다른 프로필 인 H.264를 읽을 수도 있습니다.
slhck

@slhck TV 세트는 다음 Philips 42PFL3606H/58과 함께 H.264로 인코딩됩니다 ffmpeg -i "in.wmv" -sws_flags lanczos+accurate_rnd -c:v libx264 -crf 20 -preset slow -profile:v baseline -level 3.0 -pix_fmt yuv420p -tune fastdecode -x264-params keyint=240:min-keyint=20 "out.mp4". 프로필이 가장 낮으며 결과 파일을보다 쉽게 ​​재생할 수 있도록 더 많은 조정이 사용됩니다.
Ivan

1
매뉴얼에 따르면 TV는 MPEG-4 Visual 및 H.264를 지원합니다. 베이스 라인 프로파일이 작동하지 않으면 어떻게되는지 잘 모르겠습니다. 그러나 TV는 매우 까다 롭습니다.
slhck

답변:


16

문제는 MPEG-2의 기본 비트 전송률이 다소 낮다는 것입니다 (Hmpt의 다른 비디오 인코더와 마찬가지로 H.264는 예외입니다). 요즘 코덱으로는 MPEG-2가 최선의 선택이 아닙니다.

MPEG-2의 품질 향상

MPEG-2를 사용하려면 몇 가지 옵션이 있습니다.

  • 비트 전송률을 높이십시오. 이제를 사용하고 -b:v 2500k있습니다. HD 비디오 인 경우 2.5MBit / s로 멀지 않습니다. 결과를보기 좋게하려면 최소한 두 배 이상이 필요합니다. 예를 들어을 사용하십시오 -b:v 6000k -target pal-dvd.

    720p의 경우 여전히 높은 비트 전송률을 사용해야한다고 생각합니다. DVD는 MPEG-2를 사용하고 2 시간 분량의 영화에 약 4.7GB로 제공되므로 약 5–8MBit / s로 끝납니다. MPEG-2는 실제로 압축 효율이 높지 않으며 높은 비트 전송률에서 더 잘 작동합니다.

  • 특정 품질 설정을 사용하십시오. 변경 -b:v …-qscale:v 2. 여기의 숫자는 1에서 31 사이이며 범위가 높을수록 품질이 떨어집니다. 비트 레이트를 신경 쓰지 않는다면 2로 시작하여 그것이 효과가 있는지 확인하십시오.

B- 프레임 수, 모션 추정 방법 또는 GOP 크기를 어지럽히면 품질이 약간 조정될 수 있지만 큰 변화는 없습니다.

조용한 오디오

-f lavfi -i aevalsrc=0자동 오디오 스트림을 생성하는 데 사용 합니다. 예를 들면 다음과 같습니다.

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg"

-target pal-dvd특정 버퍼 크기를 강제하기 위해 위 명령 에 추가해야 할 수도 있습니다 .

코덱으로 MP3를 선택했습니다. MPEG 파일에는 PCM 스트림뿐만 아니라 MPEG Layer I 및 II 오디오 이외의 오디오를 포함 할 수 없으므로 오디오 스트림도 변환하지 않으면 자동 Ogg Vorbis 파일을 사용할 수 없습니다 (사용할 때 수행하고있는 작업이 아님 -c:a copy) .

다른 비디오 코덱 사용

비디오 파일을 재생하는 TV가 MPEG-2를 읽지 만 다른 것은 읽지 못하는 것에 놀랐습니다. 최소한 MPEG-4 Part II 비디오 가 지원되어야합니다 (MPEG-4 Part II 인코더 인 "DivX"). 그래서 당신은 시도 할 수 있습니다 :

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4"

TV가 실제로 H.264도 지원하지만 특정 프로필 만 지원할 수 있습니다. baseline예를 들어 프로파일을 사용해보십시오 .

ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libx264 -profile:v baseline -crf 23 -c:a aac -strict experimental "out.mp4"

위의 예에서는 CRF 옵션을 사용하여 대신 품질을 설정했습니다 qscale. 자세한 내용은 H.264 인코딩 안내서 를 참조하십시오.


"B- 프레임 수, 모션 추정 방법 또는 GOP 크기로 측정하면 품질이 약간 조정될 수 있지만 큰 변화는 발생하지 않습니다." -모든 프레임을 B 프레임으로 만들고 MPEG2에서 모션 추정을 사용하지 않을 수 있습니까? 비디오에는 매우 많은 동적 부분이 있습니다.
Ivan

나는 당신이 제안하는 첫 번째 명령 줄을 시도했습니다 ( ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v libxvid -qscale:v 2 -c:a libmp3lame "out.mp4")-약 100 프레임을 인코딩 한 다음 [mpeg @ 02f69ba0] buffer underflow i=0 bufi=235538 size=239761및과 같은 오류로 화면을 넘치게 시작합니다 [mpeg @ 02f69ba0] packet too large, ignoring buffer limits to mux it.
Ivan

@Ivan으로 비트 레이트를 변경합니다 -b:v. 내 대답에 추가했습니다. 인코더 설정과 관련하여 : 모든 프레임을 B 프레임으로 만들 수는 없습니다. 또한 모션 추정이 필요합니다. 방법이 철저할수록 압축 성능이 향상됩니다. 그러나 동영상이 동적 인 동영상이라면 가장 먼저 비트 전송률을 크게 높이는 것이 좋습니다. 인코딩 설정은 실제로 큰 영향을 미치지 않습니다. 오류는 올바른 명령의 오류입니까? [mpeg]출력 파일 인 경우에만 오류가 발생할 수 .mpg그건하지 않을 경우, .mp4.
slhck

@slhck, 잘못된 부분을 복사하여 붙여 넣었습니다 ffmpeg -i "in.wmv" -f lavfi -i aevalsrc=0 -shortest -c:v mpeg2video -qscale:v 2 -c:a libmp3lame "out.mpg". 물론 사용 하고 있습니다.
Ivan

1
-target pal-dvd문제를 해결하고 -bufsize작동하지 않습니다 (내가 시도했습니다 -b:v 7M -bufsize 7M -maxrate 7M).
Ivan

0

파일 크기가 실제로 중요하지 않으면 비트 전송률을 높이는 실험을하십시오.

조용한 오디오의 경우 ffmpeg를 사용하고 싶을 수도 있습니다 .Audacity에 대해 충분히 알지 못합니다. 나는 이것을 전에 사용했다.

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.aac

mpg 컨테이너를 사용하고 있기 때문에 작동하지 않으므로 시도해 볼 수 있습니다. (mp3 컨테이너)

ffmpeg.exe -f lavfi -i aevalsrc=0:0::duration=YOUR_DESIRED_DURATION -ab 10k YourAudioName.mp3

그것은 나를 위해 일하는 것 같았다.


ffmpeg는 비디오에 필요한 모든 것을 사용하므로 지속 시간을 설정할 필요는 없습니다.
slhck

Ivan이 한 것처럼 2 단계 프로세스를 유지했습니다. 내 명령에 지속 시간을 남겨두면 ffmpeg가 얼마나 오래 실행 될지 알 수 없습니다 (원하는 것보다 더 오래).
dstob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.