(Lote) convertendo um vídeo enquanto mantém o registro de data / hora original / data de criação

3

Eu preciso de uma maneira fácil de converter vídeos para h264, mantendo a data de criação original.

Agora mesmo estou fazendo isso manualmente (codifique e edite a data), mas é uma tarefa muito chata de fazer quando eu tenho mais de 10 vídeos.

Existe uma maneira de fazer isso automaticamente?

Um programa de conversão com a opção "manter data original do arquivo", um lote, um script: estou aberto a qualquer solução em qualquer sistema operacional.

    
por Magnetic_dud 03.10.2012 / 12:39

5 respostas

3

TESTE Copie seu diretório de vídeo para um novo diretório e siga as instruções abaixo.

Script do PowerShell

O PowerShell vem com o Windows 7, não é necessário fazer download. (Iniciar- > Todos os Programas- > Acessórios- > Windows PowerShell).

Inicie o PowerShell como administrador.

Você precisa fazer o seguinte pela primeira vez antes de executar qualquer script (você só precisa fazer isso uma vez)

Set-ExecutionPolicy RemoteSigned

Responda "Y".

Coloque 2 scripts no seu diretório de vídeo. Abra o PowerShell e o cd no seu diretório de vídeo. .ps1 é a extensão de script do PowerShell.

SaveTime.ps1 (antes da conversão de vídeo)

Salve o seguinte script como SaveTime.ps1 no diretório de vídeos. Execute este script no PowerShell antes da sua conversão de vídeo.

O script criará OldTime-record.ps1 no mesmo diretório.

O script NÃO VAI SUBSTITUIR OldTime-record.ps1 . Ele só será anexado ao final se o arquivo já existir.

Portanto, não se preocupe se você executá-lo por acidente e perder seu carimbo de hora original. Basta usar o bloco de notas para remover as linhas extras. Eu adicionei um exemplo dessa situação no final.

# SaveTime.ps1 - Start 
$file = get-item *

write-output "'$file = New-Object string'['] $($file.count)" >> OldTime-record.ps1
write-output "'$time = New-Object string'['] $($file.count)" >> OldTime-record.ps1

$time = New-Object string[] $file.count

for ($i = 0; $i -lt $file.count; $i++) {
    write-output "'$file'[$i']=''$($file[$i].fullname)''" >> OldTime-record.ps1
    write-output "'$time'[$i']=''$($file[$i].CreationTimeUTC.tostring('o'))''" >> OldTime-record.ps1
}
# SaveTime.ps1 - End

OldTime.ps1 (após conversão de vídeo)

Salve o seguinte script como OldTime.ps1 no diretório de vídeos. Execute este script no PowerShell após a conversão de vídeo. Esse script lerá OldTime-record.ps1 e alterará o tempo de criação do arquivo de acordo.

# OldTime.ps1 - Start
. .\OldTime-record.ps1

for($i = 0; $i -lt $file.count; $i++) {
    write-output "$($file[$i])"
    write-output "$($time[$i])"
    Set-ItemProperty -Path $($file[$i]) -Name CreationTimeUTC -Value $($time[$i])
}
# OldTime.ps1 - End

Oldtime-record.ps1

Este arquivo armazena o nome do arquivo e os registros de tempo de criação. A seguir, mostra o que parece se você abri-lo no bloco de notas.

$file = New-Object string[] 9
$time = New-Object string[] 9
$file[0]='E:\Downloads\test\New Folder'
$time[0]='2012-11-13T03:11:11.4504830Z'
$file[1]='E:\Downloads\test\file1'
$time[1]='2012-11-10T01:12:14.6126918Z'
$file[2]='E:\Downloads\test\file2'
$time[2]='2012-11-10T01:12:14.6646918Z'
$file[3]='E:\Downloads\test\file3'
$time[3]='2012-11-10T01:12:14.7276918Z'
$file[4]='E:\Downloads\test\cover.jpg'
$time[4]='2012-11-10T01:12:14.7886918Z'
$file[5]='E:\Downloads\test\OldTime.ps1'
$time[5]='2012-11-13T05:22:18.2124830Z'
$file[6]='E:\Downloads\test\SaveTime.ps1'
$time[6]='2012-11-13T05:44:22.8514830Z'
$file[7]='E:\Downloads\test\test.ps1'
$time[7]='2012-11-13T03:26:28.7084830Z'
$file[8]='E:\Downloads\test\test.time.ps1'
$time[8]='2012-11-13T05:32:51.8204830Z'

A seguir, o que acontece se você executar SaveTime.ps1 por acidente. Apenas acrescenta os novos registros no final. Para corrigi-lo, basta apagar todas as linhas a partir da segunda ocorrência de $ file = New-Object string [] .

