سؤال كيف يمكنني التحقق من سلامة ملف الفيديو (avi ، mpeg ، mp4…)؟


قد يكون هذا العنوان مضللًا إلى حد ما ، لذا اسمحوا لي أن أشرح ...

أنا تحميل ملف فيديو ... MPEG ، افي - كونها واحدة من الصيغ الشعبية. الآن ، إذا قمت بتنزيله ، وكسر التنزيل في منتصف uhm ... تنزيل ، فعلى سبيل المثال ، سيعطي Windows Media Player بعض الأخطاء ويرفض تشغيلها (على الرغم من أن الملف ، دعنا نقول ، 98 ٪ كاملة). ولكن ، لاعبين مثل KMPlayer ، أو MediaPlayer Classic سيلعبون حتى هذه النقطة (كما واقع الأمر ، يمكنهم اللعب بها أثناء تنزيلها كذلك).

لذا ، أنا مهتم ، ... دون استخدام أي وسيلة للتنزيل (مديري التنزيل وعلى حد سواء) لتأمين تحميل الملف بالكامل ، كيف يمكن للمرء التحقق مما إذا كان ملف الفيديو قد تم تنزيله بالكامل ، وأنه مكتمل؟


100
2018-01-25 12:54


الأصل


يجب أن تلعب MPEG غير المكتملة دون مشاكل. لدى AVI فهرسة للبحث السريع في نهاية الملف ، والذي سيستخدمه بعض اللاعبين والبعض الآخر لا يتطلبه أو سيتجاهله. - bobince
Incomplete MPEG should play with no problems. bobince ، كان السؤال هو / كيفية التحقق من الفساد ، وليس كيفية تشغيل ملف غير مكتمل. حتى إذا كان تنسيق يدعم تشغيل ملفات غير كاملة ، فلا يزال من الممكن التحقق من وجود تلف في حالة عدم توافق الملف مع مواصفات التنسيق. على سبيل المثال ، لا يزال بإمكانك قراءة ملف نص عادي غير مكتمل ، ولكن لا يزال بإمكانك اكتشاف ما إذا كان الملف يعاني من مشاكل مثل إذا انتهى في منتصف الجملة أو وجود جزء من المعلومات المفقودة في المنتصف. - Synetech


الأجوبة:


يمكنك استخدام ميزة في ffmpeg محول الفيديو: إذا كنت ستحدده لإعادة تسجيل الفيديو إلى أي شيء ، فستقوم فقط بقراءة ملف الإدخال والإبلاغ عن أي أخطاء ستظهر. هذه العملية سريعة جدًا لأن إطارات الفيديو يتم قراءتها وفحصها وإسقاطها بصمت.

سطر أوامر المثال: (لـ Linux)

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

-v error يعني معين مستوى الإسهاب (لإظهار بعض الأخطاء التي عادة ما تكون مخفية لأنها لا تؤثر على إمكانية اللعب كثيرًا).

سوف تحصل على سجل أخطاء كامل مع بعض المعلومات العامة عن ملف ffmpeg سوف يخرج ، لذلك قد يتطلب ذلك انتباهك ، من خلال مرشحات يمكن كتابتها لأداء التحقق من الملفات المماثلة.

FFmpeg متوفر أيضًا لنظام التشغيل Windows هنا. سيكون سطر الأوامر متطابقًا تقريبًا مع استثناء من إعادة توجيه stderr:

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

107
2018-01-25 13:05



بنفس السرعة كما لو تم تحويلها. - Somebody
خيار آخر هو ffprobe التي تأتي في حزمة مع ffmpeg. لا يقوم بأي تحويل ولكنه ببساطة يقرأ معلومات البيانات الوصفية من الملف. لذلك ، ستكتشف الأخطاء في البيانات الوصفية ، ولكنها لن تجد أي مشكلات في الملف نفسه. شخصيا باستخدام ffprobe للتحقق السريع من تحميلها قبل إجراء مزيد من المعالجة - mente
يبدو أن يستغرق ما دام مشاهدة الفيلم لسوء الحظ ، ولكن يبدو أنه يعمل - MattPark
إذا ، كما ينص البروتوكول الاختياري ، "تنزيل فواصل في منتصف uhm ... تنزيل" ، من المحتمل جدا ذلك الكل ستتعطل التدفقات ، لذا يمكنك اكتشاف هذا الخطأ من خلال تقييد فك التشفير فقط مسار صوتي واحد (باستخدام -map) ، مما سيزيد من سرعة التشغيل بشكل كبير: ffmpeg -v error -i in.mkv -map 0:1 -f null … إذا كان هناك خطأ ، فسوف يقوم بتسجيل موقع البايت ، والذي يمكنك استخدامه لاقتطاع الملف (ميغا بايت أو اثنين في وقت سابق ليكون آمنًا) ثم استئناف التنزيل. - Lumi
استغرق الأمر 4/4 دقيقة بالنسبة لي لاختبار ملف .mkv طويل 1 ساعة 1GB ، على معالج الأساسية عرافة الأقدم. كانت جميع النوى متناهية الصغر أثناء الاختبار. لقد قمت بتحرير نسخة من الملف وأضفت بعض الكتل 00 لمحاكاة الضرر. سجل الخطأ عن الأخطاء بشكل صحيح. الملفات دون أخطاء إرجاع error.log فارغة - TripleAntigen


