%EB%A5%BC%20MP4(H.264)%EB%A1%9C%20%EB%B3%80%ED%99%98.png)
h.264 코덱을 사용하여 AVI 파일을 MP4로 압축하고 싶습니다. 같은 품질을 얻을 수 없었습니다. 어떻게 압축할 수 있나요?
원본 비디오:
원본 비디오 화면:
FFmpeg 콘솔 출력( ffmpeg -i input.avi
):
FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopenc ore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libop enjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
libswscale 0.12. 0 / 0.12. 0
[mpeg4 @ 0x626b50] Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'input.avi':
Metadata:
encoder : VirtualDubMod 1.5.10.2 (build 2542/release)
Duration: 01:32:38.13, start: 0.000000, bitrate: 2094 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 44100 Hz, 5.1, s16, 384 kb/s
At least one output file must be specified
테스트 1
FFmpeg 명령:
ffmpeg -i input.avi -vcodec libx264 -vpre lossless_slow -crf 25 -acodec libfaac -threads 0 -t 60 1.mp4
테스트 1 화면:
FFmpeg 콘솔 출력( ffmpeg -i 1.mp4
)
FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
libswscale 0.12. 0 / 0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Duration: 00:01:00.01, start: 0.000000, bitrate: 618 kb/s
Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 437 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1(und): Audio: aac, 44100 Hz, 5.1, s16, 176 kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
At least one output file must be specified
테스트 2
FFmpeg 명령:
ffmpeg -y -i input.avi -pass 1 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -f mp4 -an -y /dev/null
ffmpeg -y -i input.avi -pass 2 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -acodec libfaac -ab 128k -ac 2 2.mp4
테스트 2 화면:
FFmpeg 콘솔 출력( ffmpeg -i 2.mp4
)
FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
libswscale 0.12. 0 / 0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
encoder : Lavf52.93.0
Duration: 00:01:00.01, start: 0.000000, bitrate: 1097 kb/s
Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 1028 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 63 kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
At least one output file must be specified
답변1
우선, 최신 버전의 FFmpeg를 설치하세요.다운로드 페이지.
사전 설정 사용 vpre
(기본값을 설정하는 방법)ffmpeg인코더 설정이 아닌 설정)은 실제로 필요하지 않습니다. 일반적으로 -preset
인코더에서 정의한 옵션을 사용하려고 합니다 .
출력 품질이 낮은 이유는 각각 두 가지 경우에 대해 다음과 같습니다.
crf 25
을 사용하는 첫 번째 경우에는일정한 비율 인자그러면 x264 인코더의 기본값(23)보다 품질이 저하됩니다. CRF는 품질을 제어합니다. CRF를 20, 18 등으로 낮게 설정해 보십시오. 여기서 낮을수록 품질이 좋아지지만 파일 크기가 커집니다. CRF를 6으로 변경하면 대략적으로 말하면 원래 평균 비트 전송률의 두 배/절이 됩니다.때문에 CRF를 더 낮게 설정해야 합니다.세대 손실. 이미 인코딩된 것을 인코딩하므로 다시 시각적 정보를 버리는 것입니다. 결코 좋은 것은 아니지만, 필요한 경우 입력 비디오에서 너무 많은 정보를 제거하지 않도록 더 높은 품질을 설정해야 합니다.
두 번째 경우에는 2MBit/s의 일정한 비트 전송률을 설정하려고 합니다. 입력 비디오의 비트 전송률은 대략 동일합니다. 이제 x264는 동일한 비트 전송률에 대해 MPEG-4 Visual 인코더보다 훨씬 더 나은 시각적 품질을 제공하지만 세대 손실로 인해 다시 원본보다 더 높은 비트 전송률을 사용하고 싶을 수도 있습니다. 그렇지 않으면 결국 압축하게 됩니다. 정보가 너무 많습니다.
또한 일정한 비트 전송률 인코딩을 사용하면 일부 부분은 좋아 보이지만 비디오의 다른 부분은 더 나빠 보일 수 있습니다. 인코더가 무언가에 소비할 비트 양을 자유롭게 선택하도록 허용하지 않으면 대상 파일 크기를 아는 대신 품질이 희생됩니다.
x264에는 고정 비트 전송률 모드가 있지만 다른 인코딩 방법보다 열등한 것으로 간주됩니다. 실제로 2패스 인코딩은 최적의 품질을 목표로 하는 것이 아니므로 그냥 넘어가세요.
그렇다면 다음을 따라 시도해 보세요.
ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a libfdk_aac -b:a 192k -ac 2 out.mp4
libfdk_aac
사용할 수 없는 경우 대신 다음을 사용하세요.
ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2 out.mp4
주요 품질 관리 손잡이는 CRF 설정입니다. 이를 실험해 보고 더 나은 품질이 필요한 경우 더 낮은 값을 사용하십시오.
veryslow
더 나은 압축을 제공하는 사전 설정을 선택할 수도 있지만 인코딩 시간은 분명히 더 오래 걸립니다.
합리적인 파일 크기로 적절한 품질의 파일을 얻을 수 없다면 운이 없는 것입니다. 다시 인코딩하지 않고 원본 파일을 있는 그대로 유지하는 것이 좋습니다. 이미 압축된 것을 압축할 때 "동일한 품질을 유지하는" 마법의 도구는 없습니다.