$file = New-Object string[] 9
$time = New-Object string[] 9
$file[0]='E:\Downloads\test\New Folder'
$time[0]='2012-11-13T03:11:11.4504830Z'
$file[1]='E:\Downloads\test\file1'
$time[1]='2012-11-10T01:12:14.6126918Z'
$file[2]='E:\Downloads\test\file2'
$time[2]='2012-11-10T01:12:14.6646918Z'
$file[3]='E:\Downloads\test\file3'
$time[3]='2012-11-10T01:12:14.7276918Z'
$file[4]='E:\Downloads\test\cover.jpg'
$time[4]='2012-11-10T01:12:14.7886918Z'
$file[5]='E:\Downloads\test\OldTime.ps1'
$time[5]='2012-11-13T05:22:18.2124830Z'
$file[6]='E:\Downloads\test\SaveTime.ps1'
$time[6]='2012-11-13T05:44:22.8514830Z'
$file[7]='E:\Downloads\test\test.ps1'
$time[7]='2012-11-13T03:26:28.7084830Z'
$file[8]='E:\Downloads\test\test.time.ps1'
$time[8]='2012-11-13T05:32:51.8204830Z'
$file = New-Object string[] 11
$time = New-Object string[] 11
$file[0]='E:\Downloads\test\New Folder'
$time[0]='2012-11-13T03:11:11.4504830Z'
$file[1]='E:\Downloads\test\file1'
$time[1]='2012-11-10T01:12:14.6126918Z'
$file[2]='E:\Downloads\test\file2'
$time[2]='2012-11-10T01:12:14.6646918Z'
$file[3]='E:\Downloads\test\file3'
$time[3]='2012-11-10T01:12:14.7276918Z'
$file[4]='E:\Downloads\test\cover.jpg'
$time[4]='2012-11-10T01:12:14.7886918Z'
$file[5]='E:\Downloads\test\new  3.txt'
$time[5]='2012-11-13T06:47:05.4784830Z'
$file[6]='E:\Downloads\test\OldTime-record.ps1'
$time[6]='2012-11-13T05:50:11.7044830Z'
$file[7]='E:\Downloads\test\OldTime.ps1'
$time[7]='2012-11-13T05:22:18.2124830Z'
$file[8]='E:\Downloads\test\SaveTime.ps1'
$time[8]='2012-11-13T05:44:22.8514830Z'
$file[9]='E:\Downloads\test\test.ps1'
$time[9]='2012-11-13T03:26:28.7084830Z'
$file[10]='E:\Downloads\test\test.time.ps1'
$time[10]='2012-11-13T05:32:51.8204830Z'
    
por 13.11.2012 / 07:53
2

Outra solução para o Windows que acabei de encontrar para aqueles que não querem ter que lidar com uma tonelada de scripts:

Converter e preservar a data

Depois de baixá-lo, o próprio programa está localizado em MultipleAviConvDatePreserve \ bin \ Release \ MultipleAviConvDatePreserve.exe

E você pode usá-lo com qualquer conversor que permita a linha de comando (como o handbrake). Não é o programa mais fácil de usar, mas mais fácil que a solução publicada.

Como tive dificuldade em fazer o programa funcionar sozinho, achei que algumas orientações específicas sobre como usar o programa podem ser úteis.

Abra o Handbrake (ou algum codificador de vídeo habilitado para linha de comando) e configure um arquivo para codificação como faria normalmente (com todas as preferências quer) e, em seguida, adicioná-lo à fila. Em seguida, abra a fila e clique no botão "Fila" e "Gerar roteiro em lote", conforme mostrado na captura de tela abaixo:
Emseguida,abraoscriptemlotenoblocodenotasecopieoconteúdo(vamosusá-lomaistarde).Emseguida,abraoarquivoMultipleAviConvDatePreserve.exeEcliquenobotão"Set SCRIPT"
Emseguida,coleoconteúdodoscriptemlotegeradopeloHandbrakenacaixadetextodoscript,massubstituaaorigemeodestinonoscriptpara%sourcee%dest:
Não consegui executar o RunAsDate.exe, mas você pode testá-lo - supostamente faz com que a data do sistema não precise ser alterada. Depois disso, clique em OK e retorne à janela principal. Em seguida, clique no botão "Select DIR" e escolha o diretório com os arquivos de vídeo que você deseja converter, preservando a data de criação original. Em seguida, insira a extensão de arquivo EXACT (sensível a maiúsculas e minúsculas) para a origem no botão de opção "source Extension", após o qual você verá alguns arquivos na lista (se você não vir nenhum arquivo, a extensão estará errada). Em seguida, selecione os arquivos que você deseja converter (selecione-os todos clicando no primeiro e, em seguida, clicando no último arquivo). Em seguida, pressione "GO!" e tudo deve ser autoexplicativo a partir daí.

    
por 01.12.2012 / 15:14
1

No Windows com o Powershell ativado, você pode usar este script .BAT para converter recursivamente todos os arquivos .AVI e .MP4 na árvore de pastas atual. Supondo que você esteja codificando com o ffmpeg no prompt do FF com os mesmos parâmetros; De qualquer forma, sinta-se à vontade para editar o comando de codificação na linha seguinte à última. Observe o uso de variáveis% 1 e% 2 para armazenar os nomes de cada arquivo original (por exemplo, "name.ext") e convertido (por exemplo, "name_.ext").

FOR /r %%I in (*.avi, *.mp4) DO CALL :loopbody "%%~fI" "%%~dpnI_%%~xI" "%%~tI"
GOTO :EOF

:loopbody
   ffmpeg -i %1 -c:v libx264 -crf 18 -maxrate 4000k -bufsize 4000k -c:a libvo_aacenc -q:a 100 -map_metadata 0 -preset veryslow -tune film -movflags +faststart %2
   powershell Set-ItemProperty -LiteralPath '%2' -Name CreationTimeUtc -Value ('%3' -as [Datetime])
    
por 19.08.2014 / 03:47
0

Você disse "data de criação". Se a "data de modificação" for boa o suficiente para você, continue lendo:

Você não disse qual sistema operacional está usando. Se é * nix, use o comando touch :

touch –r old_file new_file ...

define a data / hora de modificação de new_file como sendo igual a old_file 's.

Isso está disponível em alguns pacotes de emulação Unix, como o Subsystem for UNIX-based Applications (SUA). ISTR este é um download gratuito da Microsoft.

    
por 03.10.2012 / 17:26
0

Qual sistema operacional? Existem utilitários de toque (tanto na linha de comando quanto na GUI) que permitem modificar a criação, modificação e data de acesso dos seus arquivos.

Por exemplo, aqui está uma para o Windows ( BulkFileChanger ):

    
por 03.10.2012 / 19:01