2017-02-17 2 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 секунд с конца КАЖДОГО видео с BATCH ... Фокус в том, что каждое видео имеет разную продолжительность, поэтому «как долго это» быть переменной (длительность минус 15 с или минус 30 с, если я также рассчитываю 15 с начала)

примеры продолжительность видео:

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

вы не могли бы сделать это с помощью простой Баш скрипт?

Как указано эта команда будет получать длительность видео в секундах:

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

Таким образом, вы можете прочитать, что в переменную, а затем просто снять 30 секунд, и вы теперь, что продолжительность установить в вашей команде FFmpeg ,

Итак, шаг 1 будет первым для цикла, который вы уже разместили в своем вопросе.

Шаг 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

Лучше использовать glob вместо синтаксического анализа вывода из 'ls':' для i в * .mp4; do' – LordNeckbeard

Смежные вопросы