나는 이것을 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