Вот PHP-скрипт:
<?php
$s_cue = $argv[1];
$a_cue = file($s_cue);
$n_row = -1;
foreach ($a_cue as $s_row) {
$s_trim = trim($s_row);
$a_row = str_getcsv($s_trim, ' ');
if (preg_match('/^FILE\s/', $s_row) == 1) {
$s_file = $a_row[1];
}
if (preg_match('/^\s+TRACK\s/', $s_row) == 1) {
$n_row++;
$a_table[$n_row]['track'] = $a_row[1];
}
if (preg_match('/^\s+TITLE\s/', $s_row) == 1) {
$a_table[$n_row]['title'] = $a_row[1];
}
if (preg_match('/^\s+PERFORMER\s/', $s_row) == 1) {
$a_table[$n_row]['artist'] = $a_row[1];
}
if (preg_match('/^\s+INDEX\s/', $s_row) == 1) {
$s_dur = $a_row[2];
$a_frame = sscanf($s_dur, '%d:%d:%d', $n_min, $n_sec, $n_fra);
$n_index = $n_min * 60 + $n_sec + $n_fra / 75;
$a_table[$n_row]['ss'] = $n_index;
if ($n_row > 0) {
$a_table[$n_row - 1]['to'] = $n_index;
}
}
}
$a_table[$n_row]['to'] = 10 * 60 * 60;
foreach ($a_table as $m_row) {
$a_cmd = [
'ffmpeg',
'-i', $s_file,
'-ss', $m_row['ss'],
'-to', $m_row['to'],
'-metadata', 'artist='. $m_row['artist'],
'-metadata', 'title='. $m_row['title'],
'-metadata', 'track='. $m_row['track'],
$m_row['track']. ' '. $m_row['title']. '.m4a'
];
$a_esc = array_map('escapeshellarg', $a_cmd);
$s_esc = implode(' ', $a_esc);
system($s_esc);
}
Вы можете использовать фильтр:
git config filter.dropSecondLine.clean "sed '2d'"
Отредактируйте/создайте.git/info/attributes и добавьте:
* filter=dropSecondLine
Если вы не хотите, чтобы фильтр действовал на все файлы в репозитории, измените *, чтобы он соответствовал соответствующему шаблону или имени файла.
В результате рабочий каталог останется прежним, но у больших двоичных объектов репо не будет второй строки в файлах. Поэтому, если вы потянете его в другом месте, вторая строка не появится (результат sed 'd2' ). И если вы измените вторую строку вашего файла журнала, вы сможете добавить ее, но не зафиксировать, так как изменение большого двоичного объекта происходит при добавлении, и в этот момент это будет тот же файл, что и в репо.
Вы можете использоватьgit blame
(«Показать, какая ревизия и автор в последний раз изменили каждую строку файла -Аннотирует каждую строку в данном файле информацией из ревизии, которая последней изменила строку. ревизия». )См. также это .
В частности, при использовании опции -L
:
-L <start>,<end>
<start> and <end> are optional. “-L <start>” or “-L <start>,” spans from <start> to end of file. “-L,<end>” spans from start of file to <end>.
Таким образом, вы можете получить лучшее из обоих миров... сохраняя информацию (, которая, возможно, вам на самом деле не нужна )и игнорируя ее, когда захотите.
В остальном, для настройки, кажется, git filter может это сделать. Смотрите ссылки ниже и другой ответ здесь.
https://stackoverflow.com/questions/6557467/can-git-ignore-a-specific-line