FFmpeg가 비디오의 일부를 잘라낼 때 잘라낸 비디오 부분의 첫 번째 순간이 정지됩니다.

FFmpeg가 비디오의 일부를 잘라낼 때 잘라낸 비디오 부분의 첫 번째 순간이 정지됩니다.

나는 이것을 MP4 파일의 일부를 잘라내는 데 사용합니다.

ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4

잘 작동하지만 비디오 이미지가 항상 처음에 1초 동안 정지됩니다.

어떤 비디오 파일에서 일부를 잘라내는지는 중요하지 않습니다. 비디오가 시작되기까지 약 1초 정도 걸립니다.

여기에 예가 있습니다내가 보고 있는 것의.

답변1

문제는 비디오가 프레임 사이가 아닌 키 프레임만을 기준으로 자르기를 시도하고 초기 시간이 00:36:18키 프레임보다 몇 초 앞선다는 점일 수 있습니다. 해결책은 -copyinkf옵션을 사용하는 것입니다설명서에 다음과 같이 설명되어 있습니다.:

스트림 복사를 수행할 때 처음에 발견된 키가 아닌 프레임도 복사합니다.

따라서 명령은 다음과 같습니다.

ffmpeg -i input.mp4 -vcodec copy -acodec copy -ss 00:36:18 -to 00:39:50 output.mp4

-copyinkf그런 다음 혼합하여 다음 과 같이 보이도록 조정해야 합니다 .

ffmpeg -i input.mp4 -vcodec copy -acodec copy -copyinkf -ss 00:36:18 -to 00:39:50 output.mp4

답변2

복사 중인 타임스탬프는 키 프레임 사이에 있습니다. -vcodec copy를 사용하면 프레임 간 코덱을 복사하고 입력이 키 프레임에서 시작되지 않는 경우 항상 이 동작이 발생합니다.

옵션은 전체 인코딩(예: -vcodec 복사 없음)을 수행하거나 검색할 다른 타임스탬프를 선택하는 것입니다. ffprobe를 사용하여 모든 키 프레임의 위치를 ​​찾을 수 있습니다.

ffprobe -select_streams v -show_frames -print_format csv -show_entries frame=key_frame,pkt_dts_time input.mp4  | grep "frame,1"

세 번째 열에는 모든 키 프레임의 타임스탬프(초 단위)가 포함되어 있습니다. 목표 타임스탬프 이후가 아닌 가장 가까운 키 프레임을 원합니다.

답변3

나 역시 이 문제를 겪었는데, 왜 이런 일이 발생했는지, 어떻게 해결했는지 전혀 모릅니다. 이 코드로 문제가 해결되었습니다.

ffmpeg -ss 00:00:00 -to 00:00:10 -i input.mp4 -c:v copy -c:a copy output.mp4

관련 정보