اعجبني فكرة استخدام 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

7
2017-09-22 17:05



إذا قمت بإجراء ذلك بحيث يستبدل الأجزاء المكسورة بأجزاء جيدة ، سيكون ذلك أفضل - akostadinov
أتلقى خطأً باستخدام هذا: - Akshit Rewari
Traceback (آخر اتصال آخر): ملف "F: \ filecheck.py" ، السطر 6 ، في <module> t = os.popen ('ffmpeg -v 5 -i "٪ s" -f null - 2> & 1' ٪ sys.argv [1]) اقرأ () IndexError: فهرس القائمة خارج النطاق - Akshit Rewari


معلومات الوسائط أداة رائعة للحصول على معلومات حول أي ملف فيديو تهتم به. قد يكون هذا قادرًا على إبراز المعلومات التي تريدها.

أداة أخرى هي غسبوت ولكن لم يتم تحديثه منذ عام 2007.

حاول أن تقدم لكل واحد ملفًا معروفًا جيدًا ومعروفًا ومقارنة النتائج.

اعتدت على استخدام GSpot حتى توقفت عن التحديث ، ثم تحولت إلى MediaInfo


0
2018-01-25 13:13



لديّ بعض الإصدارات القديمة من GSpot على جهازي ... ولكنها أداة لشيء مختلف تمامًا (تحديد الشفرة / فك التشفير ...). ليس لها علاقة بهذا. سوف تحقق من mediainfo. - Rook
سيحدد GSpot ما إذا كان حجم الملف أو عدد الإطارات لا يتطابق مع ما هو متوقع من الفهرس (في مكان ما على الجانب الأيسر ، لقد مضى وقت على استخدامه!) ، كما أضافت الإصدارات الأخيرة الكثير من الوظائف. - Shevek
معلومات الوسائط يمكن مسح الدلائل بشكل متكرر: للحصول على تقرير لجميع الملفات في أي مستوى بدءا من المجلد الحالي ببساطة تشغيل mediainfo *. - ccpizza
mediainfo على ما يبدو لا تحقق من الكمال. أخذت 33 ميغابايت webm ملف الفيديو و truncateد إلى النصف. mediainfo لا يزال لديه نفس الناتج تقريبا لكلا ، لا توجد علامة واضحة على الفساد. بعد truncateإلى 1 ميغابايت لم تكن هناك علامة واضحة للفساد في الإخراج. فقط إذا كان لديك نظرة أعمق على الإخراج ، كان هناك بعض المعلومات المتناقضة. ولكن هذه الأجزاء تعتمد على تنسيق ملف الفيديو ، لذلك لا يمكنك أتمتة هذا الكشف. - Tino
mediainfo لا يقرأ أي شيء سوى البيانات الوصفية. هذا لن يتحقق من صحة ملفك بأي شكل من الأشكال. - DanielSmedegaardBuus


بالنسبة إلى النوافذ ، يمكنك "التحقق" من سلامة مقاطع الفيديو الموجودة في المجلد الحالي وكافة المجلدات الفرعية مع ملف 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

استعمال:

checkvideo.bat [filter]

إذا لم تعط مرشحًا واحدًا ، فستحصل على "* .mp4".

عينات:      checkvideo.bat checkvideo.bat *.avi

اقامة: قم بتحميل FFmpeg لنظام Windows من هنا: https://ffmpeg.zeranoe.com/builds/ وفك ضغطها يتغيرون C:\ffmpeg\bin\ في ملف الخفافيش للمسار حيث قمت بفك ضغط ffmpeg ضع checkvideo.batفي مجلد موجود في المسار أو إضافة مجلده إلى متغير بيئة المسار


0
2017-08-15 14:13



خوان انطونيو توبيوتعمل إجابة بالنسبة لي للتحقق من سلامة الفيديو. ولكن كيف يمكنني قراءة ملف السجل وكشف الوقت حيث تلف الفيديو. تسجيل مثال. فشل [h264 @ 00000173649787c0] فك تشفير cabac للفحص qscale في 64 7 [h264 @ 00000173649787c0] خطأ أثناء فك الترميز MB 64 7 ، bytestream 38638 - J.Duck


القضية مع الاجابة الاخرى باستخدام 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;

تحولت هذه الطريقة ليكون أسرع بكثير من الطرق الأخرى.

ومع ذلك هناك مذكره قانونيه. يمكن أن تسفر هذه الطريقة عن نتائج خاطئة ، لأنه يمكن في بعض الأحيان إنشاء صورة مصغرة حتى بالنسبة للملفات الفاسدة. مثلا إذا كان ملف الفيديو تالفًا فقط في النهاية ، فستفشل هذه الطريقة.


0
2018-04-11 12:16