ffmpeg — Конвертируйте файлы, но сохраняйте ту же дату изменения, что и оригинал?

#powershell #date #ffmpeg

Вопрос:

Поэтому я хочу начать с этого ffmpeg, и powershell на самом деле не является моей сильной стороной, но я использовал следующую команду powershell для преобразования каждого .файл flac в определенном каталоге в файл 320K.

 dir *.flac | foreach {ffmpeg -i $_.FullName -c:v copy  -b:a 320k  $_.FullName.Replace('flac', 'mp3')}
 

Это работает именно так, как я хочу, без перекодирования обложек альбомов, но я хочу включить способ, чтобы создаваемые новые файлы .mp3 имели ОДИНАКОВОЕ значение ИЗМЕНЕНИЯ ДАТЫ .файлы flac. Возможно ли вообще что-то подобное?

 audio_ex.flac = Date Modification: 1/1/2010
audio_ex.mp3 = Date Modification: 9/8/2021
 

должно быть, вместо этого

 audio_ex.flac = Date Modification: 1/1/2010
audio_ex.mp3 = Date Modification: 1/1/2010
 

У меня есть папка с 6 тысячами файлов, и я хочу, чтобы каждая исходная дата была изменена в соответствии с вновь созданными файлами, поэтому, если я смогу выполнить вышеуказанную команду, а также сопоставить дату и время в течение одного выполнения, это было бы идеально.

Я думал о том, чтобы вручную изменять каждый мод файлов с помощью сторонних инструментов, но это займет слишком много времени.

Комментарии:

1. Вы можете полностью исключить ffmpeg из этого вопроса, потому что это чисто вопрос powershell. ffmpeg не может установить дату изменения. Это на уровне операционной системы.

Ответ №1:

Попробуйте выполнить следующее (обратите внимание, что псевдонимы были расширены до их базовых имен командлетов).:

 Get-ChildItem -Filter *.flac | ForEach-Object {
  $outFile = $_.FullName -replace '.flac



, '.mp3'
ffmpeg -i $_.FullName -c:v copy -b:a 320k $outFile
(Get-Item -LiteralPath $outFile).LastWriteTime = $_.LastWriteTime
}