Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Как вырезать фрагменты из видео без перекодировки?  (Прочитано 17375 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6844
    • Просмотр профиля
thing,
дело было на 12.04. Avidemux в репах 14.04 я пользовал всего 1 раз пока, но все прошло на отлично.

Оффлайн Tamir

  • Активист
  • *
  • Сообщений: 782
    • Просмотр профиля
    • PDF формы
⚡ Thunde® ⚡,
не подскажете как вы подключили реп avidemux из 14.04 и установили (если есть возможность то пошагово объясните, пожалуйста?

Оффлайн thunderamur

  • Автор темы
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6844
    • Просмотр профиля
Tamir,
я использую 14.04 :)

Оффлайн zhart

  • zhart.ru
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
    • Гиковский блог Geekus.ru
ffmpeg -i moyo_video.avi -f avi -vcodec copy -acodec copy -ss 0:39:00 -t 0:48:00 /home/user/drugaya_papka/obrezok.avi
вырежет и сохранит видео с 39 по 48 минуту.
Путь для сохранения нужно указать в другую папку чтобы не повредить исходное видео.

Спасибо за решение.
Теперь бы еще bash-скриптик написать, который будет обрабатывать все файлы в заданной директории.

Задача примерно такая:
Все файлы не больше заданной протяженности (3 мин для примера) не трогать вообще, все остальные — разбивать на куски по 3 мин. При этом исходные файлы оставлять без изменений, а полученные куски обзывать на манер «source-file-name_01.avi», «source-file-name_02.avi» и т.п.

Вопрос:
Как заставить скрипт пропускать файлы меньше 3 минут и как для больших файлов заставить его работать циклически до тех пор, пока не будет выполнена полная нарезка?
« Последнее редактирование: 09 Сентября 2014, 12:00:54 от zhart »

Оффлайн start733

  • Участник
  • *
  • Сообщений: 248
    • Просмотр профиля
ffmpeg -i moyo_video.avi -f avi -vcodec copy -acodec copy -ss 0:39:00 -t 0:48:00 /home/user/drugaya_papka/obrezok.avi
вырежет и сохранит видео с 39 по 48 минуту.
Путь для сохранения нужно указать в другую папку чтобы не повредить исходное видео.

Спасибо за решение.
Теперь бы еще bash-скриптик написать, который будет обрабатывать все файлы в заданной директории.

Задача примерно такая:
Все файлы не больше заданной протяженности (3 мин для примера) не трогать вообще, все остальные — разбивать на куски по 3 мин. При этом исходные файлы оставлять без изменений, а полученные куски обзывать на манер «source-file-name_01.avi», «source-file-name_02.avi» и т.п.

Вопрос:
Как заставить скрипт пропускать файлы меньше 3 минут и как для больших файлов заставить его работать циклически до тех пор, пока не будет выполнена полная нарезка?

Есть такой скрипт но его нужно переделать под задачу, коментарии в теле скрипта помогут разобраться что к чему:

#!/bin/sh

# This script will recursively find all
# flv files beneath it in the file system
# and convert them to MPEG4 XVID format.
# If they are longer than 10 minutes,
# they will be split into 10 minute chunks.

FILES=`find . -type f -name "*.flv"`

for F in $FILES
do

#
# First, get file names from input
######################################
DIR=`dirname $F` 
FNAME=`basename $F`
BASE=`basename $F .flv`
EXT="flv"

#
# Now, get the length of the clip
######################################
HOURS=`avconv -i $F 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,// | cut -d ":" -f 1`
MIN=`avconv -i $F 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,// | cut -d ":" -f 2`
SEC=`avconv -i $F 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,// | cut -d ":" -f 3 | cut -b -2`

echo "The duration of $BASE.$EXT is $HOURS:$MIN:$SEC."

#
# If minutes are greater than 10, we need to cut it up for YouTube
##################################################################
if [ $MIN -gt "10" ]; then

echo "$FNAME is longer than 10 minutes long. Splitting now..."

#
# We need to get the minutes, so I've split these up into BMIN and SMIN, e.g. 15 minutes, BMIN=1 SMIN=5
####################
BMIN=`echo $MIN | cut -c 1`
SMIN=`echo $MIN | cut -c 2`

# Set a counter
i=0

#
# Loop over the video, grabbing it in 10 minute increments.
# I know I'll NEVER record anything that exceeds 1 hour.
# While I'm sure this can be done easier, egg-nog and whiskey
# prevents me from thinking of one...
##########################################################
while [ $i -le $BMIN ]
do

case $i in
0)
STIME="00:00:00"
FTIME="00:10:00"
;;
1)
STIME="00:10:00"
if [ $MIN -lt "20" ]; then
FTIME=$HOURS:$MIN:$SEC
else
FTIME="00:20:00"
fi
;;
2)
STIME="00:20:00"
if [ $MIN -lt "30" ]; then
FTIME=$HOURS:$MIN:$SEC
else
FTIME="00:30:00"
fi
;;
3)
STIME="00:30:00"
if [ $MIN -lt "40" ]; then
FTIME=$HOURS:$MIN:$SEC
else
FTIME="00:40:00"
fi
;;
4)
STIME="00:40:00"
if [ $MIN -lt "50" ]; then
FTIME=$HOURS:$MIN:$SEC
else
FTIME="00:50:00"
fi
;;
5)
STIME="00:50:00"
if [ $MIN -lt "60" ]; then
FTIME=$HOURS:$MIN:$SEC
else
FTIME="00:60:00"
fi
;;
6)
STIME="00:60:00"
FTIME="01:00:00"
;;
esac

