명령 줄 도구를 사용하여 특정 간격 (예 : 1 초)에 따라 비디오를 자르고 싶습니다. 60 초짜리 동영상이 있다면 60 개의 균일 한 부분으로 나눌 것으로 예상합니다. 내 유일한 다른 요구 사항은 다시 인코딩 이 없다는 것 입니다.
이 주제에 대해 두 가지 질문을 읽었습니다.
첫 번째 스레드는 더 이상 유지되지 않는 것으로 보이는 신뢰할 수없는 도구를 제안했습니다. 두 번째 스레드는 avconv
수동 이름으로 비디오의 큰 세그먼트를 조작 할 것을 제안 했습니다. 이 비디오를 잠재적으로 수백 개의 작은 부분으로 자르기 때문에 접근 방식은 너무 지루합니다. 한 사용자가 Bash 스크립트를 제공했지만 이것이 "많은 오류와 빈 파일을 생성"할 수 있음을 인정했습니다. 명확성과 더 나은 솔루션을 권장하기 위해 여기에이 스크립트를 다시 게시하겠습니다.
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
FILES=$(ls *.mp4|sort)
let START=0
for FILE in $FILES
do
echo Processing $FILE
mkdir "${FILE}-chop"
for COUNT in {1..59}
do
exec avconv -i "${FILE}" -ss $START -t 60 -c:v copy -c:a copy "./${FILE}-chop/${COUNT} - ${FILE}"
let START=$START+60
done
done
IFS=$SAVEIFS
이와 같은 Bash 스크립트가 실제로 올바른 접근 방식입니까? 아니면이 목적으로 사용할 수있는 더 간단하고 효율적이며 안정적인 도구가 있습니까?
다음에서 세그먼트 muxer 를 사용하십시오 ffmpeg
.
ffmpeg -i input -map 0 -f segment -segment_time 60 -reset_timestamps 1 -c copy output_%03d.mp4
를 사용 -c copy
하면 스트림 복사 모드가 활성화됩니다. 세그먼트 muxer는 스트림 복사시 키 프레임을 잘라 내기 때문에 세그먼트의 정확한 지속 시간이 60 초가 아닐 수 있습니다. 세그먼트 당 정확히 60 초가 필요한 경우 -c copy
세그먼트 시간 제약에 맞게 적절한 GOP 크기를 제거 하고 설정하여 다시 인코딩해야합니다 . 예를 들어 25 프레임 속도 출력에 대한 1 초 GOP는 -g 25
(기본값은 250)입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다