무손실 범용 비디오 형식


14

1280x720 25fps 비디오에 가장 적합한 무손실 비디오 형식 을 찾으려고합니다 . 비디오는 4 분입니다. 소리는 320kbps mp3가 될 것입니다. 이상적인 조건 :

  • 무손실 (지각 적으로 무손실 일 수 있음)
  • 컨테이너 + 코덱은 대부분의 플랫폼에서 재생할 수 있습니다
  • 컨테이너 + 코덱은 최신 DVD 플레이어에서 재생할 수 있습니다 (DVD 이외의 형식 지원)
  • 크기가 700MB 미만

가능합니까? 만족스러운 결과없이 3 일 동안 이미 어려움을 겪어 왔으며 12GB 파일도 얻었습니다 (분당 3GB).



4
죄송합니다. 실제로 4 분 동안 (시각적으로) 무손실 720p 비디오를 700MB 미만으로 압축 할 수는 없습니다 ( "비트"를 의미하는 "mb"가 아니라 여기에서 메가 바이트 인 것으로 가정)). 왜 그런 제약이 있습니까? 비디오를 h.264로 인코딩 할 수 없습니까?
slhck

예, MB, 혼란에 대해 죄송합니다. cca 5 비디오 x 4 분을 4GB (중간 제한)에 맞아야합니다.
mrkva

2
12GiB 파일을 얻었으므로 24Bit 색상 심도를 사용한다고 가정합니다. 압축되지 않은 비디오 데이터 스트림은 분당 약 4GiB입니다. 엄청난 양의 데이터입니다. 원하는 것은 분당 170MiB입니다. 선택한 코덱에 관계없이 많은 움직임없이 정적 장면에서만이 작업을 수행 할 수 있습니다. 손실을 없애기 위해 제약 조건을 완화하거나 프레임 속도를 줄이거 나 더 큰 파일 크기를 허용해야 할까봐 걱정됩니다.
Marco

"컨테이너 + 코덱은 최신 DVD 플레이어에서 재생할 수 있습니다 (DVD 이외의 다른 형식 지원)"?
llogan

답변:


24

내가 아는 가장 실제적이고 수학적으로 무손실 형식은 huffyuv이지만, 이는 엄청나게 큰 파일을 생성하며 많은 호환성이 없습니다. 기록을 위해 ffmpeg는 다음과 같이 할 수 있습니다.

ffmpeg -i input -c:v huffyuv -c:a libmp3lame -b:a 320k output.avi

오픈 소스 h.264 인코더 인 X264에는 무손실 모드가 있습니다. 이것은 MP4 컨테이너에 들어갈 수 있으며 지난 몇 년 동안 만들어진 대부분의 하드웨어와 호환되어야합니다. 첫 번째 명령은 빠른 인코딩 속도를 제공하지만 큰 파일을 제공합니다. 두 번째 명령은 시간이 오래 걸리지 만 파일은 빠른 인코딩 된 파일 크기의 약 절반이어야합니다 (여전히 꽤 클 것입니다).

ffmpeg -i input -c:v libx264 -crf 0 -preset ultrafast -c:a libmp3lame -b:a 320k output.mp4

ffmpeg -i input -c:v libx264 -crf 0 -preset veryslow -c:a libmp3lame -b:a 320k output.mp4

파일 크기가 작지 않으면 18의 CRF는 일반적으로 '시각적으로 무손실'로 간주됩니다.

ffmpeg -i input -c:v libx264 -crf 18 -preset veryfast -c:a libmp3lame -b:a 320k output.mp4

나는 일반적으로 x264로 인코딩하기 위해 매우 빠른 사전 설정을 권장합니다. 제 경험상 최상의 속도 / 크기 균형을 제공합니다 (초고속과 초고속, 그보다 느린 속도 및 더 점진적인 파일 크기의 큰 차이가 있습니다). 일반적인 조언은 처리 할 수있는 가장 느린 사전 설정을 사용하는 것입니다. 사전 설정은 초고속, 초고속, 매우 빠름, 빠름, 빠름, 중간, 느림, 느림, 매우 느림입니다.

x264 인코딩에 대한 자세한 내용은 여기 를 참조 하십시오 .


2
veryfast손실 x264에 대한 좋은 기본값으로 제안하지 마십시오 . medium중간 정도는 좋지만 일반적으로 veryslow최종 인코딩에 사용합니다. 또한 huffyuv매우 빠르지 않으므로 호환성 이외의 다른 제품에는 권장하지 않습니다.
Peter Cordes

ffmpeg에는 [FFv1이 떠 오릅니다] 시도해 볼만한 다른 무손실 코덱도 있습니다. GL!
rogerdpack

CRF를 0으로 사용하더라도 두 가지 색상 채널 (YUV에서 UV)을 양방향으로 절반 씩 다운 샘플링하지 않으므로 실제로 무손실이 아닙니다. 또한 반올림 오류가 발생하면 x264 압축 라운드 후 데이터가 비트 단위로 보장되지 않습니다.
Adisak

