it-swarm.dev

Ffmpeg를 사용하여 시작 및 종료 시간을 기준으로 비디오 자르기

다음 명령을 사용하여 비디오의 시작 및 종료 시간을 사용하여 비디오를 자르려고했습니다.

ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4

위의 명령을 사용하여 00:00:03에서 00:00:08로 비디오를 자르고 싶습니다. 그러나 처음 11 초 동안 비디오를 자르지 않고 그 시간 사이에 비디오를 자르지는 않습니다. 아무도 내가 어떻게 해결할 수 있습니까?

편집 1 :

나는 mark4o 에 의해 제안 된 다음 명령을 사용하여 자르려고했다.

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

그러나 다음 오류가 표시되었습니다.

인코더 'aac'은 실험적이지만 실험용 코덱은 사용할 수 없습니다

그래서 나는 명령에 -strict -2를 추가했다.

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4

이제는 잘 작동합니다.

385
Kalai

3 초에 키 프레임이 없을 것입니다. 비 키 프레임은 다른 프레임과의 차이를 인코딩하므로 이전 키 프레임으로 시작하는 모든 데이터가 필요합니다.

Mp4 컨테이너를 사용하면 편집 목록을 사용하여 다시 인코딩하지 않고 키 프레임이 아닌 곳에서자를 수 있습니다. 즉, 3s 이전의 가장 가까운 키 프레임이 0s이면 0에서 시작하는 비디오를 복사하고 편집 목록을 사용하여 3 초 이내에 재생을 시작하도록 플레이어에게 알립니다.

gf master에서/- latest ffmpeg 를 사용하고 있다면 사용자가 제공 한 명령을 사용하여 호출 할 때 편집 목록을 사용하여이를 수행 할 것입니다. 이것이 당신을 위해 작동하지 않는 경우에 당신은 아마 ffmpeg의 더 오래된 버전을 사용하고있다, 또는 당신의 선수는 편집 명부를 지원하지 않는다. 일부 플레이어는 편집 목록을 무시하고 항상 파일의 모든 미디어를 처음부터 끝까지 재생합니다.

비 키프 레임에서 시작하여 정확하게 편집하고 편집 목록을 지원하지 않는 플레이어에서 원하는 지점부터 재생하려는 경우 또는 잘라낸 부분이 실제로 출력 파일에 있지 않은지 확인하려는 경우 (예 : 기밀 정보가 포함 된 경우 다시 인코딩하여 원하는 시작 시간에 정확하게 키 프레임을 만들 수 있습니다. copy을 지정하지 않으면 재 인코딩이 기본입니다. 예 :

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

다시 인코딩 할 때 추가 품질 관련 옵션 또는 특정 AAC 인코더를 포함 할 수도 있습니다. 자세한 내용은 ffmpeg의 x264 인코딩 가이드 비디오 및 AAC 인코딩 안내서 에서 오디오를 참조하십시오.

또한 -t 옵션은 종료 시간이 아니라 지속 시간을 지정합니다. 위의 명령은 3s에서 시작하는 8s의 비디오를 인코딩합니다. 3시에 시작하고 8시에 종료하려면 -t 5를 사용하십시오. ffmpeg의 최신 버전을 사용하고 있다면 위의 명령에서 -t-to로 바꿔 지정된 시간에 끝낼 수도 있습니다.

447
mark4o

이것을 사용해보십시오. 그것은 내가 알아 낸 가장 빠르고 최고의 ffmpeg 방식입니다.

 ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -c copy output.mp4

이 명령은 비디오를 몇 초 내에 자릅니다!

나는 내 블로그에서 그것을 설명했다 여기 :

-i : 입력 파일을 지정합니다. 이 경우, 그것은 (input.mp4)입니다.
-ss : -i와 함께 사용하면 입력 파일 (input.mp4)에서 위치를 찾습니다.
00:01:00 : 트림 된 비디오가 시작될 시간입니다.
to : 시작 (00:01:40)에서 끝 (00:02:12)까지의 지속 시간을 지정합니다.
00:02:00 : 자르는 비디오가 끝나는 시간입니다.
-c 복사 : 이것은 스트림 복사를 통해 트림하는 옵션입니다. (주의 : 매우 빠름)

타이밍 형식은 다음과 같습니다. hh : mm : ss

현재 매우 높은 upvoted 답변은 구식이며 트림은 매우 느립니다. 자세한 내용은이 공식 ffmpeg article 을보십시오.

246
George Chalhoub
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -c copy cut.mp4 

Make를 위해 즉시 -c copy 를 사용하십시오. 이 경우 ffmpeg는 비디오를 다시 인코딩하지 않고 크기에 따라 잘립니다.

74
Vlad Hudnitsky
    ffmpeg -i movie.mp4 -vf trim=3:8 cut.mp4

두 번째 3에서 두 번째 8까지를 제외한 모든 것을 버리십시오.

26
JFMD

소스 비디오의 시작 및 종료 시간을 기준으로 자르고 수학을 수행하지 않으려면 종료 시간을 입력 옵션으로 지정하고 시작 시간을 출력 옵션으로 지정하십시오.

ffmpeg -t 1:00 -i input.mpg -ss 45 output.mpg

이렇게하면 0:45에서 1:00까지 15 초가 줄어 듭니다.

이는 -ss이 출력 옵션으로 제공 될 때 폐기 된 시간이 입력에서 읽은 총 시간에 여전히 포함되므로 -t은 (는) 중지시기를 알기 위해 사용합니다. -ss 입력 옵션으로 제공되는 경우 시작 시간을 찾고 계산되지 않습니다 , 혼란이 시작된 곳입니다.

생략 된 세그먼트는 여전히 버려지기 전에 처리되기 때문에 탐색보다 속도가 느리지 만 이것이 내가 아는 한 이것을 수행하는 유일한 방법입니다. 큰 파일 내에서 깊게 클리핑하는 경우 수학을 수행하고 입력에 -ss를 사용하는 것이 더 현명합니다.

15
Ryan Yoosefi