avconv -i $F -f avi -ss $STIME -t $FTIME -r 29.97 -vcodec libxvid -vtag XVID -maxrate 1800k -b 1500k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -flags +4mv -trellis -aic -cmp 2 -subcmp 2 -g 300 -acodec libmp3lame -ar 48000 -ab 128k -ac 2 $DIR/$BASE-$i.avi
i=`/usr/bin/expr $i + 1`
done


else
avconv -i $F -f avi -r 29.97 -vcodec libxvid -vtag XVID -maxrate 1800k -b 1500k -qmin 3 -qmax 5 -bufsize 4096 -mbd 2 -bf 2 -flags +4mv -trellis -aic -cmp 2 -subcmp 2 -g 300 -acodec libmp3lame -ar 48000 -ab 128k -ac 2 $DIR/$BASE.avi
fi

done



Оффлайн zhart

  • zhart.ru
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
    • Гиковский блог Geekus.ru
start733, благодарю за пример, покопаюсь в нем.

Оффлайн HankSerg

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Сегодня вырезал фрагмент видео в замечательной программе kdenlive!

Оффлайн zhart

  • zhart.ru
  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
    • Гиковский блог Geekus.ru
HankSerg, вообще-то kdenlive упоминается в первом же сообщении темы. Из свободных видеоредакторов он пожалуй действительно самый функциональный, но он имеет серьезный недостаток — тянет за собой кучу KDE-зависимостей не подходит для описываемых целей, вынесенных в заголовок темы — «без перекодировки».

Оффлайн venoel

  • Любитель
  • *
  • Сообщений: 79
    • Просмотр профиля
ffmpeg -i moyo_video.avi -f avi -vcodec copy -acodec copy -ss 0:39:00 -t 0:48:00 /home/user/drugaya_papka/obrezok.avi
вырежет и сохранит видео с 39 по 48 минуту.
Путь для сохранения нужно указать в другую папку чтобы не повредить исходное видео.
Спасибо за команду.
Только параметр "-t 00:00:00" означает количество времени, а не конечную точку в видео. Т.е. в приведенном примере получится смысл "вырезать 48-ми минутный отрезок начиная с 39-ой минуты 48"
i5-9400@4.1GHz/32Gb/MSIB360M/Intel HD G630/18.04 Bionic Beaver

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.