공간을 확보하기 위해 비디오 라이브러리를 HEVC 형식으로 변환하려고합니다. 라이브러리의 모든 동영상 파일에 대해 다음 명령을 실행했습니다.

 #!/bin/bash for i in *.mp4; do #Output new files by prepending "X265" to the names avconv -i "$i" -c:v libx265 -c:a copy X265_"$i" done  

이제 대부분의 비디오는 잘 변환되고 품질은 이전과 동일합니다. 그러나 매우 높은 품질의 일부 동영상 (예 : 5GB의 영화 인쇄물 한 장)은 품질이 떨어집니다. 동영상이 모두 픽셀 화됩니다.

이 경우 어떻게해야할지 모르겠습니다. 명령 줄에서 crf 매개 변수를 수정해야합니까? 아니면 다른 것이 있습니까?

문제는 대량 변환을하고 있다는 것입니다. 그래서 저는 avconv가 각 동영상에 대해 조정이 필요한 매개 변수를 자동으로 조정하는 방법이 필요합니다.

UPDATE-1

나는 그것을 발견했습니다. crf는 조정해야하는 노브입니다. 기본 CRF는 28입니다. 더 나은 품질을 위해 28보다 작은 것을 사용할 수 있습니다. 예 :

avconv -i input.mp4 -c:v libx265 -x265-params crf=23 -c:a copy output.mp4 

그러나 문제는 일부 동영상 CRF의 경우입니다. 값 28이면 충분하지만 일부 동영상의 경우 더 낮은 CRF가 필요합니다. 이것은 큰 비디오의 작은 부분을 변환하여 수동으로 확인해야하는 것입니다. 그러나 대량 변환에서 각 비디오를 수동으로 확인하는 방법은 무엇입니까? avconv가 입력 영상에 따라 CRF를 지능적으로 조정할 수있는 방법이 있나요?

UPDATE-2

x265의 --lossless 옵션 : http://x265.readthedocs.org/en/default/lossless.html .

하지만 올바르게 사용하는 방법을 모르겠습니다. 다음과 같은 방법으로 사용해 보았지만 반대의 결과가 나왔습니다 (동영상이 더욱 픽셀 화되었습니다).

avconv -i input.mp4 -c:v libx265 -x265-params lossless -c:a copy output.mp4 

주석

  • --lossless는 이전에 손실 된 코덱을 디코딩 한 후 실제로 파일을 확대 할 수 있습니다. 무손실로 디코딩 한 내용을 인코딩합니다. 품질은 입력과 정확히 동일하게 유지됩니다.
  • 소스가 손실 (가능성이 높음)로 인코딩 된 경우 달성하려는 것이 불가능합니다. 무손실이 아님은 품질을 더 떨어 뜨리고 (즉시 눈에 띄지 않더라도) 무손실에서 무손실로 변환하면 파일 크기가 더 커집니다. .

답변

내 경험에 비추어 볼 때 품질 손실이 전혀 없도록하려면 –lossless는 무엇을 찾고 있는지.

avconv에 대해서는 확실하지 않지만 입력 한 명령은 FFmpeg. FFmpeg에서 다음과 같은 매개 변수를 전달할 수 있습니다.

ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv 

대부분 x265 스위치 (값이없는 옵션)는 다음과 같이 지정할 수 있습니다 (CLI 전용 스위치 제외, x265 바이너리에서만 직접 사용됨).

이를 통해 x265 인코딩에 대한 경험을 공유하고 싶습니다. 대부분의 동영상 (WMV, MPEG 또는 AVC /H.264) crf=23를 사용합니다. x265가 나머지 매개 변수를 결정하며 일반적으로 충분한 작업을 수행합니다.

하지만 비디오 전체를 트랜스 코딩하기 전에 종종 문제의 비디오의 작은 부분을 변환하여 설정을 테스트합니다. 여기에 스트림 0이 비디오 인 mkv 파일이 스트림 1이라고 가정합니다. DTS 오디오이고 스트림 2는 자막입니다.

ffmpeg -hide_banner \ -ss 0 \ -i "INPUT.mkv" \ -attach "COVER.jpg" \ -map_metadata 0 \ -map_chapters 0 \ -metadata title="TITLE" \ -map 0:0 -metadata:s:v:0 language=eng \ -map 0:1 -metadata:s:a:0 language=eng -metadata:s:a:0 title="Surround 5.1 (DTS)" \ -map 0:2 -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \ -metadata:s:t:0 filename="Cover.jpg" -metadata:s:t:0 mimetype="image/jpeg" \ -c:v libx265 -preset ultrafast -x265-params \ crf=22:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 \ -c:a copy \ -c:s copy \ -t 120 \ "OUTPUT.HEVC.DTS.Sample.mkv" 

백 슬래시 신호 줄이 긴 명령으로 끊어집니다. 추적하는 데 도움이됩니다. 복잡한 CLI 입력의 다양한 비트. 한 줄씩 설명하기 전에 비디오의 작은 부분 만 변환하는 부분은 두 번째 줄과 두 번째 마지막 줄입니다. -ss 0는 0 초 전에 검색한다는 의미입니다. 입력 디코딩을 시작하고 -t 120는 120 초 후에 출력에 쓰기를 중지 함을 의미합니다. hh : mm : ss 또는 hh : mm : ss.sss 시간 형식을 사용할 수도 있습니다.

