Handbrakeでキャプチャ時間/作成時間を保持するにはどうすればよいですか?


14

Handbrakeは素晴らしいビデオ圧縮ツールですが、ビデオが圧縮された後、元のキャプチャ時間を保持するようには見えません。これを修正する方法はありますか?


@slhckはい作成時間を意味します。Lightroomを使用してビデオを管理します。圧縮後、キャプチャ/作成時間は変更時間になります。
pixelfreak

回答:


21

FFmpegを使用してビデオを再エンコードする必要なく、あるファイルから別のファイルに既存のメタデータをコピーできます。基本的に1秒かかります。これを行うために、3つのファイルを想定します。

  • in.mp4 –変換前の元のファイル
  • out.mp4 –ハンドブレーキ変換後のファイル
  • fixed.mp4 –「修正された」メタデータを持つファイル

完全なメタデータレコードを新しいファイルにコピーするFFmpegコマンドは次のようになります。

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

構文の説明:

これを分解するために、これは次のことを行います。

  • それぞれID 0と1が割り当てられた2つの入力ファイル(in.mp4out.mp4)を取得します。
  • ファイル1のビデオ/オーディオ/字幕ストリームのみを出力(-map 1)にマッピングします。そのため、既に変換されたビットストリームを取得します
  • ファイル0のメタデータのみを出力にマップします(-map_metadata 0
  • -c copyビデオを再エンコードする代わりに、コピーコーデック()を使用してすべてのビットストリームをコピーします。

その後、明らかにに名前fixed.mp4を変更できますout.mp4


証明:

例として、元のファイルのメタデータレコードの一部を次に示します。

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

Handbrake変換後のファイルは次のとおりです。

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

メタデータをマッピングした後の最終ファイルは次のとおりです。

$ 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    

FFmpegですべてを行いたい場合:

実際、FFmpegを使用できるのであれば、Handbrakeを使用する必要はありません。FFmpegはとにかく依存しています。最も単純なケースでは、次のように変換を行うことができます。

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

これにより、x264エンコーダーとAACオーディオを使用して入力が出力ファイルに変換され、元のメタデータがコピーされます。出力の品質を変更するには、次のことができます。

  • ビデオのCRF値を変更します。低いほど品質が向上します。23がデフォルトであり、18未満はおそらく視覚的に無損失です。
  • オーディオのビットレートを変更します。詳細については、AACエンコーディングガイドを参照してください。

詳細については、FFmpeg wiki のx264エンコーディングガイドを参照してください。


1
うわー、それはクールな回避策ですが、少し手ごわいように見えます、私はハンドブレーキが舞台裏でこれを行うことを望みます。ありがとう!
pixelfreak

メタデータ転送コマンドは機能しますが、変換を行う最後のコマンドでもUnknown encoder 'libfaac'エラーが発生しました
-pixelfreak

その場合、ffmpegはFAACサポートでコンパイルされません。-c:a aac -strict experimental代わりに試してください。
slhck

5

残念ながら、ハンドブレーキはそれだけではできませんが、ffmpegの例と同様に、touchunixコマンドを使用して、圧縮後にタイムスタンプをオリジナルからコピーできます。

touch -r MVI_1234.MOV compressed_MVI_1234.m4v

これにより、圧縮ファイルのタイムスタンプが指定の参照ファイルと同じに設定されます。


1
ファイルのタイムスタンプを設定します、はい、ただしファイルシステムのみです。EXIFデータには、正しい「Date / Time Original」タイムスタンプがありません。
スティーブンシュラウガー14年

3

私はと呼ばれる別のソフトウェアを使用して、これを行うための簡単な方法を見つけましたAdapterhttp://www.macroplant.com/adapter/

HandBrakeのような高度な設定がすべてあるわけではありませんが、仕事も(ffmpegを使用して)行い、必要なメタデータを保持します。


1
アダプタがこれを行うことができるとは思わない。最新バージョンをテストしたばかりですが、メタデータをどこにも保持するための設定が見つかりません。さらに、MTSなどのすべての種類のビデオファイルを変換するわけではないようです。
jjj14年

残念なことに、ソニーのm2ts形式と互換性がありません
ディエゴヴィエイラ

2

macOS YosemiteとHandBrakeBatchを使用しています。これを使用してファイルを変換しますが、[設定]メニューの[ファイルの作成日と変更日を保持する]ボックスをクリックします。

次に、ビデオをLightroom 5にインポートしますが、作成日は保持されません。ただし、最も重要なのは、ファイルが正しい作成日でFinderに表示されることです。そのため、Lightroomライブラリですべてを選択しました→メタデータ(右のダイアログ列)→キャプチャ時間→ファイルの作成日に変更→すべて変更。

私は850の古い家族のビデオを持っていました–私は100のバッチでこのプロセスをしなければなりませんでした。多くのファイルでHandbrakeがクラッシュします。


素敵な発見、このアプリをたくさん使っている自分を見ることができます。
calum_b

アプリはもはやメンテナンスされていないことに注意してください:osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck

1

touch上記の提案に従って、メタデータをバッチ転送できるbashスクリプトを作成しました。それが機能するためには、元のファイルと変換されたファイルを別々のディレクトリに配置し、それぞれが同じ数のファイル(他のファイル/ディレクトリが干渉するため、ディレクトリにはビデオファイルのみが必要)を同じ順序で持つ必要があります。次に、メタデータをコピーするだけで、設定は完了です。スクリプトにはすべてのファイルのペアがリストされるため、必要に応じて最後にエラーをチェックできます。

このコードは私の最初の適切なbashスクリプトであるため、最も適切ではないかもしれませんが、私にとっては非常に高速で安定しているので、ここに行きます。

#!/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

実行するには: sudo bash script.sh /sourcedir /converteddir


1

ファイルレベルの変更時間を意味する場合、私は同じ問題を抱えていて、exiftoolでそれを回復することができました。

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

これは、メタデータを取得してFileModifyDateからinput.mp4、それをコピーoutput.mp4

トランスコードするファイルが多数あるため、これを自動化するために、最初にFFmpegでトランスコードするShrinkwrapというツールを作成し(メタデータをさらに保持する必要があるためHandBrakeから離れました)、exiftoolで変更タイムスタンプを回復します。


0

多くの検索を行った後、新しいハンドブレーキで圧縮されたビデオファイルの作成/変更された日付を上書きするために、正しい日付が作成/変更された古いビデオファイルの使用をほとんどあきらめました。ほとんどのビデオではファイル名に日付/時刻が含まれているため、2つの方法を試してみました。最初の最善の方法は、Advanced Renamerのタイムスタンプメソッドを使用することです。これは、ファイル名だけでなく、変更、作成、およびアクセスされたファイルの日付を変更できます。https://www.advancedrenamer.com/download

また、プログラマが他のファイル名/日付形式に適合させることができるPowerShellスクリプトhttps://www.michaelmiklis.de/set-creation-and-modification-date-from-filename/を見つけました。現在の状態では、ファイル名がその例のとおりに正確に構成されている場合にのみ機能します。

幸いなことに、ファイル名に日付が変更されていない私のビデオの数は十分に少ないので、それらを手動で変更できます。それほど長くかかりません。

ffmpegを使用してみましたが、map_metadataコマンドはファイル内のデータのみを変更し、ファイル自体の変更日、作成日は変更しません。とにかく、この種の内部メタデータHandbrakeはすでにうまく機能しています。


0

プログラムMyFFmpegはこれを非常にうまく行います。そのオプションには、ソースファイルからの元の作成/変更日保持する選択肢があります

Plexサーバーにホームビデオがあり、ファイルは作成日ごとに整理されているため、これを探していました。これは、特定の年のものを見る場合に非常に便利です。

残念ながら、これは無料のオプションではなく、現在20ユーロまたは約21米ドルかかります。ライセンスを購入する前に、10回使用するためのトライアルがあります。いくつかの無料ffmpeg GUIには、このオプションがないか、追加されていないことに驚いた。


0

非常に大きなGoPro MP4ビデオをH.264に圧縮している間、作成日を維持しようとしています。

HandBrakeBatchというプログラムを見つけました。作成日(メタデータ)を維持しながら、一度に1000以上のファイルを圧縮するために必要なものです。

これを行うことができる他のプログラムを見つけていません。FFmpeg、HandBrake、Wonderful Video Converterを試しましたが、ありません。


HandBrakeBatchはもはやメンテナンスされていないことに注意してください:osomac.com/2013/08/08/handbrake-adds-real-batch-processing
slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.