|
| |||
|
|
ffmpeg&bash - проблемы с нарезкой кусков из одного видеофайла.[SOLVED] дано: 1. видеофайл, пусть будет video.mp4 2. список треков (имя файла для облегчения жизни - video-tracklist.txt) в формате: <время начала трека>РАЗДЕЛИТЕЛЬ<время окончания трека>РАЗДЕЛИТЕЛЬ<исполнитель>РАЗДЕЛИТЕЛ РАЗДЕЛИТЕЛЬ - единичный символ (что в голову взбредет, опробовано "%" и "=") <время...> - в виде HH:MM:SS исполнитель и название - цЫферки, русские и не только буковки, могут содержать пробелы и прочие радости жизни для делания этой самой жизни яркой, насыщенной и интересной. необходимо нарезать из исходного файла треки, в соответствии с указаниями из video-tracklist.txt. Пытаюсь резать вот таким скриптом: #!/bin/bash # read track list from txt-file and # cut full media-file into tracks BADARGS=65 if [ $# != 1 ]; then echo "Usage: $0 Первый трек вырезается, как надо, на втором скрипт падает со следующим выводом: :09:32 00:20:51 02 - Администрация и Мотогвардия Приветственное слово date: неверная дата «:09:32» /home/mshurutov/bin/mktracks.sh: line 34: 1373314851 - : ошибка синтаксиса: ожидается операнд (error token is "- ") при это, если вместо $CMD $FROMTO "$filename" просто вывести на куда-нибудь сформированную команду, т.е. вставить строку echo "$CMD $FROMTO \"$filename\"" >> tracks.sh а потом запустить полученный tracks.sh, то все работает нормально. mencoder - кодирует. Только вот весьма своеобразно, поэтому и хочется ffmpeg. игра с кавычками в имени файла, eval с фигурными и круглыми скобками никакого эффекта не дает. УПД01. Решение, посказано товарищем ffmpeg-у нужно скормить ключик -nostdin. УПД02. Хотя есть еще странность. Если одним циклом набить 3 массива:
tn=0
while IFS=$'=' read -r -a track
do
echo ${track[0]}
echo ${track[1]}
echo ${track[2]}
echo ${track[3]}
tstart[$tn]=${track[0]}
tstop[$tn]=$((`date +%s -d "${track[1]}"` - `date +%s -d "${track[0]}"`))
filename[$tn]="${track[2]} - ${track[3]}.mp4"
done < $tracklistа другим циклом - резать, то результат будет аналогичный использованию ffmpeg без -nostdin хотя в таком случае ffmpeg уже не может запороть stdin, который уже как бы вроже бы прочитан. Непонятно это. |
||||||||||||||