El Freni yakalama süresini / oluşturma süresini nasıl koruyabilirim?


14

El freni harika bir video sıkıştırma aracıdır, ancak bir video sıkıştırıldıktan sonra orijinal çekim süresini korumaz gibi görünüyor. Bunu nasıl düzeltebileceğine dair bir fikrin var mı?


@slhck Evet, Yaratılış Zamanı diyorum. Videolarımı yönetmek için Lightroom kullanıyorum ve sıkıştırmadan sonra Yakalama / Oluşturma zamanı Değiştirildi Süresi haline geliyor.
pixelfreak

Yanıtlar:


21

FFmpeg kullanarak videoyu yeniden kodlamanıza gerek kalmadan mevcut meta verileri bir dosyadan diğerine kopyalayabilirsiniz . Temelde bir saniye sürer. Bunu yapmak için üç dosya olduğunu varsayalım:

  • in.mp4 - dönüşümden önceki orijinal dosya
  • out.mp4 - El Freni dönüşümünden sonraki dosya
  • fixed.mp4 - "düzeltilmiş" meta verilere sahip dosya

Tüm meta veri kaydını yeni dosyaya kopyalamak için FFmpeg komutu şöyle olur:

ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4

Sözdizimi açıklaması:

Bunu yıkmak için aşağıdakileri yapar:

  • Sırasıyla 0 ve 1 kimlikleri atanan iki girdi dosyasını ( in.mp4ve out.mp4) alın .
  • Yalnızca video / ses / altyazı akışlarını dosya 1'den çıktıya ( -map 1) eşleyin, böylece zaten dönüştürülmüş bit akışlarını alırız
  • Yalnızca 0 dosyasındaki meta verileri çıktıya eşle ( -map_metadata 0)
  • -c copyVideoyu yeniden kodlamak yerine tüm bit akışlarını kopyalamak için copy codec bileşenini ( ) kullanın.

Bundan sonra, belli ki adlandırmak olabilir fixed.mp4için out.mp4.


Kanıt:

Örnek olarak, orijinal dosyamın meta veri kaydının bir parçası:

$ mediainfo in.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19

El Freni dönüşümünden sonraki dosya:

$ mediainfo out.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-12-24 11:39:35

İşte meta verileri eşledikten sonraki son dosya:

$ ffmpeg -i in.mp4 -i out.mp4 -map 1 -map_metadata 0 -c copy fixed.mp4
[…]

$ mediainfo fixed.mp4 | grep "Encoded date" | head -n 1
Encoded date : UTC 2012-01-08 11:16:19    

Hepsini FFmpeg ile yapmak istiyorsanız:

Aslında, el freninin yine de kullandığı FFmpeg'i kullanabiliyorsanız el frenini kullanmanıza gerek yoktur. En basit durumda dönüşümünüzü şu şekilde yapabilirsiniz:

ffmpeg -i in.mp4 -c:v libx264 -crf 23 -c:a aac -map_metadata 0 out.mp4

Bu, orijinal meta verileri kopyalayarak x264 kodlayıcı ve AAC ses ile girişi bir çıkış dosyasına dönüştürür. Çıktının kalitesini değiştirmek için şunları yapabilirsiniz:

  • Video için CRF değerini değiştirin. Düşük, daha iyi kalite demektir. 23 varsayılan değerdir ve 18'in altındaki herhangi bir şey muhtemelen görsel olarak kayıpsız olacaktır.
  • Ses için bit hızını değiştirin. Daha fazla bilgi için AAC kodlama kılavuzuna bakın .

Daha fazla bilgi için FFmpeg wiki'sindeki x264 kodlama kılavuzunu okuyun .


1
Vay be, bu harika bir çözüm, biraz göz korkutucu görünüyor, keşke Handbrake bunu sahne arkasında yapsın. Teşekkürler!
pixelfreak

Meta veri aktarım komutu çalışıyor, ancak dönüşümü yapan son komut da bana bir Unknown encoder 'libfaac'hata verdi
pixelfreak

