FFmpeg를 사용하여 H.265 코덱으로 MP4를 생성하는 방법은 무엇입니까?


24

비디오 파일을 H.265로 인코딩하고 싶습니다. ffmpeg의 마지막 버전은 H.265 ( Source )를 지원해야합니다 .

그러나 정확한 명령에 대한 정보를 찾을 수 없습니다.

다음에 어떤 라이브러리를 표시해야하는지 모르겠습니다 -vcodec.

최신 Zeranoe FFmpeg 빌드 (git-c78a416 (2013-10-26))를 사용합니다.

답변:


40

배경

FFmpeg는 libx265를 사용하여 2014-2-12부터 HEVC / H.265 인코딩을 지원합니다. 이제 ffmpeg를 사용하여 HEVC를 인코딩하거나 다른 인코더를 사용한 다음 FFmpeg를 사용하여 .mp4, .mov 또는 .mkv로 수동으로 mux 할 수 있습니다.

사용 가능한 인코더

현재 H.265 / HEVC 인코더는 다음과 같습니다.

개발 시간과 안정성 때문에 MulticoreWare와 DivX 만 제안됩니다.

두 x265

한 가지 혼란은 "x265"라는 두 개의 독립적 인 프로젝트 가 있는데 , 하나는 중국 대학생에 의해 하나는 실제로 죽었고 다른 하나는 MulticoreWare라는 상업 회사에 의해 죽었습니다. 전자가 처음 시작되었지만 현재는 실제로 죽었으며 후자는 활발한 개발을 진행 중이며 VideoLAN (x264 개발자)이 보증합니다.

FFmpeg HEVC 인코딩 지원 타임 라인

  • 2013-10-12 .mov muxing 지원이 추가되었습니다 53f903b.
  • 2014-02-12 libx265 인코딩 지원이에 추가되었습니다 bb6b173.
  • 2014-03-09 HEVC에 대한보다 완벽한 Matroska muxing 지원이에 추가되었습니다 38aee64.
  • 2014-03-09 더 완벽한 .mov 및 새로운 .mp4 muxing 지원이에 추가되었습니다 9563e67.

tl; dr

어쨌든, 이들은 내 권장 사항에 따라 HEVC를 인코딩 할 수있는 현재의 완전한 세트입니다.

  • FFmpeg와 함께 MulticoreWare libx265를 직접 사용합니다. 즉, 최신 Zeranoe 빌드를 사용하면 다음을 수행 할 수 있습니다.

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mov
    # With audio
    ffmpeg -i INPUT -c:v libx265 -c:a copy -x265-params crf=25 OUT.mov
    

    참고 : 2014-03-09 이후의 FFmpeg 빌드를 사용하면 HEVC를 .mp4 파일로 mux 할 수 있습니다 (9563e67 커밋).

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mp4
    

    Matroska (.mkv)에서 mux 할 수도 있습니다.

    ffmpeg -i INPUT -c:v libx265 -an -x265-params crf=25 OUT.mkv
    
  • 독립형 MulticoreWare x265를 사용한 다음 결과 파일을 FFmpeg 또는 MP4Box 로 mux하십시오 . 이것은 libx265를 지원하지 않는 오래된 FFmpeg 빌드에서 작동합니다.

    # Decode input using FFmpeg and encode using x265 using pipe
    ffmpeg -i INPUT -f yuv4mpegpipe -pix_fmt yuv420p - | \
    x265 --y4m -o encoded.265 -
    
    # Mux the resulting encoded .265 file into an .mp4 or .mov
    
    # Using ffmpeg: only works with newer builds that support muxing HEVC
    # Muxing to .mp4 supported since 03-09-2014
    ffmpeg -i encoded.265 -c copy out.mp4
    # With audio
    ffmpeg -i encoded.265 -i INPUT -map 0 -map 1:a -c copy out.mp4
    
    # Using MP4Box
    MP4Box -add raw.265 out.mp4
    # With audio
    MP4Box -add {INPUT}#audio -add raw.265 out.mp4
    

    @Duvrai에게 감사합니다.

  • DivX HEVC Encoder를 사용한 후 mux.

    사용 방법은 독립형 x265를 사용하는 것과 유사합니다 (위 참조).

업데이트 : FFmpeg는 MulticoreWare libx265를 사용하여 HEVC 인코딩을 지원합니다.

업데이트 2 : FFmpeg는 이제 HEVC를 mp4 AND mov 로 다중화하는 기능을 지원합니다 .


1
crf=25예제 명령에서 이것이 무엇을 나타내는 지 모르는 사람들을 위해 다음은 CRF 안내서입니다. slhck.info/articles/crf
Programster

@Programster의 의견을 명확히하기 위해 링크는 x264 가이드로 이동하지만 x265와 x264는 CRF 선택에서 매우 유사합니다.
Timothy Gu

h265를 겨냥한 CRF에 대한 가이드를 찾을 수 없지만 개념은 일정 해 보입니다. 나는 현재 권장하는 값 (18-28)을 실험하고 있지만 h265에 대해 약간 달라야하는지 모르겠습니다.
Programster

@Programster : 예 x265의 범위는 0-51 입니다. 그러나 디폴트 값은 이다 (28) 대신에 (23)
디모데 구

2
전반적으로 큰 대답이지만 중요한 비트가 누락되었습니다. -c:v libx265그대로 위의 예는 x264를 사용하여 출력됩니다. 명확하게하기 위해 ffmpeg -i INPUT -c:a copy -x265-params crf=2 OUTPUT_h265.mp4x264로 인코딩했지만 ffmpeg -i INPUT -c:v libx265 -c:a copy -x265-params crf=2 OUTPUT_h265.mp4x265로 인코딩했습니다.
rainabba

17

ffmpeg는 2014 년 2 월 12 일에 x265 인코딩을 추가하고 3 월 9 일에 mp4 컨테이너를 지원합니다.

ffmpeg -i input -c:v libx265 -c:a copy output.mp4

노트 :

  • 위의 명령은 오디오를 원본 코덱으로 복사합니다. 그래도 문제가 해결되지 않으면 생략하여 AAC로 오디오를 변환 -c:a copy(또는 교체 copy와 함께 aac, libfdk_aac또는 libfaac- 주문 품질 현명한)
  • 는 FFmpeg 사용을 컴파일 할 때 --enable-libx265(그리고 --enable-libfdk-aac또는 --enable-libfaac필요한 경우)

1
FFmpeg는 2014 년 3 월 9 일부터 mp4로 기본적으로 muxing HEVC를 지원합니다.
Timothy Gu

1
어떤 이유로 결과는 녹색과 분홍색 이었지만 -pix_fmt yuv420p앞에 추가했을 때 -c:v결과는 좋았습니다.
Evgeni Sergeev

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.