1 votes

Définir le programme par défaut en fonction de la durée du fichier

Existe-t-il un moyen de définir les programmes par défaut en fonction de la durée du média dans Windows 10 ? Par exemple, ouvrir les fichiers audio (.wav, .mp3, ...) de moins de 20 secondes avec Winamp et les autres avec MusicBee.

0voto

Kalamalka Kid Points 1547

Bien que vous ne puissiez pas modifier l'association par défaut des applications en fonction de la durée des fichiers multimédias, il existe plusieurs possibilités que vous pouvez envisager d'explorer :

  1. triez vos médias en utilisant la colonne "durée" dans l'explorateur, puis créez manuellement des listes de lecture avec chaque lecteur multimédia en fonction de sa durée.
  2. écrire un script qui trierait vos médias et ferait une liste de lecture basée sur la durée. Cet article montre quelques façons créatives dont les métadonnées (y compris la durée) peuvent être utilisées dans les scripts.

Ces deux méthodes exigent toutefois que vous mettiez à jour les listes de lecture lorsque de nouveaux médias sont ajoutés aux bibliothèques. Bien que ce ne soit pas exactement ce que vous avez demandé, je pense que c'est une excellente question qui pourrait donner lieu à de nombreux résultats créatifs. Bonne chance !

0voto

HeartOfGermany Points 115

Il n'y a qu'une seule façon de l'archiver : Changer le format .mp3 à .mp3l .mp3s pour le MP3 long et le MP3 court. Vous pouvez alors attribuer à chaque extension de fichier son propre logiciel, ce qui résoudrait votre problème.

Cela peut être archivé avec batch et ffprobe.exe. Vous pouvez trouver ffprobe.exe inclus dans les outils codecs ffmpeg.

Il suffit de lire chaque durée et de changer la fin du fichier. .mp3 aux terminaisons individuelles. Puis assignez des programmes individuels pour le faire.

Je ne donnerai pas de code prêt à l'emploi, mais j'ai récemment écrit un puissant outil de conversion musicale, et je peux donc vous donner des extraits utiles. Merci de ne les utiliser qu'à titre privé.

@ECHO OFF
SETLOCAL EnableDelayedExpansion
cls

                REM ### Configuration ###

set LogEnabled=1&&      REM    1 = Save reports to log.txt  | 0 = Save no logfile
set ResetLog=1&&        REM    1 = Delete old log       | 0 = Continue in old log

                REM ### Initialisation ###

IF !LogEnabled! == 1 (
    ECHO Logging is enabled
) ELSE (
    ECHO Logging is disabled
)

set @InPath=%~dp0input\&&   REM defining input path
set @OutPath=%~dp0output\&& REM defining input path
set @RootPath=%~dp0&&       REM defining batch path
set @InDrive=%~d0\&&        REM defing current drive letter

SETLOCAL EnableDelayedExpansion
cd /D "%@InPath%\"

if !ResetLog! == 1 (
    del /F /Q "!@RootPath!log.txt"
)

set timestamp=!DATE:/=-!_!TIME::=-!
set timestamp=!timestamp: =!
set timestamp=!timestamp:-=:!
set timestamp=!timestamp:_= - !
IF !LogEnabled! == 1 (
    ECHO # !timestamp! # Starting conversion >>"%RootPath%..\log.txt"
)

                REM ### Read all listed audio files ###