O zaman ffmpeg'iniz FAAC desteği ile derlenmez. -c:a aac -strict experimentalBunun yerine deneyin .
slhck

5

Ne yazık ki el freni kendi başına yapamıyor gibi görünüyor, ancak ffmpeg örneğine benzer şekilde, zaman damgaları touchunix komutu kullanılarak sıkıştırmadan sonra orijinalden kopyalanabilir :

touch -r MVI_1234.MOV compressed_MVI_1234.m4v

bu, sıkıştırılmış dosyadaki zaman damgasını verilen referans dosyasıyla aynı olacak şekilde ayarlar.


1
Dosya için zaman damgasını ayarlar, evet, ancak yalnızca dosya sisteminde. EXIF verilerinin doğru "Tarih / Saat Orijinal" zaman damgası olmayacaktır.
Stephen Schrauger

3

Aradım Farklı yazılım kullanarak, bunu yapmak için daha kolay bir yol buldum Adapter: http://www.macroplant.com/adapter/

HandBrake gibi tüm gelişmiş ayarlara sahip değildir, ancak işi yapar (ayrıca ffmpeg kullanarak) ve ihtiyacım olan meta verileri korur.


1
Adaptörün bunu yapabileceğini sanmıyorum. En yeni sürümü test ettim ve meta verileri herhangi bir yerde tutma ayarını bulamıyorum. Ayrıca, MTS gibi tüm video dosyası türlerini dönüştürmüyor gibi görünüyor
jjj

çok kötü, Sony'nin m2ts formatıyla uyumlu değil
Diego Vieira

2

MacOS Yosemite ve HandBrakeBatch kullanıyorum - dosyaları dönüştürmek için kullanın, ancak "Tercihler" menüsündeki "dosya oluşturma ve değişiklik tarihlerini koru" kutusuna tıklayın.

Sonra videoları Lightroom 5'e aktarıyorum, ancak yine de oluşturma tarihlerini tutmuyorlar. Ancak, en önemlisi, dosyalar Finder'da doğru Oluşturma tarihiyle gösterilir. Bu yüzden hepsini Lightroom kütüphanesinde seçtim → Meta veriler (sağ iletişim sütunu) → Çekim Zamanı → Dosyanın oluşturulma tarihine değiştir → Tümünü Değiştir.

850 eski aile videom vardı - bu işlemi 100'lük gruplar halinde yapmak zorunda kaldım. El freni çok sayıda dosyayla çöküyor.


Güzel bulmak, bu uygulamayı çok kullanarak kendimi görebilirsiniz.
calum_b

Uygulamanın artık korunmadığını unutmayın : osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck

1

touchYukarıda önerilen şekilde kullanarak meta verileri toplu olarak aktarabilen bir bash betiği yaptım . Çalışması için, orijinal ve dönüştürülmüş dosyalarınızı her biri aynı sayıda dosyaya (diğer dosyalar / dizinler karışacağından, yalnızca video dosyalarına sahip olmalıdır) ve aynı sırayla sahip olmalısınız. Sonra sadece meta verileri kopyalar ve hazırsınız. Komut dosyası tüm dosya çiftlerini listeler, böylece isterseniz hataları kontrol edebilirsiniz.

İlk uygun bash betiğim olduğu için kod en güzel olmayabilir, ancak benim için oldukça hızlı ve kararlıydı, işte gidiyor:

#!/bin/bash
#Sets IFS to \n to allow for filenames with spaces
IFS=$'\n'

#Source directory and converted direcotry
dir1=$1
dir2=$2

#Array with source filepaths
srcf=()
#Array with converted filepaths
cnvf=()

#Adds filepaths from the source directory to srcf array
for file in $(ls -1 $dir1); do
    srcf+=("$dir1/$file")
done
#Adds filepaths from the converted directory to cnvf array
for file in $(ls -1 $dir2); do
    cnvf+=("$dir2/$file")
done

