He estado buscando durante un tiempo una forma de comenzar a empaquetar flujos de bytes de imágenes en archivos HEIF, ya que macOS High Sierra e iOS 11 ya están disponibles. No he tenido mucha suerte, solo un gran número de personas convirtiendo archivos .heic a .jpg, y el visor Nokia JS en GitHub
Para empezar, no estoy buscando convertir mi biblioteca de fotos existente en archivos .heic codificados en HEVC, hay rendimientos decrecientes allí, ya que ya están jpegged y han perdido calidad con respecto al original. Entonces, esta pregunta no es un duplicado de la pregunta " Convertir toda la biblioteca al nuevo formato .HEIC ".
Mi meta:
Tome un flujo de bytes mpeg y un flujo de bytes PNG o JPG y empáquelos en un archivo .heic
Tome varios flujos de bytes PNG y/o JPG y cree un archivo .heic de ellos (como una serie de fotos en ráfaga)
HEIF es solo un contenedor, por lo que, si bien fue diseñado para el uso de HEVC, admite otros tipos de datos como jpg, png, prácticamente cualquier cosa que admitan las aplicaciones de visualización en sus formatos de archivo nativos.
Simplemente no he podido encontrar ningún software que me permita hacerlo. Todo lo que busco que tenga que ver con HEIF o HEIC en el término simplemente me llena de titulares de noticias tecnológicas sobre Apple tratando de reemplazar jpeg, y personas que convierten sus archivos .heic una vez que se importan de su computadora (lo que parece que tomaría un esfuerzo hacerlo dado que iOS los convertirá por defecto si intenta importarlos o compartirlos en cualquier lugar, no puede confirmar explícitamente que el extremo de alcance los admita...)
Así que espero que alguien aquí sepa un par de cosas y pueda indicarme la dirección correcta al menos.
No soy adverso a las herramientas de línea de comandos, o incluso a hacer algo de desarrollo yo mismo si puedo señalar una biblioteca que puedo importar a una aplicación Swift (soy un desarrollador tardío en programación, y aunque podría decir lo mismo para Javascript , si tuviera que crear una aplicación alrededor de una biblioteca para hacer este trabajo, preferiría usar Swift que usar un lenguaje de secuencias de comandos)
¡Así que espero que alguien haya pensado lo mismo y haya tenido más suerte que yo al encontrar esto! :)
Edición 1, 10 de noviembre:
Encontré un sitio de un tipo llamado Ben Gotow que habla sobre convertir archivos JPEG existentes en flujos de bits HEVC y luego colocarlos en un contenedor .heic o .heif. Está cerca, pero no había podido encontrar muchos detalles para hacer más que eso. No estoy agregando esto como una respuesta, solo como una edición, ya que es relevante pero en realidad no logra mi objetivo. ¡Espero que cualquier otra persona que encuentre esta pregunta encuentre útil su sitio!
jpgtoheif.com
Este uso de GPAC puede acercarse a los objetivos que desea:
¿Qué es GPAC?
GPAC es un marco multimedia de código abierto. ¡GPAC se utiliza con fines académicos y de investigación y más allá a través de colaboraciones industriales! El proyecto cubre diferentes aspectos de multimedia, con un enfoque en tecnologías de presentación (gráficos, animación e interactividad) y en formatos de empaque multimedia como MP4.
Más detalles:
¡Un poco más de investigación y una respuesta aquí proporciona el camino! Necesitamos varias cosas instaladas, idealmente con homebrew:
x265 y GPACbrew install x265 gpac
FFmpeg con soporte x265
brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libass --with-libquvi --with-libvorbis --with-libvpx --with-opus --with-x265
Ahora que tiene las herramientas, pruebe un script como este para convertir imágenes en una carpeta a HEIF/HEIC:
for F in *.jpg *.png *.tif *.tiff; \
do ffmpeg -i "$F" -crf 23 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -preset slower -pix_fmt yuv420p -f hevc "${F%.*}.hvc" && \
MP4Box -add-image "${F%.*}.hvc" -ab heic -new "${F%.*}.heic" && \
rm "${F%.*}.hvc";
done;
Lo probé con una carpeta de imágenes y funciona. Convierte imágenes con dimensiones impares en dimensiones pares, por ejemplo, pero además de algunas advertencias, funciona.
convert
el formato básico para pasar de un formato a otro.Sé que este es un hilo antiguo, pero publico mis dos centavos que en 2020 es mucho más fácil convertir imágenes a HEIC en masa hoy en día que en el pasado.
El primer paso es instalar ImageMagick y ExifTool a través de Homebrew de esta manera:
brew install imagemagick exiftool
Una vez que haya instalado ImageMagick, la conversión a HEIC es tan simple como esto:
convert image.jpg image.heic
¡Eso es todo! ImageMagick convierte archivos de un formato a otro según la extensión del archivo de destino. Y todos los metadatos del archivo de origen se transfieren limpiamente del archivo antiguo al archivo nuevo mediante el uso de ExifTool después de que se haya realizado la conversión de la imagen.
Entonces, en este ejemplo, solo nombrar el archivo de destino image.heic
es suficiente para generar un archivo HEIC a partir del archivo de origen image.jpg
.
Pero como tuve que convertir en masa algunos directorios llenos de imágenes, escribí este sencillo script Bash que busca en un directorio imágenes JPG, PNG y TIFF y luego las ejecuta a través de ImageMagick y guarda un archivo HEIC con el mismo nombre de archivo en el mismo directorio.
Simplemente tome este script y cámbielo /path/to/images
para que coincida con su directorio de origen y ¡ya está todo listo!
find -E '/path/to/images' -type f -iregex '.*\.(JPG|JPEG|PNG|TIF|TIFF)$' |\
while read full_image_path
do
path_sans_extension="${full_image_path%.*}"
convert "${full_image_path}" "${path_sans_extension}".heic
exiftool -overwrite_original_in_place -tagsFromFile "${full_image_path}" "${path_sans_extension}".heic
done
Lado lejano
FreelancerJ