لینوکس و من

یک اسکریپت برای ایجاد واترمارک روی ویدیو

نویسنده : امین | تاریخ: 1395/05/16

نیاز داشتم به اینکه یک واترمارک روی یک سری ویدیوهای آموزشی قرار بدم. سرچ کردم و روشش رو با ffmpeg پیدا کردم. منتها اگه میخواستی برای هر ویدیو اون دستور طولانی رو اجرا کنی سخت میشد! برای همین از دوستان انجمن فارسی آرچ کمک گرفتم تا یک اسکریپت داشته باشم برای اینکار. آقای Arcush زحمت کشیدن و این اسکریپت رو ساختن.

اول اینکه دستور اولی به این شکل بود:
ffmpeg -i '/PATH/TO/INPUT.flv'  -i /PATH/TO/wm.png -filter_complex '[0:v][1:v]overlay=15:10[outv]' -map [outv] -map 0:a -c:a copy -c:v libx264 -crf 22 -preset veryfast output.mp4
یا
ffmpeg -i '/PATH/TO/INPUT.flv' -i /PATH/TO/wm.png -filter_complex "overlay=15:10" -preset veryfast output.mp4



دستور بالا واترمارکی که در مسیر مشخص شده قرار گرفته روی فایلی که مورد نظر ماست قرار میده و اون رو با نام output.mp4 در پوشه home کاربر میسازه. چیز جالبیه. اما راحت نیست. 15:10 هم یعنی ۱۵ واحد از سمت چپ و ۱۰ واحد از سمت بالا فاصله داشته باشه.
#!/bin/bash 
for k in $(ls *.wmv); do ffmpeg -i "$k" -i ~/wm.png -filter_complex '[0:v][1:v]overlay=15:10[outv]' -map [outv] -map 0:a -c:a copy -c:v libx264 -crf 22 -preset veryfast "new-$k"; done
یا
for k in $(ls *.wmv); do ffmpeg -i "$k" -i ~/wm.png -filter_complex "overlay=15:10" -preset veryfast "new-$k"; done




اگه ما دستور بالا رو به این شکل در بیاریم، و اون رو در یک اسکریپت مثلا با نام addwmall قرار بدیم، و اون رو در پوشه ای که فیلمهای ما قرار دارند اجرا کنیم، فایل wm.png که باید در فولدر ویدیوها موجود باشه به تمام  فایل‌های wmv در پوشه ای که اسکریپت در اون ایجاد میشه اضافه میشه. که این هم خوبه، ولی چیزی که میخواستم اسکریپت پایینی بود که دوست خوبم در انجمن آرچ اون رو نوشت:
#!/bin/bash

path_of_first_file=$(dirname "$1")
name_of_first_file=$(basename "$1")

new_name="new-$(echo "$name_of_first_file.mp4")"
new_output=$(echo "$path_of_first_file/$new_name")

ffmpeg -i "$1"  -i "$2" \
-filter_complex "overlay=15:10" -preset veryfast "$new_output"

echo
echo "New video saved in: " "$path_of_first_file"\/$new_name
با اسکریپت بالا میتونیم دو مقدار فایل ویدیویی و فایل واترمارک رو بهش بدیم، تا یک فایل حاوی واترمارک با نام جدید در کنار فایل ویدیوی قبلی ایجاد بشه. مثلا:
addwm /PATH/TO/INPUT.flv /PATH/TO/wm.png

طبق تجربه ای که در کار با اسکریپت داشتم دریافتم که فایلهای flv وقتی روشون واترمارک میذاریم با کیفیت بدی ذخیره میشن. اگه اونها پسوند mp4 داشته باشن درست میشه. برای همین در اسکریپت بالا اون mp4. رو که برنگ سبز مشخص کردم اضافه کردم تا همه ی فایلهای واترمارک شده mp4 باشن اصلا! بنابراین میتونین اون new_ هم که با نارنجی مشخص کردم حذف کنین. چون مثلا فایلی به اسم video.flv به فایلی به اسم video.flv.mp4 تبدیل میشه و نیازی به new_ نیست.

1395/09/17 17:14
ممنون بایت پاسخ
من فکر کردم خودتون استفاده کردید
من کدهای بالا رو توو هر تگ و فایلی گذاشتم کار نکرد...
هم تو <?php گذاشتم هم اسکریپت اجرا نمیشن .
اون فایل addwnall با پسوند php باید باشه یا js ؟
اگر خودتون از کد بالا استفاده میکنید نحوه استفادش رو هم بفرمایید
پاسخ امین : بنده خودم استفاده کردم! اینها تحت وب نیستند که php باشند، جاوا اسکریپت هم نیستند که js باشند. اینها اسکریپتهای ساده bash در لینوکس هستند.
1395/09/15 15:43
سلام
ممنون
من سوال دارم ، من ی سرور دارم که ffmpeg داره
حالا میخوام هر ویدیو که با پسوند mp4 وارد پوشه ایکس شد واتر مارک بشه...
تو این فولدر ایکس باید ی دایرکتوری php ایجاد کنم و اسکریپت دوم رو داخلش بریزم؟ فقط wmv رو به mp4 تغییر بدم
بعدش لوگومم بذارم تو پوشه ایکس
تمومه؟
حالا هر ویدیویی که با پسوند mp4 وارد پوشه ایکس بشه واترمارک میخوره؟
پاسخ امین : سلام. ممنون از کامنتتون.
بنده اطلاعی از کار با سرورها ندارم. اما در مورد سوال شما، به نظر بدیهیه که این اسکریپت در یک محیط لینوکس کار خواهد کرد. حالا چه سرور چه غیر سرور. و طبیعیه که این اسکریپت باید اجرا بشه تا فایلهای درون اون پوشه رو واترمارک کنه. وگرنه خود به خودی که فایلها تغییری نمیکنند.
میتونید امتحان کنید چیزی رو که گفتید. ضرر که نداره
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
نظرات پس از تایید نشان داده خواهند شد.

برای کپی پیست کردن در متن نظرات کلید shift را نگه دارید و بعد right click کنید.