วิธีเพิ่มลายน้ำเมื่อแปลงเป็นวิดีโอมากกว่าหนึ่งตัวเลือกพร้อม -s


1

ฉันมีปัญหาในการเพิ่มลายน้ำในวิดีโอของฉัน ฉันกำลังแปลงวิดีโอเป็น 5 ความละเอียดที่แตกต่างกันโดยใช้ตัวเลือก -s

สิ่งที่ฉันได้ลอง:

waterMark="\"movie=/watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]\""

resolutions=$(echo -e "${resolutions} -s ${newX}x${myY} ${map} -vcodec libx264 ${options} 
-vf ${waterMark} ${NEW_FILENAME}_${myY}p.mp4")

ffmpeg -i $FILENAME "${resolutions}"

นี่คือเสียงสะท้อนของคำสั่ง: echo "ffmpeg -i $ FILENAME $ resolution"

ffmpeg -i test.mp4  
 -s 1728x720 -map 0:0 -map 0:1 -vcodec libx264 -acodec aac -strict experimental -movflags faststart -vf "movie=/watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]" test_720p.mp4 
 -s 1152x480 -map 0:0 -map 0:1 -vcodec libx264 -acodec aac -strict experimental -movflags faststart -vf "movie=/watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]" test_480p.mp4 
 -s 864x360 -map 0:0 -map 0:1 -vcodec libx264 -acodec aac -strict experimental -movflags faststart -vf "movie=/watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]" test_360p.mp4 
 -s 576x240 -map 0:0 -map 0:1 -vcodec libx264 -acodec aac -strict experimental -movflags faststart -vf "movie=/watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]" test_240p.mp4 
 -s 344x144 -map 0:0 -map 0:1 -vcodec libx264 -acodec aac -strict experimental -movflags faststart -vf "movie=/watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]" test_144p.mp4

ฉันไม่รู้ว่าข้อผิดพลาดคืออะไรทั้งหมดที่ฉันได้รับเป็นส่วนหนึ่งของรหัสเป็นสีแดง:

Metadata:
  handler_name    : VideoHandler
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s
Metadata:
  handler_name    : SoundHandler  

ส่วนนี้เป็นสีแดง *

10 [ออก] "test_240p.mp4 -s 344x144 -map 0: 0 -map 0: 1 -vcodec libx264 -acodec aac - การทดลองอย่างเข้มงวด -movflags faststart -vf" ภาพยนตร์ = / watermark.png [ลายน้ำ]; [ใน

ส่วนที่แปลกคือถ้าฉันเรียกใช้รหัสที่ฉันได้รับจากเสียงสะท้อน"ffmpeg -i $FILENAME $resolutions"จากเทอร์มินัลมันก็ใช้งานได้! แต่มันไม่ทำงานจากการทุบตี

ฉันลองเพิ่มลายน้ำทันทีหลังจาก -i $ FILENAME

ffmpeg -i $FILENAME -vf "movie=/watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]" $resolutions"

แต่ในกรณีนั้นมีเพียงวิดีโอแรกเท่านั้นที่มีลายน้ำ


การระบุความละเอียดเอาต์พุตหลายรายการในหนึ่งคำสั่งเร็วกว่าการดำเนินการแยกสายหรือไม่ ถ้าไม่ใช่คุณสามารถใช้การforวนซ้ำที่ดำเนินการได้ffmpegห้าครั้ง
ทิม

หากเอาต์พุตจากecho worksแต่โทรโดยตรงffnpegไม่ได้: ราคาอาจเป็นปัญหา คุณได้พิจารณาการเขียนผลลัพธ์ของเสียงก้องเป็นตัวแปร ( tocall=$(echo "ffmpeg -i $FILENAME $resolutions")) แล้วเรียกตัวแปรนี้ ( $($tocall))?
Tim

@ ฉันได้รับ[NULL @ 0x2452760] Unable to find a suitable output format for '[watermark];' [watermark];: Invalid argument
2783132

แต่ข้อเสนอแนะของคุณนำฉันไปสู่การแก้ปัญหา eval $ tocall ใช้งานได้! ขอบคุณ
user2783132

คำตอบ:


0

ฉันแก้มันโดยใช้คำสั่ง ffmpeg กับ eval eval รับค่าสตริงเป็นอาร์กิวเมนต์และประเมินว่าราวกับว่าคุณพิมพ์สตริงนั้นในบรรทัดคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.