이제 한 줄씩 :

  1. -hide_bannerFFmpeg가 시작시 빌드 정보를 표시하지 않도록합니다. 콘솔에서 위로 스크롤 할 때보고 싶지 않습니다.
  2. -ss 0는 입력 디코딩을 시작하기 전에 0 초를 찾습니다.이 매개 변수가 입력 파일 와 출력 파일 에 주어지며, 출력 옵션 이되어 ffmpeg를 사용하여 x 초까지 입력을 디코딩하고 무시한 다음 출력에 쓰기를 시작합니다. 입력 옵션으로는 정확도가 떨어지지 만 (대부분의 컨테이너 형식에서 검색이 정확하지 않기 때문에) 시간이 거의 걸리지 않습니다.출력 옵션으로는 매우 정확하지만 지정된 시간 전에 모든 스트림을 디코딩하는 데 상당한 시간이 걸리며 테스트 목적으로 시간을 낭비하고 싶지 않습니다.
  3. -i "INPUT.mkv" : 입력 파일 지정;
  4. -attach "COVER.jpg" : 표지 아트 (썸네일 그림, 포스터 등)를 출력에 첨부합니다. 커버 아트는 일반적으로 파일 탐색기에 표시됩니다.
  5. -map_metadata 0 : 입력 0의 모든 메타 데이터를 복사합니다.이 예에서는 입력일뿐입니다.
  6. -map_chapters 0 : 입력 0에서 장 정보 (있는 경우)를 복사합니다.
  7. -metadata title="TITLE" : 동영상 제목을 설정합니다.
  8. -map 0:0 ... : 입력 0의 스트림 0을 매핑합니다. 즉, 입력의 첫 번째 스트림이 출력에 기록되도록합니다. 이 스트림은 동영상 스트림이므로 출력 의 첫 번째 video 스트림이므로 스트림 지정자 :s:v:0입니다. 언어 설정 태그를 영어로 지정합니다.
  9. -map 0:1 ... : 8 행과 유사하게 두 번째 스트림 (DTS 오디오)을 매핑하고 언어와 제목을 설정합니다 (선택시 쉽게 식별 할 수 있도록 from players);
  10. -map 0:2 ... :이 스트림이 자막이라는 점을 제외하고 9 행과 유사합니다.
  11. -metadata:s:t:0 ... : 표지 아트에 대한 메타 데이터를 설정합니다. mkv 컨테이너 형식에 필요합니다.
  12. -c:v libx265 ... : 비디오 코덱 옵션. 너무 길어서 두 줄로 나눴습니다. 이 설정은 그래디언트의 밴딩이 최소화 된 고품질 블러 레이 비디오 (1080p)에 적합합니다 (x265가 짜증나게 함). DVD 및 TV 쇼 및 전화 비디오에는 과잉 일 가능성이 높습니다. 이 설정은 대부분 이 Doom9 게시물 에서 도용되었습니다.
  13. crf=22:... : 동영상 코덱의 연속 매개 변수. 위에 언급 된 포럼 게시물을 참조하십시오.
  14. -c:a copy : 오디오 복사
  15. -c:s copy : 자막 복사;
  16. -t 120 : 120 초 후에 출력에 쓰기를 중지합니다. 그러면 트랜스 코딩 품질을 미리 볼 수있는 2 분 클립이 제공됩니다.
  17. "OUTPUT.HEVC.DTS.Sample.mkv" : 출력 파일 이름. 동영상 코덱과 기본 오디오 코덱으로 파일 이름에 태그를 지정합니다.

휴. 이것이 나의 첫 번째 대답이므로 내가 놓친 것이 있으면 의견을 남겨주세요. 저는 비디오 제작 전문가가 아닙니다. 디스크를 플레이어에 넣어서 영화를보기에는 너무 게으른 사람 일뿐입니다.

PS.이 질문은 다른 곳에있을 수도 있습니다. Unix & Linux와 밀접한 관련이 없습니다.

댓글

  • 정확히 제가 찾던 것 ! 옵션의 좋은 범위. 자막 콘텐츠가없는 경우 ffmpeg가 c:s copy에서 멈출 것인지 알고 있습니까?
  • @ElderGeek 아니요, ffmpeg는 해당 옵션이 효과가있는 경우에만 말을합니다.
  • @TheBitByte 예, 아니오, 제 생각에. ' 무손실 h265 파일을 원하지 않습니다. ' 어떤 종류의 압축도 사용하지 않는 원시 비트 스트림입니다. ' 거대합니다. h265 또는 특히 x265 구현에 대해 이해 한 바에 따르면 무손실 압축 방법이 아닙니다. 압축 정도에 관계없이 정보가 손실되지만 시청 품질이 반드시 손실되는 것은 아닙니다. 하지만 저는 ' h265 주제에 대한 전문가가 아니기 때문에 ' 무언가를 놓쳤을 가능성이 있습니다.
  • @ TheBitByte 저는 ' h265에 무손실 압축 수준이 있다고 생각하지 않습니다. 무 압축 옵션의 경우 '는 --lossless입니다. h264에서 h265 로의 무손실 변환을 헛되이 검색했는데 ' 배운 사실에 따르면 ' 수학적으로 불가능합니다.
  • --lossless 스위치가 포함 된 명령을이 답변에서 수정해야합니다.이 질문에 대한 답변으로 입력하면 마치 당신처럼 들리기 때문입니다. ' '의 무손실 압축으로 오해의 소지가 있습니다.

