FFmpeg를 사용하여 비디오 파일에서 시작 위치에서 종료 위치로 부분 잘라 내기 [중복]


143

이 질문에는 이미 답변이 있습니다.

비디오 파일은 30 분이지만 00:09:23에서 00:25:33까지 비디오를 추출하려고합니다.

로 시작 위치를 정의 할 수 -ss있지만 종료 위치에 대한 위치를 찾을 수 없습니다. 도와주세요?

답변:


244

ffmpeg 설치

의 최신 버전ffmpeg다운로드하고 배포판과 함께 제공되는 버전 (예 : Ubuntu)을 사용하지 마십시오. 다양한 배포판의 패키지 버전은 종종 구식이며 예상대로 작동하지 않습니다.

또는 직접 컴파일하십시오 .

다시 인코딩하지 않고 비디오를 자르는 방법

비디오를 절단 할 때 사용 [start]을 위해 [duration]:

ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4

여기서 옵션은 다음을 의미합니다.

  • -ss시작 시간을 지정합니다 ( 예 : 00:01:23.000또는 83(초)).
  • -t 클립의 지속 시간을 지정합니다 (동일한 형식).
  • 최근 ffmpeg에는 종료 시간을로 제공하는 플래그도 있습니다 -to.
  • -c copy첫 번째 비디오, 오디오 및 자막 비트 스트림을 다시 인코딩하지 않고 입력에서 출력 파일로 복사합니다. 이것은 품질에 해를 끼치 지 않으며 명령을 몇 초 내에 실행합니다.

다시 인코딩하여 비디오를 자르는 방법

-c copy옵션을 사용 ffmpeg하지 않으면 선택한 형식에 따라 출력 비디오 및 오디오가 자동으로 다시 인코딩됩니다. 고품질 비디오 및 오디오를 보려면 x264 인코딩 안내서AAC 인코딩 안내서 를 각각 읽으십시오 .

예를 들면 다음과 같습니다.

ffmpeg -ss [start] -i in.mp4 -t [duration] -c:v libx264 -c:a aac -strict experimental -b:a 128k out.mp4

1
우분투 12:10에서 -c : v 및 -c : a가 작동하지 않았습니다. 대신 "-acodec copy 및 -vcodec copy"를 사용해야했습니다.
Samuel Lampa

1
@Samuel 그렇다면 실제 FFmpeg가 아니라 Libav 포크 인 오래된 버전을 사용하고 있습니다. 참조 : stackoverflow.com/a/9477756/1109017
slhck

감사합니다! 지속 시간을 지정하지 않으면 끝날까요?
Jeff

@ 제프 예! (문자 최소)
slhck

3
@Prateek 비디오 인코딩을 다시 인코딩하는 대신 비디오 비트 스트림을 복사 할 때는 키 프레임 에서만 잘라낼 수 있습니다 . 1, 2, 3 초에 키 프레임이 있지만 1.5 초에 자르려면 ffmpeg는 2 초까지 기다렸다가 자르기를 시작할 수 있습니다. 정확하지 않습니다.
slhck

26

지금 다음 명령을 사용할 수 있다고 생각합니다.

ffmpeg -i inputFile -vcodec copy -acodec copy -ss 00:09:23 -to 00:25:33 outputFile

ffmpeg Doc 또는 이 Wiki 페이지 도 살펴보십시오 .


6
ffmpeg -i inputFile -c copy -ss 00:09:23 -to 00:25:33 outputFile더 간단한 버전
nwgat

3
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4버전 ( -copyts) 을 사용해야했지만 그렇지 않으면 잘못 시작되었습니다 (처음에는 검은 색 화면). 그래도 두 번째 링크에 감사드립니다.
Necronomicron

내가 원했던 마지막 것은 끝점에서 기간을 계산하는 것이 었습니다.
Tomasz Gandor

-to 옵션은 실제로 요청 된 질문에 답변합니다. 나머지 답변은 무의미하거나 쓸모가 없습니다.
James Bowery

12

아무도 trim 필터를 제안하지 않은 것이 이상합니다 .

두 번째 입력 분을 제외한 모든 것을 삭제하십시오.

ffmpeg -i INPUT -vf trim=60:120

첫 번째 초만 유지하십시오.

ffmpeg -i INPUT -vf trim=duration=1

초 13에서 초 58을 제외한 모든 것을 삭제하십시오.

ffmpeg -i INPUT -vf trim=13:58 OUTPUT

8
예, 좋은 언급 trim하고 atrim. 필자는 일반적으로 필터링 할 때이를 사용하지만 사용자는 필터링에 다시 인코딩해야합니다 .
llogan

너는 나의 영웅이야. 나는 이것을 한 필터가 심하게 필요했다.
fahadash

5

Windows와 Linux에서 작동 하는이 두 가지 방법을 사용할 수 있습니다 .

비디오 파일을 ffmpeg로 분할하는 방법에는 두 가지가 있습니다. 첫 번째는 그 자체로는 좋고 그 이상입니다. 빠르지 만 때로는 특정 결함이있는 출력 파일을 만듭니다. 따라서 이러한 경우 비디오 파일을 분할하는 두 번째 방법이 있습니다. 상당히 느리고 출력 파일이 더 크지 만 사용 된 입력 파일과 항상 동일한 품질 수준 인 것 같습니다.

방법 1 :

ffmpeg -ss <start> -i in1.avi -t <duration> -c copy out1.avi

방법 2 :

ffmpeg -ss <start> -i in1.avi -t <duration> out1.avi
  • <start>– 비디오 ffmpeg 부분의 시작 부분은 잘라내는 것입니다. 형식 : 00:00:00.0000,시 : 분 : 초 : 밀리 초를 의미합니다.

  • <duration>– 비디오 ffmpeg 부분의 길이는 잘립니다. 위와 같은 형식입니다.

예 :

ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 -c copy out1.avi
ffmpeg -ss 01:19:00 -i in1.avi -t 00:05:00 out1.avi

ffmpeg는 1 시간 19 분 0 초부터 비디오 파일의 일부를 잘라냅니다. 비디오 시퀀스 컷 아웃 시간은 5 분 0 초입니다.


좋아, thnx. 문서를 확인하고 내일 사용해보십시오.
juGGaKNot

3
-sameq"동일한 품질"을 의미하지 않으며 ffmpeg에서 제거되었습니다. -codec copy대신 사용하십시오 . 또한 -to옵션을 잊지 마십시오 .
llogan 2013 년

나는 구식이어서 구식으로 명령을 수정했습니다. 정보를 올바르게 인용하지 않고 복사하여 붙여 넣지 마십시오.
slhck

-1

이것을 사용할 수 있습니다

ffmpeg -sameq -ss clip_start -t duration  -i  original.ogg  clip.ogg

여기에서 비디오 지속 시간을 제공해야합니다. 즉. 00 : 25 : 33-00 : 09 : 23


1
다른 답변에서 언급했듯이 : 명령을 사용하면 파일을 다시 인코딩 할 수 있습니다.이 파일은 반드시 필요하지 않으며 품질이 떨어지고 처리 시간이 길어집니다.
slhck

-2

다음 구문을 사용하여 ffmpef로 비디오를 자릅니다.

ffmpeg -sameq -ss [start_seconds] -t [duration_seconds] -i [input_file] [outputfile]

-t는 지속 시간을 초 단위로 설정하는 데 사용됩니다. 종료 시간을 지정할 수는 없지만 제대로 작동합니다.


1
파일을 다시 인코딩하기 위해 FFmpeg를 설정하는 이유는 무엇입니까? -sameq"동일한 품질"을 의미 하는 것은 아닙니다.
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.