for /F "usebackq tokens=*" %%Z in ("!@RootPath!aformats.cfg") do (
(
    for /r %%a in (*.%%Z) do (

set @InPath=%~dp0input\&&   REM defining input path
set @OutPath=%~dp0output\&& REM defining input path
set @RootPath=%~dp0&&       REM defining batch path
set @InDrive=%~d0\&&        REM defing current drive letter

SETLOCAL EnableDelayedExpansion

set FileLoc=%%~dpa%%~nxa

set FileLocRel=%%~dpa%%~nxa
set FileLocRel=!FileLocRel:%@InPath%=!

set OutLocRel=%%~dpa%%~nxa
set OutLocRel=!OutLocRel:%@InPath%=!
set OutLoc=%@RootPath%output\!OutLocRel!

for %%F in ("!FileLoc!") do (
    set FileName=%%~nxF
    set ShortFileName=%%~nF
    ECHO FILENAAAAAME: !ShortFileName!
    call set OutDir=%%OutLoc:!FileName!=%%
    call set OutLoc=%%OutLoc:!FileName!=%%!!ShortFileName!.mp3
)

ECHO Now processing: !FileLocRel!...
set timestamp=!DATE:/=-!_!TIME::=-!
set timestamp=!timestamp: =!
set timestamp=!timestamp:-=:!
set timestamp=!timestamp:_= - !
IF !LogEnabled! == 1 (
    ECHO # !timestamp! # Now processing: !FileLocRel!... >>"%RootPath%..\log.txt"
)

"%@RootPath%bin\ffprobe.exe" -i "!FileLoc!" -show_entries format=duration -v quiet -of csv="p=0" >>..\length.temp&&     REM reading length value into a temp file for later access

"%@RootPath%bin\ffprobe.exe" -i "!FileLoc!" -show_entries format=size -v quiet -of csv="p=0" >>..\size.temp&&       REM reading size value into a temp file for later access
            REM these are required to calculate the output bitrate

set length=0&&      REM Resetting length (in case of corrupted file)
set size=0&&        REM Resetting size (in case of corrupted file)

for /F "tokens=*" %%T in ('type "!@RootPath!length.temp"') do (
set length=%%T
)&&         REM Reading length from file as a value

for /F "tokens=*" %%S in ('type "!@RootPath!size.temp"') do (
set size=%%S
)&&         REM Reading size from file as a value

            REM Check, if detected file has size and duration - if not, is invalid

set SeemsInvalid=0
IF !size! GTR 0 (
    Echo donothing>>nul
) ELSE (
    set SeemsInvalid=1
)

IF !length! GTR 0 (
    Echo donothing>>nul
) ELSE (
    set SeemsInvalid=1
)

set timestamp=!DATE:/=-!_!TIME::=-!
set timestamp=!timestamp: =!
set timestamp=!timestamp:-=:!
set timestamp=!timestamp:_= - !
IF !SeemsInvalid! EQU 1 (
    Echo !FileLocRel! seems to be corrupted or invalid. Ignoring file...
    IF !LogEnabled! == 1 (
        Echo # !timestamp! # Error: !FileLocRel! seems to be corrupted or invalid. Ignoring file... >>"%RootPath%..\log.txt"
    )
)

        REM     Check if Output subdirectories exist. If not, create them.

IF EXIST "!OutDir!" (
    ECHO DONOTHING>>nul
) ELSE (
    MKDIR "!OutDir!"
)

IF !SeemsInvalid! == 0 (
    SET /A InBitrate=size*6
    SET /A InBitrate=InBitrate/length

    IF InBitrate GTR 320000 (
        set InBitrate=320000
    )

    set BitRate=128000
    set timestamp=!DATE:/=-!_!TIME::=-!
    set timestamp=!timestamp: =!
    set timestamp=!timestamp:-=:!
    set timestamp=!timestamp:_= - !
    ECHO # !timestamp! # "%@RootPath%bin\ffmpeg.exe" -n -i "!FileLoc!" -codec:a libmp3lame -b:a !InBitrate! -o "!OutLoc!" >>"%RootPath%..\log.txt"
    "%@RootPath%bin\ffmpeg.exe" -n -i "!FileLoc!" -codec:a libmp3lame -b:a !InBitrate! "!OutLoc!"
)

del /F /Q "!@RootPath!length.temp"&&        REM Cleaning up temp files for next loop
del /F /Q "!@RootPath!size.temp"&&      REM Cleaning up temp files for next loop
)
)
)

L'explosion : Ce fichier batch était dans le même dossier que les fichiers suivants :

  • batchfile.bat
  • aformats.cfg (une liste de formats d'entrée, par exemple : MP3 M4A WMA et ainsi de suite. Un format/fin de fichier par ligne)
  • entrée (entrée de n'importe quel dossier. Cela reconstruira la même hirarchie de dossiers ! !! Donc pas de soucis pour les arborescences de dossiers complexes, elles restent inchangées) output (ici tous les fichiers sont encodés aussi avec la même structure de dossiers que précédemment [seulement MP3])
  • bin \ffmpeg.exe (toutes les DLLs emballées dans l'exe dans ce cas)
  • bin \ffprobe.exe (toutes les DLLs emballées dans l'exe dans ce cas)

Ce code ré-encode simplement chaque format listé dans aformats.cfg en MP3 avec un bitrate légèrement plus élevé. Le débit cible est approximé par la durée et la taille, toutes deux lues par ffprobe.exe.

Il suffit de regarder cette partie du code, comment j'ai réussi à l'archiver. Cela peut facilement être réécrit, pas pour réencoder les fichiers, juste pour renommer le nom de fichier.mp3 en nom de fichier.mp3l, si c'est un long MP3 par exemple. Vous pouvez changer les formats ou autre. Hautement personnalisable. Juste au-dessus des lignes, qui lisent la taille et la longueur, il y a aussi du code que j'utilise, pour modifier les chemins et les noms de fichiers, qui doit être changé pour votre cas d'utilisation désiré.

Rappelez-vous : Ce code est libre d'utilisation pour un usage privé uniquement. Veuillez respecter le fait que cela a nécessité une tonne de travail (de nombreuses heures de tests, de débogage, etc.).

Veuillez également me faire savoir, si vous avez compris, ce qu'il faut faire pour archiver votre objectif.

N'oubliez pas : le fichier .mp3l ne sera pas lisible par les lecteurs de musique. Donc si cela est nécessaire, vous devez créer une copie de ce fichier batch et le modifier pour qu'il fonctionne dans l'autre sens. Ajoutez les lignes à aformats.cfg :

  • MP3L
  • MP3S
  • Quelle que soit l'extension de fichier que vous avez utilisée.

Et la sortie devrait être MP3 pour mon exemple ici. Seule votre fantaisie limite ce que vous pourriez réécrire pour faire. Il enregistre également certaines choses de base dans le fichier log.txt avec l'horodatage. Rappelez-vous : Changez le code, pour ne pas encoder les fichiers, juste pour les renommer. Je recommande d'utiliser MP3L pour VLC par exemple, car il ne se soucie pas beaucoup de l'extension du fichier - d'autres lecteurs le feraient probablement. Vous pouvez également utiliser l'extension .mkv ou une extension similaire, qui prend en charge les MP3 et peut être lue par de nombreux programmes standard.

Cet outil est TRES puissant ! Vous pouvez déplacer un disque dur entier dans un autre disque dur. \input et appuyez sur le fichier batch. Il passera tout en boucle ! Si des caractères spéciaux sont nécessaires, vous devez modifier l'encodage des lettres du fichier .bat. Il supportera alors des signes comme Ä Ö Ü et ainsi de suite. Je n'ai tout simplement pas aimé les MP3 trash.

J'aimerais être remercié.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X