핸드 브레이크가 캡처 시간 / 생성 시간을 유지하도록하는 방법은 무엇입니까?


14

핸드 브레이크는 멋진 비디오 압축 도구이지만 비디오를 압축 한 후에 원래 캡처 시간을 유지하지 않는 것 같습니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?


@slhck 예, 창조 시간을 의미합니다. Lightroom을 사용하여 비디오를 관리하고 압축 후 캡처 / 생성 시간이 수정 된 시간이됩니다.
pixelfreak

답변:


21

FFmpeg를 사용하여 비디오를 다시 인코딩하지 않고도 한 파일에서 다른 파일로 기존 메타 데이터를 복사 할 수 있습니다 . 기본적으로 1 초가 걸립니다. 이를 위해 세 개의 파일을 가정 해 봅시다.

  • 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이 각각 할당 된 두 개의 입력 파일 ( 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

핸드 브레이크 변환 후 파일은 다음과 같습니다.

$ 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를 사용할 수 있다면 핸드 브레이크를 실제로 사용할 필요는 없습니다. 가장 간단한 경우 다음과 같이 변환을 수행 할 수 있습니다.

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

그러면 x264 인코더 및 AAC 오디오가있는 입력이 출력 파일로 변환되어 원본 메타 데이터가 복사됩니다. 출력 품질을 변경하기 위해 다음을 수행 할 수 있습니다.

  • 비디오의 CRF 값을 변경하십시오. 낮을수록 품질이 좋아집니다. 23이 기본값이며 18 미만은 시각적으로 손실이 없습니다.
  • 오디오의 비트 전송률을 변경하십시오. 자세한 내용은 AAC 인코딩 안내서 를 참조하십시오.

자세한 내용은 FFmpeg 위키 에서 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 데이터에는 올바른 "날짜 / 시간 원본"타임 스탬프가 없습니다.
Stephen Schrauger

3

나는라는 다른 소프트웨어를 사용하여이 작업을 수행 할 수있는 쉬운 방법을 발견 Adapter: http://www.macroplant.com/adapter/

HandBrake와 같은 모든 고급 설정이 없지만 작업을 수행하고 (ffmpeg 사용) 필요한 메타 데이터를 유지합니다.


1
Adapter가이 작업을 수행 할 수 없다고 생각합니다. 방금 최신 버전을 테스트했는데 메타 데이터를 유지하기위한 설정을 찾을 수 없습니다. 또한 MTS 등과 같은 모든 비디오 파일 형식을 변환하지는 않습니다.
jjj

너무 안좋아 소니의 m2ts 형식과 호환되지 않습니다
Diego Vieira

2

macOS Yosemite 및 HandBrakeBatch를 사용하고 있습니다. 파일을 변환하는 데 사용하지만 "환경 설정"메뉴에서 "파일 생성 및 수정 날짜 유지"상자를 클릭하십시오.

그런 다음 비디오를 Lightroom 5로 가져 오지만 여전히 제작 날짜는 유지하지 않습니다. 그러나 가장 중요한 것은 파일이 정확한 생성 날짜와 함께 Finder에 표시된다는 것입니다. 그래서 Lightroom 라이브러리 → 메타 데이터 (오른쪽 대화 상자 열) → 캡처 시간 → 파일 생성 날짜로 변경 → 모두 변경에서 모든 항목을 선택했습니다.

나는 850 개의 오래된 가족 비디오를 가지고 있었다 – 나는이 과정을 100 개의 묶음으로해야했다. 수동 브레이크는 많은 파일과 충돌한다.


좋은 발견,이 응용 프로그램을 많이 사용하여 자신을 볼 수 있습니다.
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

많은 검색을 한 후, 나는 새로운 핸드 브레이크 압축 비디오 파일의 생성 / 수정 날짜를 덮어 쓰기 위해 올바른 날짜 생성 / 수정 된 오래된 비디오 파일을 사용하는 것을 포기했습니다. 내 비디오의 대부분은 파일 이름에 날짜 / 시간이 있으므로 실험하고 작동하는 두 가지 방법이 있습니다. 첫 번째로 가장 좋은 방법 은 Advanced Renamer의 타임 스탬프 방법을 사용하는 것입니다.이 방법은 파일 이름뿐만 아니라 수정, 작성 및 액세스 된 파일 날짜를 변경할 수 있습니다. https://www.advancedrenamer.com/download .

또한 프로그래머가 다른 파일 이름 / 날짜 형식에 맞게 조정할 수있는 powershell 스크립트 https://www.michaelmiklis.de/set-creation-and-modification-date-from-filename/ 을 발견했습니다 . 현재 상태에서는 파일 이름이 해당 예제와 정확히 일치하는 경우에만 작동합니다.

다행스럽게도 파일 이름에서 날짜를 수정하지 않은 비디오 수는 너무 적어서 수동으로 변경할 수 있으며 시간이 오래 걸리지 않습니다.

ffmpeg를 사용해 보았지만 map_metadata 명령은 파일 자체에서 작성된 날짜가 아닌 파일 내부의 데이터 만 변경합니다. 이런 종류의 내부 메타 데이터 핸드 브레이크는 이미 어쨌든 잘 작동합니다.


0

MyFFmpeg 프로그램 이이를 잘 수행합니다. 옵션에는 원본 파일에서 원본 작성 / 수정 날짜 유지를 선택할 수 있습니다.

Plex 서버에 홈 비디오가 있고 파일이 생성 날짜별로 구성되어 있기 때문에 이것을 찾고 있었는데, 특정 연도의 물건을보고 싶을 때 매우 유용합니다.

불행히도 이것은 무료 옵션이 아니며 현재 20 유로 또는 약 21 US입니다. 라이센스를 구매하기 전에 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.