정확하고 빠른 컷을 위해 복사와 인코딩을 한 번의 작업으로 혼합할 수 있습니까?

정확하고 빠른 컷을 위해 복사와 인코딩을 한 번의 작업으로 혼합할 수 있습니까?

ffmpeg로 구동되는 많은 비디오 커터를 사용해 보았지만 모두 동일한 문제가 있습니다. 재인코딩하지 않으면 빠른 커스팅이 정확하지 않습니다. 내 앱에서 많은 솔루션을 시도했지만 필요한 대로 작동하는 것이 없습니다. 그래서 저는 이 문제를 해결하기 위한 아이디어를 가지고 있습니다. 척이 t1에서 t2까지 시작하는 것을 포함하지 않는 새 비디오를 생성하고 싶다고 가정해 보겠습니다. ffmpeg에서 세그먼트(t1, t2)를 3개 부분으로 나누기 위해 이 작업을 수행하고 싶습니다.

  1. 부분(t1-x, t1+y)은 부분(t1, y)을 정확하게 복사할 수 있도록 다시 인코딩되어야 하는 완전한 인코딩 블록입니다.
  2. 부분(t2-z, t3+w)은 부분(z, t2)을 정확하게 복사할 수 있도록 다시 인코딩되어야 하는 완전한 인코딩 블록입니다.
  3. 완전한 인코딩된 블록을 포함하는 중간 부분(y, z)은 있는 그대로 복사될 수 있습니다.

그런 다음 위 단계의 결과로 나온 3개 부분을 결합합니다. 처음 두 부분은 작을 것으로 예상되므로(둘 중 하나 또는 둘 다 길이가 0일 수 있음) 재인코딩 프로세스가 빠릅니다. 이를 통해 약간 느린 작업으로 정확한 컷을 얻을 수 있지만 전체 비디오를 다시 인코딩하는 것보다 훨씬 빠릅니다. 하나의 명령으로 여러 컷을 수행할 수 있으므로 프레임을 한 번 순회하면 훨씬 더 빨라질 수 있습니다.

그럼 오늘 ffmpeg로 그렇게 할 수 있을까요? 아니면 ffmpeg가 곧 지원할 수 있나요? 누군가 이것을 적용하고 방법을 알려주거나 ffmpeg 팀에 대해 언급하거나 어떻게든 전달할 수 있기를 바랍니다.

답변1

Ffmpeg는 매개변수를 사용한 키프레임 절단을 지원 ss하지만 위치가 가장 중요합니다.

키프레임 탐색의 예:

ffmpeg -ss 30 -i input_vid.mp4 -t 60 -c copy output_clip.mp4

전체 프레임 탐색의 예:

ffmpeg -i input_vid.mp4 -ss 30 -t 60 -c copy output_clip.mp4

여기서 매개 -copy변수는 다음과 같은 원인이 되므로 중요합니다. 스트림 복사. 어떤 경우에는 매개변수를 추가해야 합니다 -noaccurate_seek.

자세한 내용은 다음을 참조하세요.


대부분의 비디오는 시간적 압축을 수행하는 코덱을 사용하므로 지정된 컷포인트는 올바르게 디코딩되기 위해 해당 컷포인트 이전(및 이후)의 프레임에 의존할 수 있습니다. 따라서 ffmpeg를 사용하여 해당 copy모드로 비디오를 다듬을 때 ffmpeg는 세그먼트를 올바르게 디코딩하는 데 필요한 잘린 세그먼트 전후의 모든 프레임을 포함해야 합니다. 이로 인해 검은색 세그먼트가 시작될 수 있습니다.

복사 모드를 계속 사용하면서 검은색 세그먼트를 방지하려면 스위치를 설정해야 합니다 -avoid_negative_ts.

관련 정보