처음 20 초와 마지막 30 초를 제거해야하는 여러 개의 100 개의 비디오가 있습니다.
분명히 한 번에이 작업을 수행하는 것은 실용적이지 않습니다. 어쨌든 OS X Automator 스크립트에서 이것을 자동화 할 수 있습니까?
처음 20 초와 마지막 30 초를 제거해야하는 여러 개의 100 개의 비디오가 있습니다.
분명히 한 번에이 작업을 수행하는 것은 실용적이지 않습니다. 어쨌든 OS X Automator 스크립트에서 이것을 자동화 할 수 있습니까?
답변:
* nix와 Bash를 실행한다고 가정하면, ffmpeg 정적 빌드를 다운로드하십시오. 운영 체제 용. 그런 다음 ffmpeg
파일을 복사하여 /usr/bin/ffmpeg
.
sudo cp ~/Downloads/ffmpeg/ffmpeg /usr/bin/ffmpeg
sudo chmod +x /usr/bin/ffmpeg
이제 Bash에서이 셸 스크립트를 실행할 수 있습니다. 동영상이있는 폴더에 복사하여 붙여 넣기 만하면됩니다.
for f in *.mp4; do
duration=$(ffmpeg -i "$f" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//)
length=$(echo "$duration" | awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }' )
trim_start=20
trim_end=$(echo "$length" - 30 - "$trim_start" | bc)
echo ffmpeg -ss "$trim_start" -i "$f" -c copy -map 0 -t "$trim_end" "${f%.mp4}-trimmed.mp4"
done
노트 : 해당 항목을 제거하십시오. echo
문을 사용하여 실제로 명령을 수행하십시오. 먼저 정확성을 위해 생성 된 명령을 테스트하는 것이 좋습니다. 이것은 다음과 같은 것을 생성합니다 :
ffmpeg -ss 20 -i input.mp4 -c copy -map 0 -t 161.58 input-trimmed.mp4
스크립트가 수행 할 작업은 입력의 전체 실행 시간을 계산하고, 시작 시간과 끝에서 제거 할 시간을 빼고 ffmpeg에게 지정된 시작 시간에서 새로 계산 된 끝까지 스트림 복사를 수행하도록 명령합니다 시각. 이렇게하면 비디오 및 오디오 품질에 해를 끼치 지 않습니다. 대용량 파일의 경우에도 몇 초 이내에 실행되어야합니다.
명확히하기 위해, -ss
시작 시간을 설정하고 -c copy -map 0
모든 비디오, 오디오 및 자막 스트림을 원본에서 잘라낸 버전으로 복사합니다. -t
종료 시간을 설정합니다. 만나다 이 문서는 FFmpeg Wiki에 있습니다. 찾기에 대한 자세한 정보.
커맨드 라인에 익숙하다면, FFmpeg
ffmpeg -i file.mp4 -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output.mp4
또 다른 옵션은 파일을 반복하고 각 파일에 대해 단일 파일 FFmpeg 작업을 실행하는 작은 쉘 스크립트입니다. 그럼 다시, 나는 맥 쉘을 사용하지 않았다 :)
for f in *.mp4; do ffmpeg -i $f -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output/$f; done
희망이 조금 도움이됩니다.
%d
이미지에 대해서만 지원됩니다 (더 구체적으로 image2 demuxer ).