development

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

big-blog 2020. 2. 17. 22:19
반응형

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


다음 명령을 사용하여 비디오의 시작 및 종료 시간을 사용하여 비디오를 잘라 보았습니다.

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

위의 명령을 사용하여 난에서 비디오를 잘라낼 00:00:0300: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

이제는 잘 작동합니다.


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

mp4 컨테이너를 사용하면 편집 목록을 사용하여 재 인코딩하지 않고 키 프레임이 아닌 곳에서자를 수 있습니다. 다시 말해, 3 초 전 가장 가까운 키 프레임이 0 초이면 0 초부터 비디오를 복사하고 편집 목록을 사용하여 플레이어에게 3 초 후에 재생을 시작하도록 지시합니다.

git master 최신 ffmpeg 를 사용하는 경우 제공 한 명령을 사용하여 호출 할 때 편집 목록을 사용 하여이 작업을 수행합니다. 이것이 효과가 없다면 구 버전의 ffmpeg를 사용 중이거나 플레이어가 편집 목록을 지원하지 않는 것입니다. 일부 플레이어는 편집 목록을 무시하고 항상 파일의 모든 미디어를 처음부터 끝까지 재생합니다.

키 프레임이 아닌 지점에서 정확하게 시작하여 편집 목록을 지원하지 않는 플레이어에서 원하는 지점에서 시작하여 재생하려는 경우 또는 컷 부분이 실제로 출력 파일에 없는지 확인하려는 경우 (예 : 기밀 정보가 포함되어 있으면 원하는 시작 시간에 키 프레임이 정확하게되도록 다시 인코딩하여이를 수행 할 수 있습니다. 을 지정하지 않으면 재 인코딩이 기본값 copy입니다. 예를 들면 다음과 같습니다.

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

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

또한이 -t옵션은 종료 시간이 아닌 지속 시간을 지정합니다. 위 명령은 3 초부터 8 초의 비디오를 인코딩합니다. 3에서 시작하고 8에서 끝나려면을 사용하십시오 -t 5. 현재 버전의 ffmpeg를 -t사용 -to중인 경우 위 명령 에서을 사용 하여 지정된 시간에 종료 할 수도 있습니다 .


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

 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 copy : 스트림 복사를 통해 트리밍하는 옵션입니다. (NB : 매우 빠름)

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

현재 고도로 찬성 된 답변은 구식이며 트림이 매우 느립니다. 자세한 내용은이 공식 ffmpeg 기사를 참조하십시오 .


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

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


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

3 초에서 8 초를 제외한 모든 것을 삭제하십시오.


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

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

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

-ss출력 옵션으로 지정된 경우 , 버린 시간이 입력에서 읽은 총 시간에 계속 포함되므로 -t중지시기를 알 수 있습니다. 입력 옵션 -ss으로 제공 되는 경우 시작 시간을 찾고 계산하지 않습니다 . 혼동이 시작됩니다.

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


방금 사용한 것이 있습니다 :

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


생성 된 mp4 파일도에서 사용할 수 있습니다 iMovie.

참조 : https://www.arj.no/2018/05/18/trimvideo/

참고 URL : https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg



도와주세요.
반응형