LINUX.ORG.RU
ФорумAdmin

Переименовать часть файла после конвертации

 , , ,


1

2

Приветствую.

Для конвертации новомодных *.HEIC фотографий с iPhone использую tifig — https://github.com/monostream/tifig

В скрипте это выглядит как:

find -type f -iname '*.heic' -exec tifig -i '{}' -o '{}.JPG' \;

На выходе получаю файлы *.HEIC.JPG

Как убрать из имени итогового файла часть '.HEIC', чтобы на выходе сразу получилось *.JPG? По аналогии с результатом:

sed 's/.HEIC//'

Пробовал использовать 'rename' и 'tr' - что-то не получается.


find -type f -iname '*.heic' -exec tifig -i '{}' -o '{/HEIC//}JPG' \;
anonymous ()

Лол, ты в жопеги конвертишь пока все конвертят жопеги. Лайк дырявым за поддержку актуальных технологий.

anonymous ()

Для конвертации новомодных *.HEIC фотографий с iPhone использую tifig

Слегка не по теме. Велосипед. Неужели нет чего-нибудь попроще, на базе libjpeg & libpng. Ну на крайняк, на базе freeimage. Использование libav* для енкодинга изображений - крутовато.

Deleted ()
Ответ на: комментарий от Deleted

Ты понимаешь, что говоришь? Есть прекрасный webp. Но. VP8 говно и артефачит/смазывает невозможно. Есть замечательный полурабочий BPG, использующий алгоритмы (требующие отчислений) прекрасного h265 (реенкоды сосут по причине лосси-лосси и неаккуратного кодирования). И тут появляется свободный, не требующий отчислений, конкурент h265 в лице AV1. Какие могут быть вопросы?

А все эти энкодеры изображений на базе видеокодеков либо тянут куски медиалиб, либо дёргают их.

anonymous ()
Ответ на: комментарий от Samamy

echo $i|rev|cut -d "." -f 2-|rev

То же, что и с 'sed'. И как совместить с 'find'?

find -type f -iname '*.heic' -exec tifig -i '{}' -o '{/HEIC//}JPG' \;

Нет:

Unknown image extension: {/HEIC//}JPG

Неужели нет чего-нибудь попроще, на базе libjpeg & libpng. Ну на крайняк, на базе freeimage.

Я не нашел.

mexx ()
Ответ на: комментарий от anonymous

Смотря сколько бобла вольют. Сейчас есть большой интерес получить что-то конкурентоспособное H.265.

В порядке справки:

  • H.265-6 лет, практически не получил распространения? очень медленный
  • BPG-5 лет, нет поддержки нигде
  • WEBP-8 лет, ни разу не встречал. но работает норм
  • VP8-11 лет, легасимусор
  • HEIF-4 года (h264 до недавних пор), поддерживается везде кроме линукса
  • AV1-меньше года
  • AVIF-полгода, уже везде поддерживается
anonymous ()
$ F=filename.HEIC; echo ${F%.*}
filename

Думаю, проще всего будет обернуть запуск команды в шел. То есть вместо command parameterssh -c 'command parameters'. Тогда раскрывать выражения будет этот вложенный шел, а не текущий.

i-rinat ★★★★★ ()
Ответ на: комментарий от anonymous

WEBP-8 лет, ни разу не встречал

Встречал в неожиданных местах. Например, Youtube достаточно давно начал отдавать картинки в webp, если по user agent видит, что подключен Chrome. На одном сайте как-то раз картинки отвалились в Chrome, но работали нормально в Firefox, и я тогда узнал, что он тоже отдаёт webp для chrome. В Opera mini картинки — в webp.

То есть, если аккуратно WebP использовать, никто и не заметит.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

Думаю, проще всего будет обернуть запуск команды в шел.

Не совсем верно. Он не может применить никакую команду или оператор shell к списку. Ему надо через pipe разложить список на строки | while read tline; do ...; done и мутить уже с каждой скрокой чо хочет.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от i-rinat

Только там с умом надо, а то доллары и кавычки в именах файлов могут натворить дел.

Типа так:

find -type f -iname '*.heic' -exec sh -c 'tifig -i "$0" -o "${0%.*}.JPG"' {} \;

Но через parallel как я выше написал проще и работает быстрее.

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Типа так:

Хмм. Работает. Забыл про такой способ передачи параметра.

Deleted ()
Ответ на: комментарий от legolegs

через parallel

А с {.} это они хорошо придумали.

i-rinat ★★★★★ ()
Ответ на: комментарий от legolegs

legolegs, благодарю!

{.} — это вообще знатная тема.

Всем спасибо за ответы и желание помочь.

mexx ()
Ответ на: комментарий от legolegs

Типа так:

Через нулевой аргумент как-то неожиданно и вроде нигде не встречал. Обычно так проще понять и запомнить:

find -type f -iname '*.heic' -exec sh -c 'arg="{}"; tifig -i "$arg" -o "${arg%.*}.JPG"' \;

vodz ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от anonymous

Есть прекрасный webp

Не нужен. Как и гугловские хипстеры, которые носятся с ним, как с писанной торбой.

EXL ★★★★★ ()
Ответ на: комментарий от vodz

Нет, плохой метод.

$ touch 'bad $file name'

$ find bad\ \$file\ name -exec sh -c 'echo _"$0"_' {} \;
_bad $file name_

$ find bad\ \$file\ name -exec sh -c 'arg="{}"; echo _"$arg"_' {} \;
_bad  name_
legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 2)

rename из util-linux нужно брать (в Debian его в rename.ul переименовывают). Им вот так можно:

rename.ul .HEIC "" *.HEIC.JPG

unterwulf ()
Ответ на: комментарий от unterwulf

rename из util-linux нужно брать

Так каждый может. Здесь то задача ставилась - сделать всё и сразу, без постобработки. И решение найдено.

Deleted ()
Ответ на: комментарий от legolegs

Нет, плохой метод.

А, ну да, кавычек явно не хватает. :)

Впрочем, звать по sh на каждый файл - тоже так себе.

vodz ★★★★★ ()
Ответ на: комментарий от vodz

Впрочем, звать по sh на каждый файл - тоже так себе.

Да, каждый раз морщусь, когда так делаю.

Можно делать find .... -exec sh -c 'for i; do ...' + но зачем, если есть parallel :)

legolegs ★★★★★ ()
Ответ на: комментарий от legolegs

но зачем, если есть parallel

Ну судя по всяким {.} оно всё равно не содержит полноценное parametr expansion и чуть сложнее — можно и на одном bash всё написать, вроде уже приводил тут простенький parallel на bash.

vodz ★★★★★ ()
Ответ на: комментарий от vodz

Судя по манам там куча видов всяких {} включая вариант с перлом внутри.

legolegs ★★★★★ ()
Ответ на: комментарий от EXL

Кому не нужен, а кому и 60% места на диске сохранил. Можно больше и лучше, только не с vp8.

anonymous ()

Разложи части имени файла по переменным и меняй одну из них, делов-то.

IPR ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.