Я могу только догадываться, почему они поддерживают только свойства: возможно, потому, что, как представляется, универсальное соглашение в платформе .NET никогда не выставляет изменчивые поля (, вероятно, для защиты бинарной совместимости ), и они каким-то образом ожидал, что все программисты будут следовать одному и тому же соглашению.
Кроме того, хотя поля и свойства доступны с одним и тем же синтаксисом, привязка данных использует отражение, и (поэтому я слышал) отражение должно использоваться по-разному для полей доступа чем для доступа к свойствам.
Вот то, что я просто использовал:
ffmpeg -i input.mkv -ss 00:01:00 -to 00:02:00 -c:v copy -c:a copy output.mp4
Сгенерированный mp4 файл мог также использоваться в iMovie
.
Даже при том, что я - 6 лет поздно, но я думаю, что все ответы выше правильно не рассматривали вопрос , @kalai спрашивает. Сценарий удара ниже обработает текстовый файл в следующем формате:
URL | start_time | end_time | filename
, например
https://www.youtube.com/watch?v=iUDURCrvrMI|00:02:02|00:03:41|1
и цикл через файл, загружает файл, который youtube-dl
поддержки, вычисляя продолжительность между start_time
и end_time
и передавая его ffmpeg
, с тех пор -t
является на самом деле продолжительность , не реальное end_time
Подброшен ударом меня, если у Вас есть какой-либо вопрос.
for i in $(<video.txt);
do
URL=`echo $i | cut -d "|" -f 1`;
START=`echo $i | cut -d "|" -f 2`;
END=`echo $i | cut -d "|" -f 3`;
FILE=`echo $i | cut -d "|" -f 4`;
SEC1=`echo $START | sed 's/^/((/; s/:/)*60+/g' | bc`
SEC2=`echo $END | sed 's/^/((/; s/:/)*60+/g' | bc`
DIFFSEC=`expr ${SEC2} - ${SEC1}`
ffmpeg $(youtube-dl -g $URL | sed "s/.*/-ss $START -i &/") -t $DIFFSEC -c copy $FILE".mkv";
ffmpeg -i $FILE".mkv" -f mp3 -ab 192000 -vn $FILE".mp3";
rm $FILE".mkv";
done;