답변

최근에 전체 동영상 카탈로그를 HEVC로 트랜스 코딩하는 문제를 겪었습니다. .

h265ize -v -m medium -q 20 -x –no-sao- -aq-mode 3 –delete –stats

-v -자세한 출력
-m medium -중간 인코딩 속도 (더 작은 더 높은 품질, 더 느린 것은 시간 / 품질 dif의 가치가 없음)
-q 20 -사용 된 CRF, 20은 x264에서 18 정도와 비슷하지만 헤이.이것은 1080p 콘텐츠 (내 TV의 90 %) 용입니다. 저는 주로 4K 영화에 22 개를 사용합니다.
-x -x265 중앙 정의 명령 사용
-no-sao 는 샘플 적응 오프셋을 끕니다 (인코딩 속도 향상).
-aq-mode 3 -자동 분산과 함께 적응 양자화 사용, 특히 어두운 영역에서 8 비트 인코딩 지원, 중지 발생할 수있는 대부분의 밴딩 (인코딩 시간이 소요됨)
-delete -인코딩 파일을 인코딩 된 파일 (이 파일을 사용하기 전에 테스트)
-stats -루트의 csv 파일에 통계 기록 내 장비에서 인코딩 속도는 약 30fps (대부분의 1080p 항목에 대해)입니다. Dual Xeon E5 2687W v2,하지만 FFMPEG 프로세스가 프로세서 중 하나의 첫 번째면을 사용하지 않도록 강제합니다 (이는 내 Plex 서버이므로 재생 등에서 필요한 경우 트랜스 코딩에 대한 오버 헤드가 있는지 확인해야합니다).

예, 대부분을 변환하는 데 시간이 걸리고 이제는 하루에 두 번 실행되는 작업을 예약하여 그날부터 x265로 인코딩합니다.

공간 절약 엄청났습니다. 내 초기 SAN은 20Tb 사용 이었지만 지금은 12 개 정도 였지만 6 개월 더 많은 콘텐츠가 추가되었습니다.

저는 내 모든 영화도 트랜스 코딩하기 시작했습니다. 품질 수준을 식별하고 (Radarr는 다행히 라벨링) 세 가지 트랜스 코딩 설정 중 하나를 사용해야하므로 진행중인 프로세스입니다. 720p 트랜스 코드의 경우

-m slower -q 18 -x --no-sao --aq-mode 3
1080p 용 -m medium -q 20 -x --no-sao --aq-mode 3
-m medium -q 22 -x --no-sao 2160p 용

어떤 사람들을 돕고 싶습니다. 모든 것을 x265로 인코딩하기 전에 재생에 대해 생각해보십시오. 클라이언트가 x265 네이티브를 지원하지 않는 경우 트랜스 케이드는 CPU 및 품질 측면에서 비용이 많이들 수 있습니다.

댓글

  • x265 2.4 이상 (더 선명한 인코딩을 제공하는 새로운 람다 테이블 포함)에서 SAO는 일반적으로 비트 레이트 당 품질에 좋은 점입니다. 여전히 약간 번짐은 있지만 그만한 가치가있을만큼 다른 아티팩트를 줄입니다.
  • -q 20는 CRF 20이 아닙니다. ' s 일정 QP 속도 제어 . 기본 및 권장 모드 인 CRF는 복잡도가 높은 장면에서 QP를 약간 높여서 ' 너무 어려운 장면에 너무 많은 비트를 소비하지 않습니다. 인코딩. (균일 한 QP에 더 가깝게하려면 qcomp를 기본값 0.6에서 0.7 또는 0.8로 올립니다. 1.0에 가까울수록 CQP에 더 가깝습니다.)
  • 방법 소스가 무엇인지 모르는 경우 ' HDR / SDR 인코딩을 처리합니까?

답변

ffmpeg에서 x265 인코더에 대해 무손실 모드를 활성화하는 올바른 구문은 -x265-params lossless=1입니다 (=1를 추가해야합니다. div>).

그러나 무손실 코딩의 경우 더 나은 코덱 선택이 있습니다. 테스트를 통해 FFV1 이 적어도 일부 종류의 비디오에서 훨씬 더 잘 압축된다는 것을 발견했습니다 (파일 크기 = x265의 ~ 80 %) (둘 다에 대해 최상의 설정을 선택한 경우 코덱). 또한 더 빠르게 작동하며 (AFAIK)는 특허에 의해 방해받지 않습니다. 즉, 비디오 보관에있어 모든면에서 무손실 H.265보다 우수합니다. 그러나 타협은 현재 재생 소프트웨어 및 하드웨어와의 호환성입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다