대량의 여러 MP4 파일에서 시작과 끝 부분 제거


3

처음 20 초와 마지막 30 초를 제거해야하는 여러 개의 100 개의 비디오가 있습니다.

분명히 한 번에이 작업을 수행하는 것은 실용적이지 않습니다. 어쨌든 OS X Automator 스크립트에서 이것을 자동화 할 수 있습니까?

답변:


4

* 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에 있습니다. 찾기에 대한 자세한 정보.


0

커맨드 라인에 익숙하다면, 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

희망이 조금 도움이됩니다.


30 초 동안 인코딩하지 말고 OP가 지난 30 초를 제거해야하므로 접근 방법이 작동하지 않습니다. 또한 입력 구문은 다음과 같습니다. %d 이미지에 대해서만 지원됩니다 (더 구체적으로 image2 demuxer ).
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.