다시 인코딩하지 않고 어디서나 h.264 스트림을 잘라낼 수 있습니까?

다시 인코딩하지 않고 어디서나 h.264 스트림을 잘라낼 수 있습니까?

참고: 원래는 MP4 파일이라는 보다 일반적인 용어로 h.264 스트림을 잘못 언급했습니다. 죄송합니다.


결과 비디오가 키프레임으로 시작되도록 키프레임에서 h.264 분할을 시작해야 하는 일반적인 필요성을 알고 있지만 그렇게 만드는 스트림 구조/사양이 무엇인지 궁금합니다.

키프레임은 전체 파일의 고정 매개변수로 X 프레임마다 발생해야 합니까, 아니면 키프레임 사이에 다양한 간격이 있을 수 있습니까? 플레이어가 나타나는 대로 프레임을 가져와 전체를 그리거나(키프레임) 일부를 업데이트하는 경우(키프레임 아님) 키프레임 간격이 왜 중요합니까?

간격이 중요하지 않고 매 100개 스트림의 프레임 87을 잘라내고 싶다면 86개의 프리앰블 프레임을 사용하여 새 파일에 대한 새 키프레임을 계산할 수 없습니까? 원본 파일의 키 프레임을 가져와 다음 키프레임으로 이동한 다음 다음 원본 키프레임(프레임 100)으로 이동하고 거기에서 이동하시겠습니까?

즉, 파일은 "새 키, 12개의 원래 비 키, 원래 키, 99개의 원래 비 키, 원래 키 .."로 끝납니다.

답변1

키프레임은 언제든지 발생할 수 있습니다. 인용을 찾을 수는 없지만 컷씬이 많은 영화에서 상상해 보세요. 비디오의 품질을 유지하기 위해 급격한 장면 변경 후 키프레임이 첫 번째 프레임이 되도록 하려는 경우, 그렇지 않으면 비디오 압축기가 많은 "델타" 변경 사항을 사용하여 새 장면을 생성하려고 할 때 엄청난 소음이 발생하게 됩니다. 이전 장면부터요.

일관된 키프레임 타이밍을 갖는 일반 스트림의 경우 허용될 수 있지만 최종 콘텐츠의 경우 장면 변경 경계에 키프레임을 가짐으로써 더 나은 품질을 얻을 수 있습니다.

에서키프레임, InterFrame 및 비디오 압축

키프레임(i-frame)은 비디오 이미지의 전체 프레임입니다. 후속 프레임인 델타 프레임에는 변경된 정보만 포함됩니다. 키프레임은 스트림 내에서 여러 번 표시됩니다.생성 방법이나 스트리밍 방법에 따라 다릅니다.

실제로 그렇습니다조정 가능하며 품질 및 비트 전송률 요구 사항에 따라 다릅니다..

그만큼mp4의 기본값은 250프레임마다 키프레임입니다.(그래서 약 10초마다). 해상도를 변경하기가 더 어렵기 때문에 이는 스트리밍에 좋지 않습니다.유튜브는 2초의 키프레임 간격을 사용합니다..

에서 언급한 것처럼 iframe(키프레임)만 추출하는 몇 가지 방법도 있습니다.BogoToBogo: 썸네일(IFRAME / 장면 변경) - 2020

i-프레임 썸네일

다음 명령은 I-프레임마다 yi01.png, yi02.jpg, yi03.png...yi116이라는 하나의 썸네일 이미지를 생성합니다.

ffmpeg -i yosemiteA.mp4 -f image2 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr yi%03d.png
  1. select='eq(pict_type,PICT_TYPE_I)': I-프레임 이미지 추출
  2. vsync: 비디오 동기화 방법.
  3. vfr: 가변 프레임 속도.

관련 정보