기계 학습을 위해 ffmpeg를 사용하여 비디오를 자르고 싶습니다.
예를 들어 1초의 비디오 @25fps를 자르면 정확히 25프레임의 동기화된 오디오 및 비디오가 제공된다는 것을 어떻게 보장할 수 있습니까?
나는 ffmpeg가 절단 시 키프레임을 찾아서 가장 가까운 것을 선택하는 것을 보았습니다. 부정적인 타임스탬프를 생성하고 잘라낸 비디오의 끝 부분을 복사된 프레임으로 채우는 문제가 있었습니다.
메타데이터에는 실제 fps 등이 표시되지 않는다는 것을 알고 있습니다.
그렇다면 오디오 스트림에 맞춰 정확한 양의 프레임으로 정확한 컷을 얻기 위한 파이프라인은 무엇일까요?
고마워요
답변1
비디오의 코덱과 컨테이너에 따라 몇 가지 반직관적인 단계가 필요할 수 있습니다. 많은 코덱은 단순히 임의의 입력 및 출력 지점을 직접 허용하지 않습니다.
- 우선 비디오를 잘라내야 합니다(잠시 동안 오디오를 무시함). 이는 ffmpeg의 인스턴스 중 하나 또는 다른 인스턴스 를 사용
-ss inpoint
하고-pix_fmt yuv420p -an -f yuv4mpegpipe -frames:v 25
파이핑하는 것이 가장 좋습니다.x264
이는 정확한 프레임 방식으로 비디오 스트림을 자르는 안정적인 방법임이 입증되었습니다. - 오디오의 경우 가장 쉬운 방법은
-c:a pcm_s16le
'-f s16le'로 변환한 다음 파일 수준에서 결과를 조작하여 올바른 오프셋의 올바른 바이트 수를 포함하는 것입니다. - 마지막
ffmpeg
패스는 필요한 경우 오디오를 압축하거나 비디오에 다중화할 수 있습니다. 원시 PCM에는 타임스탬프가 포함되어 있지 않으므로 비동기성이 발생할 가능성이 없습니다.
이는 어떤 인공물도 삽입하지 않고 의심스러운 소스(예: 일부 광고주의 광고 클립)의 비디오를 고도로 규제된 선형 스트림(예: TV 채널)에 넣는 신뢰할 수 있는 방법임이 입증되었습니다.