2010-01-25 12:54:46 +0000 2010-01-25 12:54:46 +0000
130
130

Как проверить целостность видеофайла (avi, mpeg, mp4...)?

Это название может ввести в заблуждение, так что позвольте мне объяснить…

Я скачиваю видеофайл … mpeg, avi - это один из популярных форматов. Теперь, если я скачиваю его, и загрузка прерывается в середине эм … скачать, то, например, Windows Media Player выдаст некоторую ошибку и откажется его проигрывать (хотя файл является, скажем, 98% полным). Но, игроки, как KMPlayer, или MediaPlayer Classic будет воспроизводить его до этого момента (на самом деле, они могут воспроизводить его во время загрузки, а также). 0x2 & 0x2 & Таким образом, я заинтересован, … без использования каких-либо средств загрузки (менеджеры по загрузке и т.д.), чтобы обезопасить файл полностью загружен, как можно проверить, что видео файл загружается целиком, и что он является полным ?

Ответы (7)

137
137
137
2010-01-25 13:05:22 +0000

Вы можете использовать функцию в видеоконвертере ffmpeg: если вы укажете ее для перекодирования видео в никуда, она просто прочитает входной файл и сообщит о любых ошибках, которые появятся. Это очень быстрый процесс, потому что видеокадры просто читаются, проверяются и бесшумно отбрасываются. Командная строка

Пример: (для Linux)

ffmpeg -v error -i file.avi -f null - 2>error.log

-v error означает определенный уровень глагольности (чтобы показать некоторые ошибки, которые обычно скрыты, потому что они не сильно влияют на воспроизводимость).

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

FFmpeg также доступен для Windows здесь . Командная строка будет практически идентична, за исключением stderr redirect:

ffmpeg.exe -v error -i file.avi -f null - >error.log 2>&1
14
14
14
2011-09-22 17:05:59 +0000

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

К сожалению, у ffmpeg пока нет возможности отключить свой интерактивный режим, который выводит шум для данного случая использования. В итоге я взломал простой оберточный скрипт для выполнения фильтрации:

#!/usr/bin/env python
import sys
import os
import re

t = os.popen('ffmpeg -v 5 -i "%s" -f null - 2>&1' % sys.argv[1]).read()
t = re.sub(r"frame=.+?\r", "", t)
t = re.sub(r"\[(.+?) @ 0x.+?\]", "[\1]", t)
print t

Пример вывода:

[mpeg1video]ac-tex damaged at 21 17
[mpeg1video]Warning MVs not available
[mpeg1video]concealing 22 DC, 22 AC, 22 MV errors
[mpeg1video]Warning MVs not available
[mpeg1video]concealing 22 DC, 22 AC, 22 MV errors
[mpeg1video]ac-tex damaged at 13 9
1
1
1
2017-08-15 14:13:33 +0000

Для окон вы можете “пакетно” проверить целостность видео в текущей папке и во всех подпапках с этим файлом bat:

checkvideo.bat

@echo off

set "filtro=%1"
if [%filtro%]==[] (
    set "filtro=*.mp4"
    )

for /R %%a in (%filtro%) do call :doWork "%%a"

    PAUSE
    exit /B

:doWork
    C:\ffmpeg\bin\ffmpeg.exe -v error -i %1 -f null - > "%~1.log" 2>&1

Use:

checkvideo.bat [filter]

Если вы не дадите один фильтр, получите ‘*.mp4’.

Образцы: checkvideo.batcheckvideo.bat *.avi

Настройка: Скачать FFmpeg для Windows отсюда: https://ffmpeg.zeranoe.com/builds/ и распаковать их Измените `C:\ffmpeg\binДля окон вы можете “пакетно” проверить целостность видео в текущей папке и во всех подпапках с этим файлом bat:

checkvideo.bat

@echo off

set "filtro=%1"
if [%filtro%]==[] (
    set "filtro=*.mp4"
    )

for /R %%a in (%filtro%) do call :doWork "%%a"

    PAUSE
    exit /B

:doWork
    C:\ffmpeg\bin\ffmpeg.exe -v error -i %1 -f null - > "%~1.log" 2>&1

Use:

checkvideo.bat [filter]

Если вы не дадите один фильтр, получите ‘*.mp4’.

Образцы: checkvideo.batcheckvideo.bat *.avi

Настройка: Скачать FFmpeg для Windows отсюда: [ https://ffmpeg.zeranoe.com/builds/ ]0x3& и распаковать их Измените в bat-файле путь, по которому распаковали ffmpeg Положите checkvideo.bat в папку, включенную в Path, или добавьте его папку в переменную окружения Path.

0
0
0
2020-01-12 11:14:29 +0000

**

var ffmpeg = require('fluent-ffmpeg');
var ff = new ffmpeg();

ff.on('start', function(commandLine) {
  // on start, you can verify the command line to be used
})
.on('progress', function(data) {
  // do something with progress data if you like
})
.on('end', function() {
  // do something when complete
})
.on('error', function(err, stdout, stderr) {
  // handle error conditions
  console.log('Error: ' + err.message)
  console.log('ffmpeg output:\n' + stdout)
  console.log('ffmpeg stderr:\n' + stderr)
})
.addInput('path\to\file')
.addInputOption('-xerror')
.addInputOption('-v error')
.output('-')
.outputOptions('-f null')
.run();

*Отчет: * https://stackoverflow.com/questions/43349360/how-to-check-for-corrupted-webm-video-using-node-js-and-fluent-ffmpeg

0
0
0
2019-11-12 09:31:47 +0000

Более простая версия

for file in *.mp4; do ffmpeg -v error -i "$file" -f null - >error.log 2>&1; print "$file"; done

В процессе обработки будет выведено имя файла.

error.log будет содержать ошибки.

0
0
0
2010-01-25 13:13:15 +0000

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

Еще один инструмент - GSpot , но он не обновлялся с 2007 года.

Попробуйте дать каждому из них известный хороший и известный плохой файл и сравнить результаты.

Я использовал GSpot, пока он не перестал обновляться, а затем переключился на MediaInfo.

0
0
0
2018-04-11 12:16:24 +0000

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

Быстрым способом будет генерация эскизов для всех видео, а также просмотр мест, где генерация эскизов проходит неудачно.

find . -iname "*.mp4" | while read -r line; do 
  line=`echo "$line" | sed -r 's/^\W+//g'`; 
  echo 'HERE IT IS ==>' "$line"; 
  if ffmpeg -i "$line" -t 2 -r 0.5 %d.jpg; 
    then echo "DONE for" "$line"; 
  else echo "FAILED for" "$line" >>error.log; 
  fi; 
done;

Этот метод оказался намного быстрее других.

Однако есть CAVEAT. Этот метод может дать неверный результат, так как иногда даже для поврежденных файлов могут быть сгенерированы миниатюры. Например, если видеофайл поврежден только в конце, этот метод будет неудачным.