#Checks if source and convert folders have the same number of files
if [ ${#srcf[*]} -eq ${#cnvf[*]} ]
then
    #Counter variable
    fnum=0
    #Loops through the arrays and runs touch command on pairs of files to transfer the metadata
    while [ $fnum -lt ${#srcf[*]} ]; do
        echo $fnum
        echo ${srcf[$fnum]} ${cnvf[$fnum]}
        touch -r ${srcf[$fnum]} ${cnvf[$fnum]}
        ((fnum++))
    done
else
    echo "The provided paths do not have the same number of files. Both paths must have the same number of files in the same order."
fi

Çalıştırmak için: sudo bash script.sh /sourcedir /converteddir


1

Dosya düzeyinde değişiklik zamanını kastediyorsanız, aynı problemi yaşadım ve exiftool ile kurtarmayı başardım .

exiftool -tagsFromFile input.mp4 -extractEmbedded -all:all -FileModifyDate -overwrite_original output.mp4

Bu, meta verileri alır ve ' FileModifyDateden alır input.mp4ve kopyalar output.mp4.

Kodlamak için çok sayıda dosyam olduğu için bunu otomatikleştirmek için , ilk olarak FFmpeg ile kod dönüştüren Shrinkwrap adlı bir araç oluşturdum (daha fazla meta veri korumaya ihtiyaç duyduğum için HandBrake'den uzaklaştım), sonra exiftool ile değişiklik zaman damgasını kurtardı.


0

Çok fazla arama yaptıktan sonra, çoğunlukla yeni El Freni sıkıştırılmış video dosyalarımın oluşturulduğu / değiştirildiği tarihin üzerine yazmak için doğru tarih oluşturulmuş / değiştirilmiş eski video dosyalarını kullanmaktan vazgeçtim. Videolarımın çoğunda dosya adında tarih / saat olduğundan, denedim ve çalışmak için iki yöntemim var. Birincisi ve en iyisi , sadece dosya adının kendisini değil, değiştirilen, oluşturulan ve erişilen dosya tarihini değiştirebilen Gelişmiş Yeniden Adlandırma'nın zaman damgası yöntemini kullanmaktır. https://www.advancedrenamer.com/download .

Ayrıca https://www.michaelmiklis.de/set-creation-and-modification-date-from-filename/ adlı bir powershell betiği buldum . Mevcut durumunda yalnızca dosya adı tam olarak bu örnekteki gibi yapılandırılmışsa çalışır.

Neyse ki dosya adında değiştirilme tarihi olmayan video sayım yeterince düşük. Bunları manuel olarak değiştirebiliyorum, çok uzun sürmeyecek.

Ben ffmpeg kullanmayı denedim, ancak map_metadata komutu sadece dosyanın içindeki verileri değiştirir, değiştirilme tarihi değiştirmez. Bu tür dahili meta veriler Handbrake zaten zaten iyi.


0

MyFFmpeg programı bunu çok iyi yapıyor. Seçeneklerinde Orijinal Oluşturma / Değiştirme Tarihini Kaynak Dosyadan Koruma seçeneği vardır .

Bunu aradım çünkü bir Plex sunucusunda ev videolarım var ve dosyalar oluşturma tarihine göre düzenleniyor, bu da belirli bir yıldaki şeyleri görmek istiyorsanız çok yararlı.

Ne yazık ki bu ücretsiz bir seçenek değil, şu anda 20 Euro veya yaklaşık 21 ABD'ye mal oluyor. Bir lisans satın almadan önce 10 kullanımlık bir deneme sürümü var. Bazı ücretsiz ffmpeg GUI'lerinde bu seçenek bulunmuyor veya eklenmiyor.


0

İnanılmaz derecede büyük GoPro MP4 videolarımı H.264'e sıkıştırırken oluşturma tarihini korumaya çalışıyorum.

HandBrakeBatch programını buldum . Oluşturma tarihini (meta veri) tutarken, bir seferde 1000'den fazla dosyayı sıkıştırmam gerekiyor.

Bunu yapabilen başka bir program bulamadınız. FFmpeg, HandBrake ve Wonderful Video Converter ile çalıştı, ama hayır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.