Consolas de texto: buscar una canción y convertirla a otro formato
¿Qué sucede si tenemos un disco rígido atestado de canciones en formato mp3, wav… y queremos reducir el espacio que estas ocupan sin borrarlas? Continuamos viendo cómo resolver problemas a través de la consola de textos en GNU/Linux.
Hemos visto Un "Robot" que lee las noticias de MasterMagazine en voz alta desde una consola de textos, Ejemplos de comandos en consolas de texto: manejando The Matrix 😛, Consolas de texto: buscar una canción y reproducirla. Ahora veremos cómo buscar una canción y convertirla a otro formato.
La situación no es nada fácil si hay archivos diseminados por todos lados… no sería nada fácil si no contáramos con la consola de texto:
En un principio, deberíamos poder discriminar qué archivos wav o mp3 pertenecen a juegos, otros programas (y por lo tanto si los convertimos a otro formato y/o los borramos, esos programas perderán funcionalidad), y cuáles son archivos de audio que hemos creado nosotros.
En mi caso, no tengo muchos archivos .wav de gran tamaño:
locate "*.wav" | grep -v " " | xargs du -h -c
179M total
(NOTA: el grep -v " " es para evitar el listado de archivos con espacios, lo cual impide a du procesar la salida de locate).
Decía, no son de gran tamaño, pero son unos 2000. Sucede que la inmensa mayoría pertenecen a funciones de programas, como por ejemplo los sonidos de un programa de chat:
24K /usr/share/sounds/gaim/alert.wav
188K /usr/share/sounds/gaim/login.wav
156K /usr/share/sounds/gaim/logout.wav
56K /usr/share/sounds/gaim/receive.wav
Siendo que el comando "du" nos brinda una salida clara indicando si se trata de archivos que pesan menos de 1 MB, mediante la expresión en Kbytes (K), sería sencillo filtrar todos los archivos que pesen menos de un mega, aunque perderíamos algo de precisión, dado que si le decimos al sistema que filtre los resultados que contienen una K no aparecerán resultados con una K mayúscula en el nombre de archivo, pero de todas formas vamos a intentarlo.
locate "*.wav" | grep -v " " | xargs du -h -c | sort -n | grep -v "K"
"sort -n" sirve para ordenar por tamaño, por decirlo así, y grep -v "K" evita todos los archivos menores de un Megabyte, y los que tengan una K mayúscula en su nombre. Encontré 2 archivos interesantes que podría convertir o borrar:
14M /home/reproductormp3-2-nov-2007-fotos/REC45.wav
48M /mnt/hda1/marcos/doc/musix-dev/Musix-incorporar/deb/tm-2007-02-13T00:35:16.wav
He decidido convertir a OGG todos los archivos wav que pesan más de un mega
locate "*.wav" | xargs du -h -c | sort -n | grep -v K | xargs oggenc
oggenc es un comando en consola para códificar (encode) en formato ogg (oggencode, oggenc).
Sólo me restaría borrar los archivos wav filtrados del mismo modo (repito el comando con flecha de teclado hacia arriba, y reemplazo xargs oggenc por xargs rm)
locate "*.wav" | xargs du -h -c | sort -n | grep -v K | xargs rm
Listo. Esto puede parecer complejo, pero tengamos en cuenta que puede solucionar problemas masivos, si tuviéramos, en lugar de 1 o 2 arhivos wav, 3000, y quisiéramos convertirlos a ogg, se complicaría mucho de no contar con esta facilidad.
Por último, aconsejo el comando flac para convertir al formato flac (Free Lossless Audio Codec), dado que comprime sin perder nada de calidad.
locate "*.wav" | xargs du -h -c | sort -n | grep -v K | xargs flac
Por Marcos Guglielmetti, el 09/07/2008.