2017-02-17 5 views
0

나는 배치 플러스 작물 다시 규모의 파일을 변환하려면이 명령을 사용는 FFmpeg 설정 변수 비디오 기간

for i in $(ls *.mp4); do 
    ffmpeg -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "../../archive/${i/.mp4/}.mp4" 
done 

이 명령은 두 번째 15에서 시작, 30 초 길이의 비디오하게됩니다

for i in $(ls *.mp4); do 
    ffmpeg -ss 00:00:15 -t 30 -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "${i/.mp4/}_test.mp4" 
done 

내가 원했던 것은 처음부터 15 초를 잘라 버리고 각 비디오의 끝에서 15 초를 자르는 명령입니다. 트릭은 각 비디오마다 다른 지속 시간이 있으므로 "얼마나 오래"해야하는지입니다. 변수 (시작부터 15 초를 계산하면 지속 시간에서 15 초 또는 30 초를 뺀 값)

비디오 기간 예 :

video 1 - 00:25:19 
video 2 - 00:15:34 
video 3 - 00:19:21 
video 4 - 00:22:49 
etc. 
+0

을 나는이 당신을 도울 것이라고 생각 : http://stackoverflow.com/questions/3936816/querying-an-audio-video -file-for-information/3938722 # 3938722 – v010dya

답변

1

이 간단한 bash는 스크립트와 함께 할 수 없습니다?

ffprobe -i some_video -show_entries format=duration -v quiet -of csv="p=0" 

그래서 당신이 변수로 그것을 읽을 수 있습니다 단순히 30 초 철회하고 당신은 지금 무엇을 지속하는 것은 귀하는 FFmpeg 명령에서 설정하는 것입니다 :

으로이 명령은 초 비디오 시간을 검색합니다 here을 언급 .

그래서 첫 번째 for-loop가 귀하의 질문에 게시되었습니다.

2 단계는 영화 재생 시간에서 30 초를 회수하고이를 변수에 저장합니다.

그런 다음 3 단계에서,이 같은 대한 루프 두 번째를 다시 작성 :

for i in $(ls *.mp4); do 
    ffmpeg -ss 00:00:15 -t $your_new_duration_variable -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "${i/.mp4/}_test.mp4" 
done 
+1

'ls'의 출력을 파싱하는 대신 glob을 사용하는 것이 더 좋습니다 :'for for i. * .mp4; 할 ' – LordNeckbeard