perl
может сделать это с синтаксисом, аналогичным синтаксису sed
, но позволяя прямую оценку индекса замены, например
perl -pe 's/>text_.*/sprintf "text_%d", ++$n/pe' file
См. Также Замените строку последовательным индексом .
Однако, поскольку в вашем случае текст уже пронумерован, проще просто обрезать ненужную часть, захватив и заменив ее - например,
sed -E 's/(>text_[0-9]{1,}).*/\1/' file
Я нашел эту тему, когда писал графический интерфейс FFplay в Lazarus/FPC. Он уже мог воспроизводить выпадающий список файлов и переходить к следующему/предыдущему файлу, но мне приходилось каждый раз убивать процесс ffmpeg и создавать новый. Я пытался добавить возможность воспроизведения всего списка файлов. Самый простой обходной путь, который я нашел на данный момент, это, конечно, использование -autoexit, и создание файла плейлиста с помощью этого кода Pascal:
begin
AssignFile(tfOut, C_FNAME);
try
rewrite(tfOut);
for i:= 0 to Fichiers.Items.Count - 1 do
if Fichiers.Selected[i] then
begin
writeln(tfOut, 'file ' + #39 + conv(Fichiers.Items[i]) + #39)
end;
CloseFile(tfOut);
except
on E: EInOutError do
ShowMessage ('File error')
end;
end;
Затем чтение его таким образом:
'ffplay -f concat -safe 0 -i flist.txt -autoexit'
что является тем же синтаксисом, который я использую для конкатенации файлов в FFMPeg.
Теперь я ищу правильный способ добавить задержку, если файлы являются файлами изображений...
.ffplay
может использовать демультиплексор concat, аналогичный ffmpeg
.
Создайте файл со списком файлов, которые вы хотите воспроизвести:
# list.txt
file 'audiofileA.mp3'
file 'audiofileB.mp3'
Затем запустите ffplay:
ffplay -f concat -i list.txt
Другие полезные опции:
-autoexit
, чтобы выйти, когда это будет сделано -loop 0
для бесконечного цикла (нажмите q для выхода ). -save 0
, если пути к файлам являются абсолютными. Подробнее см. вики ffmpeg о демультиплексоре concat .