反向编码视频?

时间:2010-03-31 13:50:12

标签: ffmpeg

是否有人知道是否可以使用ffmpeg反向编码视频? (因此产生的视频反向播放?)

我想我可以通过为每个帧生成图像(所以图像文件夹标记为1.jpg,2.jpg等),然后编写脚本来更改图像名称,然后从这些文件中重新编码ivdeo

有谁知道更快的方式?

这是一个FLV视频。

谢谢

3 个答案:

答案 0 :(得分:18)

不可以使用ffmpeg对视频进行反向编码而不将其转储到图像然后再返回。网上有很多指南可以告诉你如何操作,特别是:

后者如下:

转储所有视频帧

$ ffmpeg -i input.mkv -an -qscale 1 %06d.jpg

转储音频

$ ffmpeg -i input.mkv -vn -ac 2 audio.wav

反向音频

$ sox -V audio.wav backwards.wav reverse

Cat视频帧与FFmpeg的输入顺序相反

$ cat $(ls -r *jpg) | ffmpeg -f image2pipe -vcodec mjpeg -r 25 -i - -i backwards.wav -vcodec libx264 -vpre slow -crf 20 -threads 0 -acodec flac output.mkv

使用mencoder对PAL dv进行去隔行,并将帧速率从25加倍到50,然后输入到FFmpeg。

$ mencoder input.dv -of rawvideo -ofps 50 -ovc raw -vf yadif=3,format=i420 -nosound -really-quiet -o - | ffmpeg -vsync 0 -f rawvideo -s 720x576 -r 50 -pix_fmt yuv420p -i - -vcodec libx264 -vpre slow -crf 20 -threads 0 video.mkv

答案 1 :(得分:10)

我根据Andrew Stubbs的回答

创建了一个脚本

https://gist.github.com/hfossli/6003302

可以这样使用

./ffmpeg_sox_reverse.sh -i Desktop/input.dv -o test.mp4

答案 2 :(得分:0)

一个问题是帧速率可能因视频而异,许多答案取决于特定的帧速率(例如“-r 25”表示每秒 25 帧)。如果视频中的帧率不同,会导致反转的音视频不同步。

您当然可以每次手动调整帧率(您可以通过运行 ffmpeg -i video.mkv 获得帧率并查找 fps 前面的数字,这有时是一个十进制数,例如 23.98)。但是使用一些 bash 代码,您可以轻松提取 fps,将其存储在一个变量中,并自动将其传递给程序。

基于此,我创建了以下 bash 脚本来执行此操作。只需 chmod +x 并运行它 ./make-reversed-video.sh input.mkv output.mkv。代码如下:

#!/bin/bash
#Partially based on https://nhs.io/reverse/, but with some modifications, including automatic extraction of the frame rate.

#Get parameters.
VIDEO_FILE=$1
OUTPUT_FILE=$2
TEMP_FOLDER=$3

echo Using input file: $VIDEO_FILE
echo Using output file: $OUTPUT_FILE

mkdir /tmp/create_reversed_video

#Get frame rate.
FRAME_RATE=$(ffmpeg -i "$VIDEO_FILE" 2>&1 | grep -o -P '[0-9\\. ]+fps' | grep -o -P '[0-9\\.]+')
echo The frame rate is: $FRAME_RATE

#Extract audio from video.
ffmpeg -i "$VIDEO_FILE" -vn -ac 2 /tmp/create_reversed_video/audio.wav

#Reverse the audio.
sox -V /tmp/create_reversed_video/audio.wav /tmp/create_reversed_video/backwards.wav reverse

#Extract each video frame as an image.
ffmpeg -i "$VIDEO_FILE" -an -qscale 1 /tmp/create_reversed_video/%06d.jpg

#Recombine into reversed video.
ls -1 /tmp/create_reversed_video/*.jpg | sort -r | xargs cat | ffmpeg -framerate $FRAME_RATE -f image2pipe -i - -i /tmp/create_reversed_video/backwards.wav "$OUTPUT_FILE"

#Delete temporary files.
rm -rf /tmp/create_reversed_video

我已经对它进行了测试,它在我的 Ubuntu 18.04 机器上运行了很多视频(在安装了像 sox 这样的依赖项之后)。请告诉我它是否适用于其他 Linux 发行版和版本。