1
ffmpeg 3.4.1을 사용한 실험에서 libx264는 yuv444 픽셀 형식을 사용했습니다. 여기서 "444"는 "U, V 부분을 다운 샘플링하지 않음"을 의미합니다. OP는 명시 적으로 반올림 오류를 염두에 두지 않습니다. 따라서 @Adisak, 귀하의 우려는 합리적이지만이 답변에는 적용되지 않습니다.
Jim DeLaHunt

YUV 모드의 ffmpeg 및 libx264는 입력을 기반으로 YUV 픽셀 형식을 협상합니다. 입력이 YUV 4 : 2 : 0이면 출력 픽셀 형식도 마찬가지입니다. 입력이 YUV 4 : 4 : 4 또는 RGB 인 경우 출력은 YUV 4 : 4 : 4입니다.
Gyan

2

요즘 나는 webm을 좋아한다 .

ffmpeg -i input.avi -c:v libvpx-vp9 -lossless 1 output.webm

멀티 코어 프로세서를 사용하여 더 빠르게 변환하려면 실제 코어보다 적은 스레드를 사용하는 것이 좋습니다. 따라서 8 코어로 다음과 같이 7 개의 스레드를 지정할 수 있습니다.

ffmpeg -i input.avi -c:v libvpx-vp9 -threads 7 -lossless 1 output.webm

1
사용할 스레드 수를 결정하기 위해 환경 변수 % NUMBER_OF_PROCESSORS %를 사용하고 싶습니다. 카운트가 1 또는 2이면 모든 프로세서를 사용했습니다. 카운트가 3 또는 4이면 하나의 프로세서를 제외한 모든 프로세서를 사용합니다. 그리고 카운트가 더 높으면 스레드 수에 프로세서를 두 개를 제외하고 모두 사용합니다.
Adisak

1
DOS 표현식의 경우 다음과 같습니다. if "% ADJUSTED_CPUCOUNT %"EQU ""(if % NUMBER_OF_PROCESSORS % EQU 1 (ADJUSTED_CPUCOUNT = 1이면) 그렇지 않으면 % NUMBER_OF_PROCESSORS % EQU 2 (ADJUSTED_CPUCOUNT = 2) else if % NUMBER_OF_PROCESSORS EQU 3 (ADJUSTED_CPUCOUNT = 2로 설정) % NUMBER_OF_PROCESSORS %면 EQU 4 (ADJUSTED_CPUCOUNT = 3 설정) else (set / A ADJUSTED_CPUCOUNT = % NUMBER_OF_PROCESSORS % -2))
Adisak

1
superuser.com/questions/155305/… ffmpeg는 이미 최적의 스레드 수를 선택했다고 말합니다
Boris

webm (현재)보다 ​​나은 선택은 아마도 av1 형식 일 것 입니다.
LonnieBest

-1
# 컨테이너

DVD 플레이어와 완벽하게 호환 되려면 MPEG-2 형식, 컨테이너, 제한 사항, 코덱을 사용해야합니다. "현대 플레이어"는 "mp4"호환성을 의미하며 기본적으로 대부분 mp4 파일 플레이어입니다.-H.264, MPEG-4, AVC => libx264
더 읽기 : https://de.wikipedia.org/wiki /H.264

# 비디오

호환성을 위해 https://trac.ffmpeg.org/wiki/Encode/H.264를 살펴보십시오 . 특히 "프로파일"및 "레벨"에 관한 부분은 호환성을 위해
사용 -profile:v high -level 4.0하십시오.

오디오

손실 코덱으로 오디오 트랙을 다시 인코딩하지 마십시오. mp3 형식은 320kbps까지 손실됩니다. 대신
사용하십시오 -c:a copy.

지금까지, 그것은 나에게 꽤 좋은 일을했다. 동기화 문제가 없습니다.
오디오 스트림은 키 프레임에 바인딩되지 않습니다. 정확한 절단이 가능합니다.
오디오 트랙이 44kHz 샘플링 속도로 녹음 된 경우 max. 256kbps

특정 전제 조건에 맞아야하는 경우 비디오의 최종 인코딩에만 손실 코덱을 사용하십시오.

일부 오디오 동기화 문제에 대해 들었지만 주된 문제인 것 같습니다. 보호 된 자료 (!)였습니다.

# 드디어

나는 다음과 같은 것을 선호한다 :
ffmpeg -i input -c:v libx264 -crf 5 -preset faster -profile:v high -level 4.0 -c:a copy output.mp4


"레벨 4.0"옵션은 필요하지 않습니다. x264의 레벨은 해상도와 FPS를 기준으로 결정되므로 일반적으로 수동으로 설정할 점이 없으므로 아무 것도 개선하지 않습니다. 내가 아는 한 ffmpeg는 자동으로 정확한 레벨을 설정할 수 있으므로, 강제로해야 할 이유가없고 FPS와 해상도에 따라 레벨을 선택하는 방법을 완전히 이해하지 않는 한 "레벨"옵션을 사용해서는 안됩니다. 최고의 호환성을 원한다면 "high"대신 "baseline"프로필을 사용하십시오.
Lissanro Rayen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.