iMovie (무손실은 아니지만 이전보다 낫습니다)
iMovie v10 (질문이 요청 된 후 얼마 후에 출시됨)은 이제 더 많은 미디어 유형을 더 잘 처리하므로 대부분의 H.264 (mp4, m4v, mov, AVHDC, mts, mt2s) 컨텐츠에 대한 가져 오기 재 인코딩 을 피할 수 있습니다.
그러나 여전히 수출시 재 인코딩되므로 기술적으로 무손실이 될 수 없습니다. 그러나 또 다른 새로운 기능은 수출 품질을 사용자 정의 할 수있는 기능으로 손실에 거의 근접 할 수 없습니다. 나는 대답 의이 부분이 다른 '프로젝트 중심'비디오 편집 소프트웨어 (예 : Premiere 또는 Final Cut)에 동일하게 적용될 수 있다고 생각합니다. 왜냐하면 그것들은 일반적으로 정확한 트리밍을 위해 사용하기가 매우 쉽지만 일반적으로 출력시 다시 인코딩한다고 생각하기 때문입니다.
개인적으로, 나는 일반적으로 단일 재 인코딩이 큰 문제는 아니라고 생각하지만, 당신이 특별히 무손실 솔루션을 요구했다는 것을 이해합니다.
무손실 (그러나 더 복잡한 방법!)
비디오의 적어도 일부를 다시 인코딩하지 않고도 비디오를 얼마나 정확하게자를 수 있는지에 대한 기술적 제한이 있으며 기본적으로 i- 프레임 주파수에 따라 다릅니다. 모든 프레임이 i- 프레임이면 어디에서든 잘라낼 수 있지만 몇 초마다 만 있으면 내용을 잃거나 다시 인코딩하지 않고도 해당 i- 프레임에서 손실없이 잘라낼 수 있습니다 (적어도 i) 프레임으로 시작할 수 있습니다.
ffmpeg
이 SO Q & A는 특히를 사용하여 i- 프레임 사이를 잘라내는 방법에 대한 의문을 제기합니다 ffmpeg
. 이 작업을 수행하는 GUI 응용 프로그램을 모르지만 기본적으로 다음과 같은 명령을 실행합니다.
ffmpeg -i input.m4v -vcodec copy -acodec copy -ss 00:01:20.000 -t 00:37:50.000 output.m4v
지정된 두 시간은 시작 과 기간 , 초 또는 중 하나를 지정할 수 있습니다 hh:mm:ss.ss
, 그리고 -acodec copy
및 -vcodec copy
재 인코딩하지는 FFmpeg 말한다.
나는 정확히 당신이 너무 일찍 잘라 경우 발생하는 아니에요,하지만 난 생각 이 I- 프레임을 만날 때까지 비디오가 (플레이어에 따라, 또는 어쩌면 손상) 기본적으로 비어 있습니다. 따라서 컷하기 전에 가장 가까운 i- 프레임을 찾고 싶을 것입니다. 이 대답 은 조금 어색하지만 ffprobe
and를 사용하여 해당 문제를 해결합니다 awk
. 기본적으로 이상적인 컷 포인트 전에 ffprobe
프레임을 스캔하고 가장 가까운 키 프레임 ( flags=K
)을 찾는 데 사용합니다 . 비디오의 각 프레임에 대한 전체 출력은 다음과 같이 볼 수 있습니다.
ffprobe -select_streams v -show_frames <INPUT>
링크 된 답변은 특정 시간 전에 키 프레임을 찾기 위해이 명령을 제공합니다.
ffprobe -select_streams v -show_frames -v quiet INPUT.mp4 |
awk -F= '
/pict_type=/ { if (index($2, "I")) { i=1; } else { i=0; } }
/pkt_pts_time/ { if (i && ($2 >= 150)) print $2; }
' | head -n 1
마지막으로 두 개의 i- 프레임 사이를 잘라야하는 경우 비디오를 분할하고 다시 참여할 수 있습니다. 이 답변 의 정보를 기반으로 다음과 같아야합니다.
ffmpeg -f concat -i list_of_videos.txt -c copy OUTPUT.mp4
어디에서 list_of_videos.txt
당신은 연결하는 할 파일을 나열하는 간단한 텍스트 파일입니다.
요약
iMovie는 대부분의 경우 (v10부터) 충분하고 매우 쉽습니다.
ffmpeg는 약간의 멍청이로 무손실 (또는 무손실에 매우 가깝게) 할 수 있습니다. 난이도는 정확한 시작점과 i- 프레임의 빈도에 대해 얼마나 까다로운 지에 달려 있습니다.